当前位置:网站首页 > 编程语言 > 正文

esp8266天气预报 源码(esp8266天气预报oled)



目录

  • STM32F4+ESP8266+OLED的天气查询系统
  • 项目流程图
  • 一、注册“心知天气”
  • 二、ESP8266 连接网络
  • 三、获取当前天气信息
  • 四、解析天气数据并显示
  • 附录

在嵌入式系统领域,利用 STM32 和 ESP8266 实现天气查询并在 LCD 屏幕上显示的项目已经有很多文章和教程了。然而,我想在这篇博客中分享一个特定的项目,关于如何使用正点原子的 STM32F407 开发板和 ESP8266 模块来实现天气查询(无需手动发送 AT 指令),并将结果显示在 OLED 屏幕上。

esp8266 oled屏幕 esp8266接oled屏_单片机

esp8266 oled屏幕 esp8266接oled屏_单片机_02

访问天气平台需要先连接网络。本项目使用 AT 指令控制 ESP8266 连接手机热点。关于 AT 指令,可以简单了解一下,本文最后给出相关文章。

  1. 在代码中定义 wifista_ssid 和 wifista_password,分别存储热点名称和密码。
  2. 发送 AT 指令检测 ESP8266 模块是否正常工作,并关闭回显功能。然后,发送AT+CWMODE=1 指令设置 ESP8266 模块为 STA 模式,即客户端模式。
  3. 发送 AT+CIPMUX=0 指令设置 ESP8266 模块为单连接模式,即只能同时连接一个服务器。最后,发送 AT+CWJAP 指令并附上热点名称和密码,让 ESP8266 模块连接到手机热点,并等待返回 WIFI GOT IP 的信息,表示连接成功并获取到 IP 地址。

具体代码如下:

esp8266 oled屏幕 esp8266接oled屏_stm32_03

连接网络之后,向“心知天气”请求信息,返回 JSON 数据。具体步骤如下:

  1. 用 sprintf 函数拼接一个 AT+CIPSTART 指令,让 ESP8266 模块建立一个 TCP 连接到心知天气的服务器。然后调用 atk_8266_send_cmd 函数发送该指令,并等待返回 OK 的信息,表示连接成功。如果返回失败,则释放内存空间并返回1。
  2. 发送 AT+CIPMODE=1 指令,该指令的作用是设置 ESP8266 模块为透传模式,即直接将串口收到的数据发送到服务器。然后,清零 USART3_RX_STA 变量,该变量用来记录串口 3 接收到的数据状态。再发送 AT+CIPSEND 指令,该指令的作用是开始透传数据。然后打印一条提示信息 “start trans…”,表示开始传输数据。
  3. 用 u3_printf 函数发送一个 GET 请求,该请求的作用是向心知天气的 API 接口请求当前重庆市的天气信息,并指定语言为英文和单位为摄氏度。请求的格式为:GET https://api.seniverse.com/v3/weather/now.json?key=你的密钥&location=chongqing&language=en&unit=c ,等待服务器返回数据。
  4. 判断 USART3_RX_STA 变量是否有 0X8000 位为1,表示接收到了数据。如果是,则在串口 3 接收缓冲区的末尾加上一个结束符 0,表示字符串结束。

具体代码如下:

得到的 JSON 数据需要解析,本文只给出解析的步骤,其中有关 JSON 数据的内容可以参考附录中的文章。

  1. 定义一些变量和指针,用来存储和处理 JSON 数据。例如,pr 指针用来存储 JSON 字符串,strlocation 指针用来存储城市名称,strweather 指针用来存储天气状况,strtemp 指针用来存储温度,strtime 指针用来存储更新时间等。还有一些 cJSON 结构体的指针,用来表示 JSON 对象和数组。
  2. cJSON_Parse 函数将串口 3 接收到的数据转换为 cJSON 对象,并赋值给 root 指针。如果转换成功,则继续执行。
  3. 获取 results 对应的值。用 cJSON_GetObjectItem 函数从 root 对象中获取 results 键对应的值,并赋值给 pSub 指针。如果获取成功,则继续执行。获取数组中的第一个元素。接着用cJSON_GetArrayItem 函数从 pSub 数组中获取第0个元素,并赋值给 arrayItem 指针。然后用cJSON_Print 函数将 arrayItem 对象转换为字符串,并赋值给 pr 指针。再用 cJSON_Parse 函数将pr 字符串转换为 cJSON 对象,并赋值给 pItem 指针。如果转换成功,则继续执行。
  4. 获取 location 对应的值。接着用 cJSON_GetObjectItem 函数从 pItem 对象中获取 location 键对应的值,并赋值给 pSubItem 指针。如果获取成功,则继续执行。获取城市名称。获取天气状况和温度。获取更新时间。
  5. 显示城市名称、天气状况、温度和更新时间等信息。

具体代码如下:

esp8266 oled屏幕 esp8266接oled屏_单片机_04

esp8266 oled屏幕 esp8266接oled屏_单片机_05

到此这篇esp8266天气预报 源码(esp8266天气预报oled)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • max308中文资料(max3082中文资料)2025-10-12 12:18:06
  • Ubuntu源文件(ubuntu 源文件)2025-10-12 12:18:06
  • awvs是什么意思(awl是什么意思)2025-10-12 12:18:06
  • 获取位置权限怎么设置华为(获取位置权限怎么设置华为手机)2025-10-12 12:18:06
  • Ubuntu源码编译安装qt(ubuntu 安装qt)2025-10-12 12:18:06
  • lda主题模型是什么意思(lda主题模型文本分类)2025-10-12 12:18:06
  • keil破解步骤 2032(keil破解步骤)2025-10-12 12:18:06
  • 小米手机怎么换机到红米手机(小米手机怎么换机到红米手机上)2025-10-12 12:18:06
  • 幼儿园游戏的分类教案(幼儿园游戏的分类教案中班)2025-10-12 12:18:06
  • 怎样恢复回收站清空的文件(怎样恢复回收站清空的文件夹)2025-10-12 12:18:06
  • 全屏图片