前言
上次写的代码虽然能达到预期效果,但还是有很多问题的:
- 主程序main.py包含太多的内容,比较凌乱,因此整体设计要重新调整;
- 没有日志功能,脱离电脑运行时根本不知道情况。比如有时断电重启后就不发送数据了;
- wifi没有断线重连功能;
- 没有状态指示灯,不能直观的了解运行状态。
因此在正式使用前,必须先将上面的问题解决。
整体设计改进
drivers目录中仍放置各外设的驱动,是独立的,不依赖于其他模块;
supports目录仍放置额外支持用的模块,这次增加状态指示灯模块、日志模块;
新建外设模块peripherals.py,用于创建各外设的对象,不再在主程序中创建。也创建一些函数供任务模块调用;
任务模块也做了调整,分为系统任务、esp01s的任务(wifi相关、校时、mqtt相关)、传感器任务;
这样主程序就大大简化,只要创建并启用定时器、初始化、启用主循环。
设置功能
可以将部分配置信息放在ini文件中,比如需要远程设置的以及敏感信息。
为此在supports中创建ini_file_io.py,用来操作ini文件
状态指示灯闪烁功能
为了能一边执行任务,一边控制指示灯的闪烁以表示状态,我想到使用多线程。不过micropython的多线程不是太完善,在AI的帮助下,经过几次改版,终于完成。
在supports下新建status_led.py,里面有StatusLed类,可以在另一个线程控制led的闪烁。缺点是只能通过一个变量来控制子线程的运行情况,可能会带来新问题。目前的问题是连电脑调试时,停止主线程前,必须先停止子线程,否则设备会掉线,必须拔掉usb再插上。
日志功能
搜索到一个日志模块ulogger,基本能满足需求。缺点是没有轮转功能, 日志文件达到上限就清空重新开始。
源代码
源代码还没完全改好,尚未上传到gitcode。
参考文章
ESP32 MicroPython多线程控制LED闪烁频率_esp32多线程-CSDN博客
micropython-ulogger:为MicroPython量身定制的轻量级日志库-CSDN博客