目录
- STM32F4+ESP8266+OLED的天气查询系统
 - 项目流程图
 - 一、注册“心知天气”
 - 二、ESP8266 连接网络
 - 三、获取当前天气信息
 - 四、解析天气数据并显示
 - 附录
 
在嵌入式系统领域,利用 STM32 和 ESP8266 实现天气查询并在 LCD 屏幕上显示的项目已经有很多文章和教程了。然而,我想在这篇博客中分享一个特定的项目,关于如何使用正点原子的 STM32F407 开发板和 ESP8266 模块来实现天气查询(无需手动发送 AT 指令),并将结果显示在 OLED 屏幕上。


访问天气平台需要先连接网络。本项目使用 AT 指令控制 ESP8266 连接手机热点。关于 AT 指令,可以简单了解一下,本文最后给出相关文章。
- 在代码中定义 wifista_ssid 和 wifista_password,分别存储热点名称和密码。
 - 发送 AT 指令检测 ESP8266 模块是否正常工作,并关闭回显功能。然后,发送AT+CWMODE=1 指令设置 ESP8266 模块为 STA 模式,即客户端模式。
 - 发送 AT+CIPMUX=0 指令设置 ESP8266 模块为单连接模式,即只能同时连接一个服务器。最后,发送 AT+CWJAP 指令并附上热点名称和密码,让 ESP8266 模块连接到手机热点,并等待返回 WIFI GOT IP 的信息,表示连接成功并获取到 IP 地址。
 
具体代码如下:

连接网络之后,向“心知天气”请求信息,返回 JSON 数据。具体步骤如下:
- 用 sprintf 函数拼接一个 AT+CIPSTART 指令,让 ESP8266 模块建立一个 TCP 连接到心知天气的服务器。然后调用 atk_8266_send_cmd 函数发送该指令,并等待返回 OK 的信息,表示连接成功。如果返回失败,则释放内存空间并返回1。
 - 发送 AT+CIPMODE=1 指令,该指令的作用是设置 ESP8266 模块为透传模式,即直接将串口收到的数据发送到服务器。然后,清零 USART3_RX_STA 变量,该变量用来记录串口 3 接收到的数据状态。再发送 AT+CIPSEND 指令,该指令的作用是开始透传数据。然后打印一条提示信息 “start trans…”,表示开始传输数据。
 - 用 u3_printf 函数发送一个 GET 请求,该请求的作用是向心知天气的 API 接口请求当前重庆市的天气信息,并指定语言为英文和单位为摄氏度。请求的格式为:GET https://api.seniverse.com/v3/weather/now.json?key=你的密钥&location=chongqing&language=en&unit=c ,等待服务器返回数据。
 - 判断 USART3_RX_STA 变量是否有 0X8000 位为1,表示接收到了数据。如果是,则在串口 3 接收缓冲区的末尾加上一个结束符 0,表示字符串结束。
 
具体代码如下:
得到的 JSON 数据需要解析,本文只给出解析的步骤,其中有关 JSON 数据的内容可以参考附录中的文章。
- 定义一些变量和指针,用来存储和处理 JSON 数据。例如,pr 指针用来存储 JSON 字符串,strlocation 指针用来存储城市名称,strweather 指针用来存储天气状况,strtemp 指针用来存储温度,strtime 指针用来存储更新时间等。还有一些 cJSON 结构体的指针,用来表示 JSON 对象和数组。
 - cJSON_Parse 函数将串口 3 接收到的数据转换为 cJSON 对象,并赋值给 root 指针。如果转换成功,则继续执行。
 - 获取 results 对应的值。用 cJSON_GetObjectItem 函数从 root 对象中获取 results 键对应的值,并赋值给 pSub 指针。如果获取成功,则继续执行。获取数组中的第一个元素。接着用cJSON_GetArrayItem 函数从 pSub 数组中获取第0个元素,并赋值给 arrayItem 指针。然后用cJSON_Print 函数将 arrayItem 对象转换为字符串,并赋值给 pr 指针。再用 cJSON_Parse 函数将pr 字符串转换为 cJSON 对象,并赋值给 pItem 指针。如果转换成功,则继续执行。
 - 获取 location 对应的值。接着用 cJSON_GetObjectItem 函数从 pItem 对象中获取 location 键对应的值,并赋值给 pSubItem 指针。如果获取成功,则继续执行。获取城市名称。获取天气状况和温度。获取更新时间。
 - 显示城市名称、天气状况、温度和更新时间等信息。
 
具体代码如下:


到此这篇esp8266天气预报 源码(esp8266天气预报oled)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/bcyy/12033.html