基于esp32s2和rp2040游戏板制作的简易气象站
使用micropython编程,使用matlab将心知天气上的图标png文件转化为bin,利用esp32作为客户端联网辅助rp2040板子获取天气信息
标签
RP2040
2022暑假在家练
简易气象站
lmtt
更新2022-09-02
集美大学诚毅学院
757

1.项目介绍

我在本次2022暑假在家练活动中选择的是树莓派RP2040的嵌入式系统学习平台,这个开发平台可以使用C、C++和MicroPython进行开发编程。我在本次活动中选择项目3 简易气象站。

2.整体设计思路

  • 适用esp32作为客户端,烧录AT固件,让rp2040与esp32通过AT指令实现联网通信
  • 通过ADC读取X、Y轴摇杆电位器电压值,我设置的是向下向右摇实现城市的切换

3.框图和软件流程图

FsyCE8YGoHwkQw-Fb1MZZhtII6_H

 

4.简单的硬件介绍

rp2040,实际上就是树莓派raspberry pi pico。RP2040是Raspberry Pi 的首款微控制器。它为微控制器领域带来了我们高性能、低成本和易用性的标志性价值。RP2040 提供了硬件SPI总线以及硬件 I2C 总线各两组,我们可以使用一组SPI总线控制LCD屏幕,使用一组I2C总线接收姿态传感器的返回数据。他的优点是双核Arm Cortex M0+内核,可以运行到133MHz;264KB内存;性能强大、高度灵活的可编程IO可用于高速数字接口。

ESP32-S2-MINI-1模组由我国高新技术企业乐鑫科技推出的一款带2.4 GHz Wi­Fi 模组,他内置 ESP32­S2 系列芯片,Xtensa® 单核 32 位 LX7 微处理器;内置芯片叠封 4 MB flash,可叠封 2 MB PSRAM。拥有37 个 GPIO,可以搭载丰富的外设,板载的PCB 天线提高了无线传输能力。

四向摇杆是通过电压的变化值即可,判断摇杆是往哪个方向拨动。

本次暑期一起练,结合了rp2040和esp32的优点做出了这个项目。

 

5.实现的功能及图片展示

成功通过esp32联网获取信息

板子开机显示connecting....界面,待连接wifi成功后显示“SUCCEED”

等待通过http请求从心知天气获取实时天气信息后,摇杆确认,屏幕展示。

 

FgW8JtP-9M5EJoaPAL2TZpds1h2S

 

在每一次成功获取数据准备好后,就会让屏幕变蓝色,“try joysticks”尝试一下摇杆,发现向下摇和向右摇可以进入界面

FvCakxNYBvUHMDJ-66iXUm6xxm2c

进入界面,可以看到城市名,实时天气图标,温度,湿度,气压,最后更新时间和城市所在时区。FoppJ0nUOrQP-xCqdGoIElPAyMFB

这里我设置了几个城市,有汕头,厦门,伦敦(用来看时区变化的),北京,珠海。可以通过我提供的源码进行一一尝试,可是我的心知天气没有付费是试用版,如果要请求伦敦的天气还请记得更换秘钥哦!否则将无法解析返回的json值!将会直接报错退出程序.......

摇杆控制五个城市轮流播放后,将会回到第一个城市,依次循环播放。

 

 

5.主要代码片段及说明

首先是联网,这里需要前期准备工作,把AT固件烧录到esp32中,引入需要的库,认好rx/tx的接线,然后在rp2040当中调试。

network_AT = network.Network(uart=UART(0, baudrate=115200, tx=Pin(12), rx=Pin(13)),
                             recvInfo="",  # receive buffer global variable
                             cmd_retore='AT+RESTORE',
                             cmd_mode='AT+CWMODE=1',  # config as station
                             cmd_inquiry='AT+CIPSTA?',  # inquiry the IP address
                             cmd_connectRouter='AT+CWJAP="12344","qwertyui"',  # connect to Router
                             cmd_httpget='AT+HTTPCLIENT=2,0,"https://api.seniverse.com/v3/weather/now.json?key=S9cFGkU9-8xUWGEKe&location=shantou&language=en&unit=c",,,2',
                             cmd_ack='OK'
                             )


time.sleep(2)
if(network_AT.connectNetwork() == True):

    network_status = 1
    print('Done!')
    display.text(font2, "SUCCEED", 35, 150)

    time.sleep(1)
    display.text(font2, "turning blue...", 0, 200,0xfb08)
else:
    network_status = 0
    print('NetWork Config Error!')
time.sleep(3)
count = 0

 

然后需要对屏幕进行初始化。这里模仿了硬禾学堂在资料区上传在gitee的库和包,还有摇杆的初始化和值的判断,可以用硬禾的开源代码中的joystick直观感受。就不在此赘述了。

 

然后就是去查查阅心知天气的api请求方式还有返回的json值格式,这里要爆夸一下micropython的ujson库,省了很多事。具体使用方式欢迎问度娘!

            weather_json = ujson.loads(weatherInfo_str)
            weather_location = weather_json['results'][0]['location']['name']
            weather_text=weather_json['results'][0]['now']['text']
            weather_now = weather_json['results'][0]['now']['code']#天气图片
            #气压
            weather_pressure = weather_json['results'][0]['now']['pressure']
            #湿度
            weather_humidity = weather_json['results'][0]['now']['humidity']
            #wendu
            weather_temp = weather_json['results'][0]['now']['temperature']
            #qiya
            weather_pressure = weather_json['results'][0]['now']['pressure']  
            weather_time = weather_json['results'][0]['last_update']

 

6.遇到的主要难题及解决方法

  • 查阅返回的json值格式,json会返回一个code代表实时天气图标,在心知天气称为天气现象代码,链接在这里。可是下载了这些图标压缩包后发现都是png文件,在硬禾学堂的显示屏st7789的实例中使用的是bin文件,可是网上没有找到转化为bin的工具。自己动手丰衣足食,我想起了一个工具,matlab。这里有个显示屏的坑,就是图片的宽度值必须准确,否则图片会显示不出来。所以综上:先将1到38号先批量统一大小,然后批量将图片转为bin,由于matlab的for的限制,对0号图标需要对matlab进行删改。我将放在代码包里欢迎取阅。当然matlab里面还有不太完善的地方需要的时候需要简单调试。
  • 对于五个城市的循环查询,我想到了取模的方法。
    count = (count+1) % 5

    这样就实现了循环,保障5个城市按循环展示

    同理对按摇杆次数进行判断,实现了城市的切换。

  • 还有一个问题经常会出现ValueError: syntax error in JSON,虽然多点几下上传和多按几下reset就好了,但不知道是什么原因,还在排查。现在已经是能够成功实现完成任务了。

7.未来的计划或建议

这个项目中,其实还是有可以完善的地方,比如有了摇杆,显示屏和按键,能不能rp2040上做一个gui输入城市序列号或者手动选择wifi联网。亦或者这次活动其实有附带扬声器板卡,能不能做出语音播报天气等更加完善的功能,这些都是需要不断学习思考的。

这次的活动我受益颇多,对micropython的了解更加深入,也能够对python基础语法进行再回顾,有付出才会有收获,感谢硬禾学堂给我的这次机会参加活动。

 

附件下载
rp2040代码固件资料包.zip
团队介绍
林铭涛 集美大学诚毅学院
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号