玩转树莓派Pico(20): 迷你气象站6——软件整合改进

前言

        上次写的代码虽然能达到预期效果,但还是有很多问题的:

  • 主程序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博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/891095.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【LeetCode: 83. 删除排序链表中的重复元素 + 链表】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

算法练习——模拟题

前言:模拟题的特点在于没有什么固定的技巧,完全考验自己的代码能力,因此有助于提升自己的代码水平。如果说一定有什么技巧的话,那就是有的模拟题能够通过找规律来简化算法。 一:替换所有问号 题目要求: 解…

Idea创建JDK17的maven项目失败

Idea创建JDK17的maven项目失败 Error occurred during initialization of VM Could not find agent library instrument on the library path, with error: Can’t find dependent libraries Possible solution: Check your maven runner VM options. Open Maven Runner setti…

VSCode设置Playwright教程

1.安装扩展 打开VS Code,在扩展—>搜索"Playwright Test for VSCode",点击安装 按快捷键CommandShiftP,输入install playwright,点击安装Playwright 安装成功会有如下提示 2.调试脚本 打开tests/example.spec.ts文…

HarmonyOS Next“说书人”项目 单机版 实践案例

前段时间开发了一个软件,取名为“说书人”,后由于备案暂时没有通过,于是删除了联网功能,重新做了一个单机版,这里对于单机版的开发实践案例进行一个发出,希望能帮助到大家 文章最后给出了AtomGit仓库地址 p…

HTML新特性|01 音频视频

音频 1、Audio (音频) HTML5提供了播放音频文件的标准 2、control(控制器) control 属性供添加播放、暂停和音量控件 3、标签: <audio> 定义声音 <source> 规定多媒体资源,可以是多个<!DOCTYPE html> <html lang"en"> <head><…

像素的访问和算术运算

【欢迎关注编码小哥&#xff0c;学习更多实用的编程方法和技巧】 一、常用的访问像素的方法 1、使用at()方法 // 灰度图 cv::Mat grayImage; for (int y 0; y < grayImage.rows; y) {for (int x 0; x < grayImage.cols; x) {uchar pixel grayImage.at<uchar>…

【深度学习】卷积网络代码实战ResNet

ResNet (Residual Network) 是由微软研究院的何凯明等人在2015年提出的一种深度卷积神经网络结构。ResNet的设计目标是解决深层网络训练中的梯度消失和梯度爆炸问题&#xff0c;进一步提高网络的表现。下面是一个ResNet模型实现&#xff0c;使用PyTorch框架来展示如何实现基本的…

js的讲解

Proxy 是 ES6&#xff08;ECMAScript 2015&#xff09;中引入的一个新的内置对象&#xff0c;用于定义某些操作的自定义行为&#xff08;如属性查找、赋值、枚举、函数调用等&#xff09;。Proxy 可以被看作是一个拦截器&#xff0c;它拦截并自定义对象上的基本操作。通过创建一…

雷电「模拟器」v9 最新清爽去广

前言 雷电模拟器9是基于安卓9内核开发的全新版本模拟器 安装环境 [名称]&#xff1a;雷电「模拟器」 [大小]&#xff1a;579MB [版本]&#xff1a;9.1.34 [语言]&#xff1a;简体中文 [安装环境]&#xff1a;Windows 通过网盘分享的文件&#xff1a;雷电模拟器 链接:…

大模型 API 接入初探

文章目录 大模型 API 接入初探一、使用大模型 API 的前置步骤&#xff08;一&#xff09;注册账户与获取凭证&#xff08;二&#xff09;理解 API 文档 二、三个常用 API&#xff08;一&#xff09;列出模型&#xff08;二&#xff09;FIM 补全&#xff08;三&#xff09;对话补…

ACPI PM Timer

ACPI PM Timer 概述&#xff1a; ACPI PM Timer是一个非常简单的计时器&#xff0c;它以 3.579545 MHz 运行&#xff0c;在计数器溢出时生成系统控制中断&#xff08;SCI&#xff09;。它精度较低&#xff0c;建议使用其他定时器&#xff0c;如HPET或APIC定时器。 检测ACPI P…

力扣--LCR 188.买卖芯片的最佳时机

题目 数组 prices 记录了某芯片近期的交易价格&#xff0c;其中 prices[i] 表示的 i 天该芯片的价格。你只能选择 某一天 买入芯片&#xff0c;并选择在 未来的某一个不同的日子 卖出该芯片。请设计一个算法计算并返回你从这笔交易中能获取的最大利润。 如果你不能获取任何利…

工业相机基本参数

分辨率&#xff08;Resolution&#xff09; 定义&#xff1a;分辨率指的是相机图像的像素数&#xff0c;通常以 宽度 x 高度 的形式表示&#xff0c;如 1920x1080 或 2592x1944。作用&#xff1a;分辨率越高&#xff0c;相机可以捕捉到更多的细节。高分辨率相机适用于需要精确…

实时在线翻译谷歌插件

Real - time Translation插件的安装 1、下载插件并解压 2、打开谷歌浏览器&#xff0c;在地址栏输入 “chrome://extensions/” 进入扩展程序页面. 3、开启页面右上角的 “开发者模式”. 4、点击 “加载已解压的扩展程序” 按钮&#xff0c;选择之前解压的文件夹&#xff0c;点…

torch.sparse_csc_tensor

torch.sparse_csc_tensor 以CSC格式构建一个稀疏张量。CSC格式的稀疏张量乘法运算通常比 COO 格式的稀疏张量更快。 CSC格式&#xff08;Compressed Sparse Column Format&#xff09;是一种存储稀疏矩阵的常用格式&#xff0c;它通过三个数组来表示稀疏矩阵&#xff1a; 非零…

C++ 设计模式:原型模式(Prototype Pattern)

链接&#xff1a;C 设计模式 链接&#xff1a;C 设计模式 - 工厂方法 链接&#xff1a;C 设计模式 - 抽象工厂 链接&#xff1a;C 设计模式 - 建造者模式 原型模式&#xff08;Prototype Pattern&#xff09;是一种创建型设计模式&#xff0c;它允许一个对象通过复制现有对象来…

C语言中的贪心算法

贪心算法&#xff08;Greedy Algorithm&#xff09;是一种在每一步选择中都采取当前最优解的算法&#xff0c;希望通过局部最优解的选择&#xff0c;最终得到全局最优解。它常用于解决最优化问题&#xff0c;如最小生成树、最短路径等。本文将从理论到实践&#xff0c;逐步引导…

区块链:概念与应用场景

一、区块链的定义 区块链是一种分布式账本技术&#xff0c;它以去中心化的方式存储数据&#xff0c;通过密码学保证数据的安全性和不可篡改性。 &#xff08;一&#xff09;分布式账本 账本结构&#xff1a;区块链可以看作是一个由多个节点共同维护的账本。这个账本是由一系列…

[数据集][图像分类]常见鱼类分类数据集2w张8类别

数据集类型&#xff1a;图像分类用&#xff0c;不可用于目标检测无标注文件 数据集格式&#xff1a;仅仅包含jpg图片&#xff0c;每个类别文件夹下面存放着对应图片 图片数量(jpg文件个数)&#xff1a;7554&#xff08;剩余1w多为测试集&#xff09; 分类类别数&#xff1a;…