【平头哥RVB2601创意应用开发】RVB2601之获取天气小工具
[复制链接]
项目往期连载文章传送门:
【平头哥RVB2601创意应用开发】 RVB2601之KV组件介绍和使用
【平头哥RVB2601创意应用开发】 RVB2601之OLED-SSD1306移植介绍和使用
【平头哥RVB2601创意应用开发】 RVB2601之cJSON介绍和使用
【平头哥RVB2601创意应用开发】 RVB2601之WiFi联网获取天气信息方式介绍和使用
一、作品简介
- 用户可以通过按键出发获取天气的动作
- 设备连接固定WiFi之后,接收到按键发出的条件,通过http去请求天气信息
- 获取天气信息成功后,解析天气信息JSON数据,·把结果发送给OLED显示线程
- oled屏同步显示获取天气信息和时间
二、系统介绍
1.使用到的硬件:
-
OLED(SPI接口)
软件模拟SPI:CLK:PA.28 MOSI:PA.29 CS:PA.27 MISO:PA.30
-
按键(GPIO)
使用IO:GPIO:PA.11
-
Wi-Fi(SPI)
使用IO:MOSI:PA.17 CS:PA15 MISO:PA18 CLK:PA.16 REST:PA.21 WAKEUP:PA.25
2.软件设计
1. 软件初始化会对网络、事件服务、日志和kv组件等进行初始化,并会创建线程"oled_task"、"button_task"、"get_weather_task"
2. kv组件:负责存储获取天气信息的URL,以及WiFi需要连接的热点SSID和PASSWORD
3. 网络部分:主要负责WiFi驱动和联网等工作,并移植增加了例如http get等接口,并做了底层的实现 network 的移植
4. 按键线程"button_task":用于用户主动查询获取当前天气的方式
5. 获取天气信息线程"get_weather_task":用于查询天气信息的线程,并解析数据,发送给其他线程
6. oled显示线程"oled_thread":屏幕用于显示同步用户操作获取到的当前天气信息
7. 使用了消息队列同于线程间通讯
三、各部分实现的功能说明和解析
1.网络部分
a.netmgr初始化和w800联网部分
b.回调函数中w800联网成功后,开始启动获取天气信息的线程
c.移植 http 接口和 http接口函数的实现 -network
2.OLED部分
a.部分移植 RT-thread软件包 ssd1306,优化部分API,例如直接增加字符串写入,之前是单个字符传入
b.接受weather_thread线程发送的天气信息,并显示
3.获取天气部分
a. 线程的创建
b. http get请求天气
c. cJSON解析天气信息,并发送给 oled_thread
4.按键部分
这里没有使用事件触发,只是做了很普通的轮询,也没有做长按、短按等状态判断,只是确认按键按下后,就发出查询天气状态消息,发送给weather_thread线程,来获取状态
四、视频演示
视频介绍:
- 给设备上电,OLED 会开机动画,闪烁几次,显示当前用户信息。
- 设备也会连接默认的热点
- 按键key1 按下,设备会请求天气信息
- 获取天气信息后,解析完成,发送到oled显示出来
视频地址:
https://b23.tv/l64gVqB
五、源码
开源仓库:
上传了pdf版本的项目介绍,希望代码大家可以借鉴使用或者多多交流。
|