1 项目需求
- RP2040 Game Kit板通过提供的ESP32-S2的WiFi模块连接网络
- 在RP2040 Game Kit上显示某一个城市的气象信息 - 时间、温度、湿度、气压....
- 通过RP2040 Game Kit上的按键能够切换显示不同城市的信息 ,比如:上海、苏州、东京、洛杉矶、伦敦
2 完成的功能及达到的性能
- 能够在LCD屏幕上显示天气的图标,城市名称,日期和当前时间。
- 能够实现RP2040和ESP32模块进行信息交流
- 能够利用ESP 32模块连接热点,能够向心知天气网站发送请求,同时能接收到网站发回的信息,所需的天气信息经过处理后能交给RP2040进行显示处理
3 设计思路和框图
设计思路第一步实现RP2040板子和ESP32模块之间的连接,把ESP32模块进行烧录,设定为特定模式后,把RP2040板子和ESP32模块的RX,TX管脚交叉用杜邦线连接,写程序完成RP2040板子和ESP32模块之间的通讯测试。
第二步就是利用AT指令向网站请求城市天气数据,最终收到请求的城市天气数据,并从传来的数据中进行信息的提取,得到城市名称,温度和天气代码。
place = ure.compile('"name":"(.*?)"')
temperature = ure.compile('"temperature":"(.*?)"')
tianqi = ure.compile('"code":"(.*?)"')
...
pl=place.search(MM.decode()).group(0)
temp=temperature.search(MM.decode()).group(0)
tq=tianqi.search(MM.decode()).group(0)
第三步对得到的相关城市天气信息进行显示
display.text(font2, pl[8:-1], 10, 90)
display.text(font2, temp[15:-1] ,10, 120)
display.text(font1, "o" ,50, 120)
display.text(font2, "C" ,60, 120)
...
display.text(font2, year, 10, 150)
display.text(font2, ".", 80, 150)
display.text(font2, month, 100, 150)
display.text(font2, ".", 120, 150)
display.text(font2, day, 140, 150)
display.text(font2, hour, 80, 190)
display.text(font2, ":", 110, 190)
display.text(font2, minute, 120, 190)
第四步写第二线程扫描按键,协调两线程之间的信息处理和处理信息的分工,快速线程扫描按键并计时,慢速线程进行显示的功能
框图
4 硬件介绍
- RP2040 Game Kit是基于树莓派RP2040的嵌入式系统学习平台,通过USB Type-C连接器供电,采用RP2040作为主控,具有双核Arm Cortex M0+内核和264KB内存,可通过MicroPython或C/C++编程,性能强大。板上四向摇杆 + 2个轻触按键 + 一个三轴姿态传感器MMA7660用做输入控制,并有240*240分辨率的彩色LCD屏显示,片内温度传感器、并支持外部4路模拟信号输入,内部ADC采样率高达500Ksps。线路图如下:
-
ESP32模块是物联网、可穿戴电子设备和智能家居等应用场景的理想选择,板载了:
- ESP32-S2-MINI-1模组
- 这是一款2.4 GHz WiFi 模组
- 内置 ESP32S2 系列芯片,Xtensa® 单核 32 位 LX7 微处理器
- 内置芯片叠封 4 MB flash,可叠封 2 MB PSRAM
- 37 个 GPIO,具有丰富的外设
- 板载 PCB 天线
配套的ESP32 S2 开发板除了ESP32wifi模组之外还集成了USB TYPE -C接口,两个按键,一个电源指示灯,一个用户LED灯,2排10pin的排针,将重要IO引出。使用USB供电或通过排针3.3V供电。
ESP32-S2 是一款高度集成、高性价比、低功耗、主打安全的单核 Wi-Fi SoC,具备强大的功能和丰富的 IO 接口。使用乐鑫ESP-IF开发环境,我们可以通过USB对其编程,作为带wifi的MCU单独使用,也可以烧录AT固件,作为WiFi透传模块与RP2040游戏机套件结合使用。
5 功能展示
显示城市名称,温度,日期和当前时间,按B键进行城市切换
北京
安庆
东莞
深圳
长沙
6 遇到的问题和解决过程
首先遇到的问题就是我的RP2040和ESP32无法进行通信,在已经写好了AT的配置代码之后没有得到从ESP32返回的OK,一直是报错状态,在和同学的交流中得知可能是在进行烧录固件出现错误,导致ESP32没有成功配置。在利用同学的电脑重新烧录固件之后成功进行通信。
遇到的第二个大问题就是板子没有办法连接上学校的校园网和iphone的热点,导致联网的返回值一直是busy,后来是借用安卓手机的热点成功联网,请求北京的天气成功。
第三个问题出现在写程序的过程中,我不会把心知天气网站给的数据进行处理,使得数据能够以字符串形式显示,后来我经过查找学会了匹配函数search和取字符串特定位的操作成功在LCD屏幕显示出一个城市的相关信息。
最后遇到的最大的问题就是读取按键的方式,一开始我使用按键硬中断进行按键扫描,最后发现按键有抖动,同时我发现采用中断的方式很难对按键出现错误或者返回值不符合的情况进行处理。后来我转换思路利用双线程进行分工,两个线程执行的工作一快一慢,快的线程进行扫描按键和计数这种需要高速扫描的工作,慢的线程对快的线程进行反应,执行请求数据和刷新显示的不常进行的功能,最后两个线程工作和谐完成了这个项目。
7 未来的计划和建议
未来可能会利用所学的知识对其他的配件如LED灯板进行开发,通过硬禾学堂提供的其他例子继续学习相关的知识,或者构思相关的有趣的小产品。建议就是下次可以把网站的搜索功能优化一下,有很多很有益的帖子没有办法搜索到,有时候一些好的思路可以节省很多时间。