使用ESP8266模块来获取网络数据(天气,时间等),还是挺简单的。
一步一步来。
1.初始化串口与相关IO
使得MCU可正常使用串口的发送与接收,以及一些IO控制ESP8266的使能端与电源。
2检测模块
通电后等待几秒钟,串口发送"AT ",检测有回应"OK"则代表模块在线使用。
3.连接路由热点
发送"AT+CWJAP? "可以获取当前连接的路由,如果没有连接正确的路由,则使用"AT+CWLAP "命令获取当前路由列表。
使用"AT+CWJAP="ssid_str","password_str" "连接相关路由热点,ssid_str为热点名,password_str为密码。注意其中的转义符号。
4.连接网络天气服务器
这个可以自己百度搜索,我使用的api.yytianqi.com:80,还有api.k780.com:88。冒号前是服务器,冒号后是端口。
以yytianqi举例,可以上他们的网站查看API说明。使用前需要注册一个账号。(k780有公共测试的秘钥不需要注册也能使用)
网站:http://www.yytianqi.com/api.html
发送"AT+CIPSTART="TCP","api.yytianqi.com",80 "使用TCP方式连接服务器,然后就可以与之通信。这时可以使用AT命令进入透传模式,不过我不建议这样,因为推出透传模式有点坑。所以推荐直接使用发送命令:"AT+CIPSEND=num ",num是实际需要发送字符串的字节数。继续,使用GET命令请求数据"GET http://api.yytianqi.com/observe?city=CH&key=xxxx ",xxxx是自己的秘钥,注册后网站提供,"city="后面是城市编号。
这时服务器会返回相关的数据,数据是JSON格式。前面我写过冠以JSON在KEIL上的移植使用。这里正好用上了。通常服务器返回数据后会自动关闭TCP连接。不过为了保险最好发送"AT+CIPCLOSE "关闭与服务器的连接。
5.数据解析
理论上,JSON数据也就是特定格式的字符串,可以自己对字符串进行解析而不需要移植JSON。开始我也试过,比如使用strstr()函数寻找特定字符串,但最终发现不稳健而且麻烦。原因是服务器返回的数据模式不是每次都固定不变,比如某个内容,有时使用字符型,有时直接数字,打个比方也即是12和"12"的区别,甚至有时是浮点型有时又会变成整型数据。而且各个内容顺序不保证一样。所以还是建议移植JSON。
数据内容会有些UTF格式汉字,我使用的串口屏只支持GBK汉字,只是测试所以没有做UTF到GBK的转换,直接使用函数映射相关中文内容。如下:
6.实际效果
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/rfx/72668.html