知方号

知方号

关于ESP8266+OLED显示网络天气+天气图标,我掉进过的一些坑<怎么样把时间和天气显示在手机上>

关于ESP8266+OLED显示网络天气+天气图标,我掉进过的一些坑

就权当是给自己写的一个总结吧。 中间也走过不少的弯路,没人指导,只有自己慢慢摸索,网上看到的教程也是零零散散,或许是自己C代码功底不够硬,总之照搬别人的结果坑到最后还是自己,搞得一身疲惫,最后索性,按自己的想法来搞,废话不多说,先上几张图: 共有6页,MCU上两个按键控制,K1向前翻页,K2向后翻,第1页为默认页,是switch控制的默认页,然后第二页是RTC实时时钟,翻到这页数字时钟就会自动地跑起来-- 其实它是在后台跑的,永不停歇,除非没电池了!第三页为今天的天气预报,其实是由ESP8266访问心知天气服务端口后返回来的数据解析得来,说起来这也是一个坑!因为心知天气返回来的是cJSON数据,要分析它的代码谈何容易,对于只会C代码的我来说除了用strstr来截取关键字外别无它法,后来不服呀,索性又学下怎么去解析cJSON数据,这一学又花了我一天时间,学着学着发现自己又掉入了另一个坑:因为要解析cJSON之前必须要先检查下返回来的数据包是否是cJSON数据包,明明是原封不动的返回来的数据包,得到的却是乱码,没错,中文全是乱码!--可想知,英文的方便,那些说用中文来替代代码的不知道他是怎么想,不是我看得起英文,而是我还得再花功夫去把这一包cJSON数据中的中文转换为GBK格式!--网上说cJSON的数据是UTF8格式的。 真是越搞事越多,一个头两个大! 要想转换为GBK,我发现并不是那么容易,纯C语言好难搞,即使弄好了,你会发现,为了那三五个中文正常显示,你的代码量或文字表格会多出几十K出来!这是我不能容忍的,索性用英文吧,把GET XXX,中的语言换为en,这下子整个代码过程顺利多了!有人说Linux上很简单呀,你是这么说,但我是用KEIL5.0开发的,那些个头文件看着都陌生!难道还要去找,去下载这些个鬼东西?英文他不香吗? 最后在取字模软件上取自己想要的文字然后再替换一些英文,一切得到完美解决! 我以为OLED上要显示的天气图标网络上会提供数据的,结果找了好久,没有,想想也对,人家怎么知道你要多大像素的?一想到这里发现自己好笨,笨哭了!一边用取模软件提取图片数据包一边在暗骂自己,活该你单身!--等等?关单身什么事?好像我总是把对方想得很完美? 就像这些代码,本身也不能算是很完美,ESP8266要玩得好,不是一朝一夕的事,可用命令指令集来开发也可以直接开发,将代码烤进ESP8266,用寄存器来开发,这是我下一个学习的目标。现在先看下用AT指令集的: 首先是我写了一个指针数组,将需要用到的指令全都集中在一起,不会指针数组的网上也有很多教程哈,这里就不再啰嗦了。

const u8 *WIFI_CMD_TAB[]={ //指针数组"AT","AT+CWMODE=1",//设置为STA模式"AT+RST",//复位"AT+CIPMUX=0",//单连接模式"AT+CWJAP="iPhone","123456788"",//连入WIFI热点"AT+CIPSTART="TCP","api.seniverse.com",80",//建立TCP连接"AT+CIPMODE=1",//开启透传模式"AT+CIPSEND",//发送数据"GET https://api.seniverse.com/v3/weather/now.json?key=SPidi8cEM8Os4k3vn&location=shenzhen&language=en&unit=c",//这里语言改为英文,我的密钥也提供给大家用了。//"+++",//不能放这里,因为不需要换行回车//"AT+CIPCLOSE",};const u8 *WIFI_CMD_INFO[]={//一些信息提示 "开始启动...","启动成功!","STA模式配置...","STA模式配置成功!","复位中...","复位成功!","配置为单连接模式...","单连接模式配置成功!","接入WIFI热点...","连接热点成功!","建立TCP连接...","TCP

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至lizi9903@foxmail.com举报,一经查实,本站将立刻删除。