STM32+ESP8266获取天气
最近在做一个天气小闹钟,采用STM32+ESP8266的方案获取天气。
1.搭建环境
stm32的esp8266驱动网上有许多,做开发板的一般都有配套,这里不在赘述,我们直接拿一个wifi透传的历程进行修改
2.天气接口
网上搜索天气API接口可以找到很多,有不少需要注册然后会获得一些免费的次数,这里我们希望可以找到完全免费不限次数的接口,经过查找找到一篇博客,如下:
https://blog.csdn.net/wanghao940101/article/details/72123184
决定就使用这个接口了:
http://wthrcdn.etouch.cn/weather_mini?citykey=101250201
2.1测试使用
直接在浏览器输入这个地址发现这个接口不像其他那些免费的接口结果是乱码,但是记得在写qt应用的时候返回的不是乱码,浏览器返回的数据粘贴在记事本上重新编码打开是可以得到正确的结果。
2.2stm32上测试
我们在透传历程中将wthrcdn.etouch.cn设为服务器地址,端口为80,进行测试,果然可以连接上,试着给esp8266发送
GET http://wthrcdn.etouch.cn/weather_mini?citykey=101250201\r\n
采用串口打印返回结果,什么都没有,试着把接收缓冲区的内容按16进制打印出来,发现返回的数据是有gzip头的,在网上进行搜索发现,这个接口返回的数据是经过压缩的,这下只好移植gzip进行解压缩。
3.gzip移植
gzip移植并不难,主要是占用的ram太大了,只好在加了一片外部sram。移植gzip的工程可以在这里下载
完成了gzip的移植就可以对返回的数据进行解压了
4.JSON解析
解压了数据之后正确的得到了JSON数据包,这时我们移植cJSON进行解析,cJSON移植比较简单,直接去github上下载,修改一下malloc即可。
完成了解析就可以得到自己需要的信息了,主要解压出数据是utf-8的编码方式。
先简单记录一下,有时间继续补充细节和图片