一直想做一个能够通过WiFi模块来获取 互联网获取 时间 和 天气 的时钟,网上大部分是获取时间的教程,对于获取天气的教程都是我看不懂的神奇语言,对于我这种不会java、html或者JSON什么乱七八糟的菜鸡来说就是天书,因此我只做出来能够获取网络时间的时钟,获取天气的没有实现。
最近由于某些设计需要又重新研究了下,终于弄清楚获取天气信息的方法了,今天我这个菜鸡就来给大家分享下通过AT指令获取网络天气和时间过程。
ESP8266的接线我就不再说明了,如果对接线不清楚,可以进入 >>>> ESP8266接线接线说明 <<<<这道传送门来搞清楚接线方式。
波特率啥的初始化设置我就不提了,AT手册或者例程都有,我这波特率设置成了9600。
依旧建议使用SSCOM串口助手,因为它可以存指令集,如图:
首先发送个AT+RST将模块软件复位:
AT+RST
OK
"蕛M儬;赝覩?塕熳Q?
[Vendor:www.ai-thinker.com Version:0.9.2.4]
ready
//这是我的模块返回的字符,管他啥版本呢,返回OK或者ready就行了
获取网络时间,顾名思义,因此需要连接网络,首先将模块配置为输入模式也就是STA模式:(不知道输入+输出模式可不可以,没试过,也懒得试,如果有兴趣具体模式的说明与设置请参考>>>>ESP8266-3种模式用法<<<<这位大佬的文章,很详细!)
AT+CWMODE=1 //1 STA 2 AP 3 STA+AP
OK //设置完模式之后一定要软重启才可以
AT+RST
OK
"蕛M儬;赝覩?塕熳Q?
[Vendor:www.ai-thinker.com Version:0.9.2.4]
ready //复位之后 模式切换就成功了
切换完STA模式之后就可以连接WiFi了,首先对附近的WiFi列表,或者你确定你开了WiFi就直接连接就行了,演示如下:
AT+CWLAP //列表指令
+CWLAP:(4,"SU-27",-66,"88:25:93:17:80:06",1)
+CWLAP:(3,"SU-47",-25,"94:87:e0:4c:bd:d8",6)
OK
AT+CWJAP="SU-47","qweqwe.3" //输入正确的WIFi名称和密码进行连接
OK //连接成功
WiFi连接成功过后就可以连接API了,Baidu搜索天气API会有很多API接口,我仅仅以其中一个做演示,其他的感觉应该大同小异吧!
AT+CIPSTART="TCP","tianqiapi.com",80 //Baidu搜索来的API地址,我仅此演示,至于为啥后面是80,我也不知道...
//看他们都写80,我也写80,能连接成功就行!
OK
Linked //收到OK和Linked后,就说明连接成功
到了这一步就说明成功一大步了,接下来就看你是想单纯的获取时间还是想获取其他信息了。
单纯获取时间
单纯的获取时间就很方便,但也不怎么方便。。。因为获取的时间是GMT时间,与北京时间有8小时的时差,因此你不知道第二天是几号或者星期几啥的,所以这个方法对不需要显示日历的时钟很友好,对于需要显示日历的设计就需要有日历库或者计算函数啥的了,多费劲儿啊,不值个,因此有日历的还是建议不用这个方式获取时间。下面是演示只获取时间的方法(继续上面连接的API):
AT+CIPSEND=5 //需要发送的字符个数
> GET //把0x0D和0x0A算上一共是5个字符
SEND OK
+IPD,295:HTTP/1.1 400 Bad Request
Server: nginx
Date: Thu, 30 Apr 2020 05:53:35 GMT //当前是13点53 与北京时间相差8小时
Content-Type: text/html
Content-Length: 150
Connection: close
400 Bad Request
400 Bad Request
nginx
OK
ERROR
Unlink //获取结束后自动断开连接
亲测,不一定必须发送"GET",随便发送,只要有0x0D和0x0A就行,如图:
到此,单纯的获取时间就结束了,时间信息需要自行写函数提取,我就不介绍了,本文仅介绍AT指令串口调试过程。
单纯时间?我全都要!
接下来就介绍获取天气和时间的方法了,这里获取的时间是北京时间,不需要换算,得到几点就是几点。
如图:
下面我对上图的发送和返回的参数解释一下。
AT+CIPSEND=77 //发送77个字符
> GET https://tianqiapi.com/api?version=v61&appid=********&appsecret=********
//上面一条,算上0x0D和0x0A一共77个字符,其中的星号*代表账户和密码,这需要在网站里注册获得,
//由于我是个人用户并且一天请求量也不高,因此我选择了白嫖。。。大家按需分配,具体信息请到官网
//查看[天气API](https://www.tianqiapi.com/)
SEND OK //发送成功
+IPD,1416:{
"cityid":"101071301", //城市代号:101071301,盘锦,盘锦,辽宁
"date":"2020-04-30", //日期:2020-04-30
"week":"\u661f\u671f\u56db",//星期:星期四(Unicode编码,Baidu或者其他手段转换下即可得到中文)
"update_time":"14:06", //时间:14:06
"city":"\u76d8\u9526", //城市:盘锦
"cityEn":"panjin", //城市英文:panjin
"country":"\u4e2d\u56fd", //国家:中国
"countryEn":"China", //国家英文:China
"wea":"\u6674", //天气:晴
"wea_img":"qing", //天气图标:qing
"tem":"21", //实时温度:21℃
"tem1":"22", //白天温度(高温):22℃
"tem2":"14", //白天温度(低温):14℃
"win":"\u5357\u98ce", //风向:南风
"win_speed":"5\u7ea7", //风力:5级
"win_meter":"24-34km\/h", //风速:24-34km/h
"humidity":"50%", //湿度:50%
"visibility":"30km", //能见度:30km
"pressure":"1007", //气压:1007hpa
"air":"54", //空气:54 (这啥啊...啥54啊...)
"air_pm25":"38", //PM2.5含量:38μg/m³
"air_level":"\u826f", //空气质量:良
"air_tips":"\u7a7a\u6c14\u597d\uff0c\u53ef\u4ee5\u5916\u51fa\u6d3b\u52a8\uff0c\u9664\u6781
\u5c11\u6570\u5bf9\u6c61\u67d3\u7269\u7279\u522b\u654f\u611f\u7684\u4eba\u7fa4\u4ee5\u5916
\uff0c\u5bf9\u516c\u4f17\u6ca1\u6709\u5371\u5bb3\uff01",
//空气小建议:空气好,可以外出活动,除极少数对污染物特别敏感的人群以外,对公众没有危害!
"alarm":{ //警报
"alarm_type":"",
"alarm_level":"",
"alarm_content":""
},//啥都警报没说
"aqi":{
"air":"54", //...又来了 空气:54
"air_level":"\u826f", //空气质量:良
"air_tips":"\u7a7a\u6c14\u597d\uff0c\u53ef\u4ee5\u5916\u51fa\u6d3b\u52a8\uff0c\u9664
\u6781\u5c11\u6570\u5bf9\u6c61\u67d3\u7269\u7279\u522b\u654f\u611f\u7684\u4eba\u7fa4
\u4ee5\u5916\uff0c\u5bf9\u516c\u4f17\u6ca1\u6709\u5371\u5bb3\uff01",
//空气小建议:空气好,可以外出活动,除极少数对污染物特别敏感的人群以外,对公众没有危害!
"pm25":"38", //PM2.5含量:38μg/m³
"pm25_desc":"\u826f", //PM2.5质量:良
"pm10":"48", //PM1.0含量:48μg/m³
"pm10_desc":"\u4f18", //PM1.0质量:优
"o3":"133", //O³含量:133μg/m³
"o3_desc":"\u826f", //O³质量:良
"no2":"20", //NO²含量:20μg/m³
"no2_desc":"\u4f18", //NO²质量:优
"so2":"14", //SO²含量:14μg/m³
"so2_desc":"\u4f18", //SO²质量:优
"kouzhao":"\u65e0\u9700\u6234\u53e3\u7f69", //口罩:无需戴口罩
"waichu":"\u9002\u5b9c\u5916\u51fa", //外出:适宜外出
"kaichuang":"\u9002\u5b9c\u5f00\u7a97", //开窗:适宜开窗
"jinghuaqi":"\u5173\u95ed\u51c0\u5316\u5668",//净化器:关闭净化器
"cityid":"101071301", //城市代号:101071301,盘锦,盘锦,辽宁
"city":"\u76d8\u9526", //城市:盘锦
"cityEn":"panjin", //城市英文:panjin
"country":"\u4e2d\u56fd",//国家:中国
"countryEn":"China" //国家英文:China
}
}
OK
OK!接收到了这么多信息,接下来的任务就是提取有用的信息了,这就交给在座的大佬们了!
我这个获取API的网址只是演示,网址不止它一家,大家可以自己找啥的,听说还能设置城市啥的,我还没研究,先就这样吧!
参考传送门:
ESP8266 WiFi模块AT指令_学习笔记