玩转树莓派Pico(19): 迷你气象站5——软件整合
一、前言
各个模块都已经测试了,硬件也组装完成,到了软件整合的步骤了。
目前我仅按照自己的经验来整合,肯定要踩坑的。以后除了多去开源网站看看大佬的代码,还要继续揣摩《无线电》杂志里的文章。很多文章对我来说比较高深,看不大懂,只能多看多学多尝试。
二、整体框架
结合学习flask项目的经验和《代码大全》里的建议,我对该项目的整体框架设计是按功能和层次将各个模块分开。既能降低耦合,又使程序调理清晰、方便以后扩展。
分如下三个层次:
- main.py是顶层,是整个项目的入口,可以通过定时或中断来执行各个任务。
- 任务模块是中层,由main.py调用,执行各种任务。比如读取传感器数据、校时、发送数据等。
- 驱动模块、支持模块、配置模块是底层,他们是被调用的,相互独立,专注于各自的功能。
三、底层模块
底层模块只完成特定功能,只能被调用。
驱动模块
驱动模块专门与硬件打交道,放在drivers目录中。本项目用到的温湿度气压模块、光照模块、wifi模块,都有对应的驱动模块。
一般的驱动模块都是从网上下载的,可以直接使用。wifi模块是在别人的基础上改进的,除了连接wifi的基本功能外,在刷了带MQTT功能的固件后,可以轻松使用MQTT的相关功能。不但能发布订阅,还能获取网络时间,用于校时。
支持模块
支持模块提供额外的功能,放在supports目录下。目前仅有一个my_datetime.py,提供转换时间相关的功能。
配置模块
模块名称为settings.py,因为就一个文件,放在根目录下。我参照flask项目里的配置模块,做了Config类,放入要用到的一些设置参数和公共变量,方便更改。
四、中层模块
中层模块目前仅是任务模块,放在tasks目录中,由主程序按需调用。
wifi初始化任务模块
文件名为wifi_task.py,用于wifi的相关设置
读取气象数据任务模块
文件名为weatherdata_task.py,用于读取气象数据
MQTT任务模块
文件名为mqtt_task.py,用于发布和订阅消息
时间任务模块
文件名为time_task.py,用于获取网络时间并校时
五、顶层模块
顶层模块就是main.py,是整个项目的入口。我第一次使用看门狗和定时器功能,手忙脚乱,错误频出。特别时看门狗,用了之后pico会与电脑断开,最后只能暂时停用。
自我感觉主程序写的不好,不过目前先能用起来,等以后经验丰富了再改进。
六、代码
我在gitcode建了仓库,仓库地址:
GitCode - 全球开发者的开源社区,开源代码托管平台
七、测试效果
测试能达到预定效果。发布的消息分别是光照、气压、湿度、温度,用分号分隔。
接收订阅的消息
发布消息
云平台管理后台显示接收的消息
八、待完成的功能
为了不增加第一个项目的复杂度,目前仅完成读取和发送数据、校时等基本功能。更多功能以后慢慢加上。
待完成的功能如下:
- 建立本地的sqlite数据库,用于存储读取的气象数据和日志
- MQTT功能继续完善,比如遗嘱功能
- 在云服务器上用flask做一个网站,接收定时发送的数据并存储,可以以图表的方式展示气象数据
- 在树莓派或另一个pico上连接APRS的TNC设备,将获取的气象数据和定位信息通过无线电发射出去
另外还有个终端编号的功能取消了。本来是要装一个3位编码开关(要占用3个gpio针脚,不过pico的针脚很多),根据编码来设置终端的编号(0-7),适合多终端的情况。