本文介绍STM32+ESP8266如何获取实时天气信息并通过显示屏显示出来。
在写代码之前,我们首先要注册新知天气并获取API接口,当然了大家也可以用其他的天气API,大同小异。
一、注册新知天气
地址:心知天气 - 高精度气象数据 - 天气数据API接口 - 行业气象解决方案 (seniverse.com)
然后注册账号,会收到验证链接到邮箱,登录邮箱点击链接完成注册,然后登录。
登录之后进入控制台,在控制台用依次 产品管理--添加产品--免费版免费申请。
申请完之后,在左侧就可以看到我们刚申请的免费版,点击免费版,就可以看到我们的公钥和私钥,这个很重要,后面要用到。
API接口为:https://api.seniverse.com/v3/weather/now.json?key=your_private_key&location=beijing&language=zh-Hans&unit=c
需要把上面的your_private_key替换成你的私钥,把beijing替换成你的城市,就可以了。还有一种更安全的方式是公钥+私钥签名认证的方式,但是比较复杂,这里就不多做介绍,有需要的可以百度一下。
二、STM32通过ESP8266入网
ESP8266模块可以通过AT指令控制搭配使用源代码API函数开发,总体开发速度快,难度较低。
说明:下面仅列举一些最常用的AT指令及用法,指令的详细参数及使用说明请参考官方文档:ESP8266 AT指令集。
基础指令
AT 测试AT启动
AT+RST 重启模块
AT+GMR 查看版本信息
WiFi功能AT指令
AT+CWMODE 设置WiFi模式(sta/AP/sta+AP)
AT+CWLAP 扫描附近的AP信息
AT+CWJAP 连接AP
AT+CWQAP 与AP断开连接
AT+CWSAP 设置ESP8266 softAP配置
AT+CWLIF 获取连接到 ESP8266 softAP 的 station 的信息
关于WiFi模式这里要说明一下,sta模式下模块相当于客户端,像我们手机平板一样是要去连接路由器的,而AP模式下模块相当于路由器,是发射WiFi被别人连的。ESP8266支持两种模式并存(模块出厂默认的是AP模式) 。另外,扫描WiFi指令 AT+CWLAP 只能在sta模式下使用,否则会报ERRO错误, AT+CWJAP 和 AT+CWQAP 指令也同理。
ESP8266开启sta模式连接WiFi步骤
1.发送 AT+CWMODE=1 指令配置模块为sta模式(参数1,2,3分别对应模式sta,AP和sta/AP)。
2.发送 AT+CWLAP 指令扫描当前附近WiFi,模块会返回可用AP列表。
3.使用 AT+CWJAP=“WiFi名称”,“WiFi密码” 连接到指定的路由器,比如WiFi是 “ESP8266”,密码是“666888”,实际连接WiFi发送的指令就是 AT+CWJAP=“ESP8266”,“666888” 。
返回的“WIFI CONNECTED”说明连接成功,“WIFI GOT IP”代表模块分配到了IP。
4.最后可使用 AT+CWQAP 断开当前连接的WiFi。
获取天气数据:
1.发送指令AT+CIPSTART=“TCP”,“api.seniverse.com”,80,和心知天气建立TCP连接。
2.发送指令“AT+CIPMODE=1”设置成功则返回OK。
3.发送指令“AT+CIPSEND” 开始透传。
4.发送“GET https://api.seniverse.com/v3/weather/now.json?key=私钥&location=城市拼音&language=zh-Hans&unit=c”向网址提出请求。
5.解析返回的数据。
6.退出透传。
7.关闭TCP连接。
解析返回的JSON数据内容:
{"results":[{"location":{"id":"3WEC2MYYCM6J5","name":"SuZhou","country":"CN","path":"Suzhou,Suzhou,Jiangsu,China","timezone":"Asia/Shanghai","timezone_offset":"+08:00"},"now":{"text":"Cloudy","code":"4","temperature":"28"},"last_update":"2024-05-05T09:45:00+08:00"}]}
上面比较有用的信息是城市的名字:苏州 天气情况:多云 温度28度。
然后我们就可以通过显示屏把这些数据显示出来了。