使用rp2040和esp32实现简易气象站
RP2040 Game Kit是基于树莓派RP2040的嵌入式系统学习平台,具有双核Arm Cortex M0+内核和264KB内存,可通过MicroPython或C/C++编程,性能强大。通过与esp32配合实现网络天气数据的读取并显示
标签
嵌入式系统
显示
2022年暑假在家一起练
wwwds
更新2022-09-07
西安交通大学
982

2022年暑假在家一起练 rp2040气象站

1.简介

RP2040 Game Kit是基于树莓派RP2040的嵌入式系统学习平台,通过USB Type-C连接器供电,采用RP2040作为主控,具有双核Arm Cortex M0+内核和264KB内存,可通过MicroPython或C/C++编程,性能强大。板上四向摇杆 + 2个轻触按键 + 一个三轴姿态传感器MMA7660用做输入控制,并有240*240分辨率的彩色LCD屏显示,片内温度传感器、并支持外部4路模拟信号输入,内部ADC采样率高达500Ksps。可玩性极高,可移植多款复古游戏,还可作为电赛的控制、显示接口平台,搭配传感器、模拟电路外还可以完成更多创意项目。

2.环境搭建

参考了树莓派pico的配置过程,毕竟使用了相同的双核m0主控芯片。pico网站

3 简易气象站

目标: 制作一个简单的气象台,能够实时播放5个城市的气象信息

 

esp32s2配置AT命令

 

什么是espAT?

ESP-AT 是基于 ESP-IDF 或 ESP8266_RTOS_SDK 实现的软件工程。它使 ESP 模组作为从机,MCU 作为主机。MCU 发送 AT 命令给 ESP 模组,控制 ESP 模组执行不同的操作,并接收 ESP 模组返回的 AT 响应。ESP-AT 提供了大量功能不同的 AT 命令,如 Wi-Fi 命令、TCP/IP 命令、Bluetooth LE 命令、Bluetooth 命令、MQTT 命令、HTTP 命令、Ethernet 命令等。

 

AT命令

AT 命令以 “AT” 开始,代表 Attention,以新的一行 (CR LF) 为结尾。输入的每条命令都会返回 OK 或 ERROR 的响应,表示当前命令的最终执行结果。注意,所有 AT 命令均为串行执行,每次只能执行一条命令。因此,在使用 AT 命令时,应等待上一条命令执行完毕后,再发送下一条命令。如果上一条命令未执行完毕,又发送了新的命令,则会返回 busy p... 提示。更多有关 AT 命令的信息可参见 AT 命令集。

 

刷入at固件

在flashdownloadtool选择esp32s2,usb模式打开
按住boot按键,进入boot模式,启动。此时在计算机端口可见一个其他设备。烧录开始地址0x0,烧录固件。烧录完成后rst按键重启,固件开始工作

 

连接

FnbhKTO7K07VQ847st7gavDmfDzG

对于esp32s2,其对应管脚为 

FsulxZ8rnaaHbZwsulSPhSCt1MhBFr30cOlbjJxID-8lAe2PPDfpF5N-

参考乐鑫官方的链接,进行连线

烧录 按住boot按键上电进入bootloader模式
使用烧写工具在对应串口写入at固件,此处使用安信可提供的固件
Fq0c3CQDW5UryQHQPzoIZEz_3UVb
地址为0x0,固件本身已经拼接好
rst后开始运行固件

 

验证固件

在esp32的uart1打开串口,发送AT+GMR,得到了如下相应。
FsCHFtFn2_ezNXKP_2n6P27GqzO7

对应到esp32s2的管脚,使用了u0tx和u0rx两个引脚,分别与rp2040的uart0的两个引脚相连接

esp32s2管脚

rp2040使用GPIO12 13,对应板插头SPI1_Rx和Cs
GPIO12(Uart0Tx)J3 Pin16---Rx
GPIO13(Uart0Rx)J3 Pin14---Tx

最终完成接线
FuNEn_vJWRAhWF63cykpw4O-NLgn

 

编程

乐鑫官方文档给出了AT命令的使用方法
FsBI2gMrkH9C25SRvh0ZC-2oM_ex
对于天气信息的获取主要用到了其中的TCP/IP命令 心知天气API请求方法
查看乐鑫官方的AT命令示例
拿到心知api后,对api进行一下测试,发现可用

 

{"results":[{"location":{"id":"WX4FBXXFKE4F","name":"北京","country":"CN","path":"北京,北京,中国","timezone":"Asia/Shanghai","timezone_offset":"+08:00"},"now":{"text":"晴","code":"0","temperature":"25"},"last_update":"2022-08-27T10:30:00+08:00"}]}

经过拆分后可以拿到now标签的信息{'text': '晴', 'code': '0', 'temperature': '25'}
其中天气代码信息为
FnIaWLAzdNQZeUvGkqfvYnEqJ--D

屏幕显示rgb565 单个像素 5+5+6 两个字节 转换的时候要为16bit深度,这里需要注意

4. 代码说明

Fldb4JpSZ8UdkQ9FnZouTA9yqjkN

netmain.py通过network.py,借助AT命令,将esp32对心知天气api进行请求,每次得到返回的字符串,通过解析json格式得到最终的天气列表。通过控制天气数组的长度进行循环,经过多次请求后得到所有查询的城市天气信息,返回天气列表

主函数通过一个按键循环,将按键的状态对应到天气列表的城市,通过显示刷新函数对lcd屏幕进行绘制。

项目收获

通过这个实验,不仅学习了micro python的编程,和一些简单的网络编程,字符串解析,同时也对esp32的使用有了一定的了解,对一个简单的项目开发有了一定了解

 

附件下载
code.zip
团队介绍
wds
团队成员
wwwds
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号