当前位置:首页 > 工业控制 > 电路设计项目集锦
[导读]在我的上一个项目中,我从被动的云端监控转向了自主边缘控制,利用本地滞后机制驱动冷却风扇,同时通过有线以太网将数据报告至Adafruit IO仪表板。但边缘设备并不总是需要完整的MQTT代理或复杂的云端仪表板才能发挥作用。有时,您最需要的,是当模拟阈值被触发时,能直接在手机上获得高优先级、无摩擦的即时提醒,同时辅以本地化且直观的反馈信息。

在我的上一个项目中,我从被动的云端监控转向了自主边缘控制,利用本地滞后机制驱动冷却风扇,同时通过有线以太网将数据报告至Adafruit IO仪表板。但边缘设备并不总是需要完整的MQTT代理或复杂的云端仪表板才能发挥作用。有时,您最需要的,是当模拟阈值被触发时,能直接在手机上获得高优先级、无摩擦的即时提醒,同时辅以本地化且直观的反馈信息。

在此项目中,我使用W55MH32L-EVB开发板、电容式土壤湿度传感器和SSD1306 OLED显示屏,构建了一个自主植物灌溉监测系统。该系统不再依赖轮询仪表盘,而是本地实时监测土壤湿度,将实时读数和图形化湿度条直接显示在屏幕上,并在植物缺水时通过ntfy.sh立即向您的移动设备推送高优先级的通知。

以下是该架构所能实现的功能:

•通过硬件SPI与W5500接口通信,执行显式硬件复位、物理链路验证以及DHCP租约验证。

•在GPIO PA1上采样模拟电容式土壤湿度传感器,对ADC读数进行10次过采样以平均消除噪声,再根据校准的空气/水基准值进行归一化,输出清晰的0–100%数值。

•通过I2C驱动128×64 SSD1306 OLED显示屏,实时显示文本状态、动态警报倒计时以及自动缩放的水平进度条。

•通过轻量级HTTP POST请求与ntfy.sh集成,实现推送通知功能,无需注册账户、设置云消息代理或运行复杂的后台守护进程。

•强制实施严格的4小时通知冷却机制,防止土壤干燥期间手机频繁收到通知。

硬件连接与布线

在开始编写代码之前,先了解开发板、传感器、显示屏和网络之间的连接要求。

1. 电容式土壤湿度传感器(模拟输入)

电容式传感器远优于电阻式探头,因为其感应线路经过涂层处理,可有效防止长期发生电化学腐蚀。

VCC -> 3.3V(或根据您使用的具体传感器模块为5V)

GND -> GND

AOUT -> PA1(配置为我们的16位模拟输入引脚)

2. SSD1306 OLED 显示屏(I2C)

显示屏可在植株处立即提供视觉反馈:

VCC -> 3.3V

GND -> GND

SCL -> I2C1 SCL

SDA -> I2C1 SDA

(注意:在脚本中,我们的 OLED 被实例化在 I2C(1) 上,地址为 0x3D。请确保运行 I2C 方法 .scan(),以确认您已使用正确的地址!)

3. W5500 以太网模块(SPI)

与之前的版本一样,以太网提供可靠的连接,不会出现Wi-Fi断连的情况:

•SPI总线:运行在8 MHz的SPI(2)

•CS(芯片选中):PB12

•RST(复位):PD9

将标准的Cat5e/Cat6跳线插入RJ45接口,并连接到本地路由器或交换机。

所需库文件

请确保您的开发板上已安装ssd1306库。您可以通过Thonny的“工具”->“管理包”,搜索micropython-ssd1306进行安装,或者直接在REPL中使用mip命令获取该库:

urequests模块是大多数支持网络功能的MicroPython系统中的标准网络栈组件。

固件结构说明

下面我们来了解软件如何处理校准、网络数据采集以及视觉报警功能。

1. 校准常数与阈值

模拟校准:电容式传感器出厂时并不输出绝对的百分比值。根据我的测试,将传感器置于干燥空气中,其原始16位数值较高(AIR_VALUE = 44314);而将传感器探头浸入一杯水中,则会降低电容电阻(WATER_VALUE = 21333)。

干燥阈值:当缩放后的湿度降至或低于25%时,设备将触发警报逻辑。

通知主题:ntfy.sh 提供基于HTTP的发布/订阅推送通知。通过发布到 [https://ntfy.sh/](https://ntfy.sh/),任何在免费 ntfy 移动应用中订阅该主题的手机都能立即收到通知。请将 my_plant_monitor_w55_abc12367 替换为您的唯一主题字符串。

请确保在手机上下载 ntfy 应用,输入您选择的主题名称进行订阅,并允许接收通知!

2. 稳健的W5500以太网初始化

与简单的循环假设网络立即可用不同,此程序优雅地处理硬件断言和状态验证:

物理重置:将PD9拉低可确保在驱动绑定前,W5500寄存器组完全清零。

两阶段握手:首先通过轮询nic.isconnected()来确认物理以太网链路脉冲已检测到,随后进行第二轮循环检查nic.ifconfig()[0],以确认从路由器租用了有效的IP地址,而非直接跳过0.0.0.0。所有进度步骤均直接显示在OLED上。

3. 过采样与百分比归一化

微控制器上的原始ADC读数可能受到电源轨和SPI总线的高频电气噪声影响。为避免出现异常的尖峰读数,我们采用过采样技术:

10次采样平均:[adc.read_u16() for _ in range(10)] 可平滑消除瞬态噪声尖峰。基本原理是采集10个数值并存储到列表中。

钳位与反向处理:由于潮湿土壤中的电容较高会导致模拟值偏低,因此我们将量程进行反向映射:AIR_VALUE 对应 0% 湿度,WATER_VALUE 对应 100%。通过设置最大值和最小值的钳位,确保边缘值不会产生负数或超过100%的数值。

4. 通过 ntfy.sh 实现云通知

HTTP 头信息:通过添加 Priority: high 和 Tags: potted_plant,warning,ntfy 格式,可在 Android 或 iOS 设备上以提示音和特定表情图标形式显示通知。

资源清理:在 MicroPython 中使用 urequests 时,务必调用 response.close()。微控制器上的套接字是有限的;若未显式关闭响应,会导致套接字耗尽和内存泄漏。

5. 本地可视化与警报冷却循环

速率限制:如果没有冷却机制,每30秒轮询一次的话,如果用户离家,一小时内就会触发120次推送通知。NOTIFICATION_COOLDOWN窗口将警报限制为每4小时一次,在冷却期间,OLED的第三行会显示倒计时。

图形湿度表:通过绘制一个外框(oled.rect(0, 50, 128, 12, 1))并填充一个与百分比pct成比例的内部条形(oled.fill_rect(2, 52, bar_w, 8, 1)),可将显示屏变成一个直观易读的仪表,即使在房间另一端也能查看。

结果

开启后,显示屏会依次完成启动阶段:通过脉冲W5500复位引脚、锁定以太网载波脉冲,并通过DHCP获取IP租约。一旦完成,显示屏将实时显示湿度读数以及状态指示器。

当土壤含水量低于25%时,显示屏立即切换至警告状态,并通过ntfy.sh向您的手机推送可操作的警报信息。无需维护中央服务器,无需支付云服务费用,也无需植物死亡。您还可以自定义OLED屏幕上的提示信息。

本文编译自hackster.io

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭