基于ESP8266的MicroPython水泄漏传感器与Domoticz集成指南

ChangeCode
转载
发布时间: 2025-06-29 16:13:52 | 阅读数 0收藏数 0评论数 0
封面
不久前,我的妻子让我制作一个水泄漏传感器。她担心锅炉房的水管可能会漏水,导致新铺设的木地板被淹。作为一名资深的医疗工程师,我知道检测水的最简单方法是利用水短路两个或多个金属针脚的原理。最基础的传感器工作原理就是当水将两个金属针脚短接时,触发警报。
1

硬件选型

  1. 核心模块​
  2. ​ESP8266-01 Wi-Fi模块​​:负责网络通信
  3. ​HT7333 3.3V低压差线性稳压器​​:将电池电压稳定至3.3V(输入范围3-3.6V)
  4. ​TP4056锂电充电板​​:支持3.7V锂电池充电
  5. ​关键组件​
  6. ​3.7V锂离子400mAh电池​​:供电单元(也可替换为18650电池)
  7. ​Pololu微型电源开关​​:按需唤醒ESP8266以节省电量
  8. ​辅助部件​
  9. ​双刀双掷微动开关​​:实现设备开关与自检功能
  10. ​树莓派Zero​​:运行Domoticz服务器
  11. ​外壳与结构​
  12. 自定义3D打印防水外壳
  13. 防水接头与线缆


2

软件开发环境搭建

  1. 工具链准备​
  2. 安装esptool(用于擦除模块固件及烧录)
  3. 安装ampy(用于上传MicroPython脚本)
  4. Python 3.6+环境(推荐PyCharm/Anaconda)
  5. ​服务器端配置​
  6. 在树莓派安装Domoticz智能家居平台
  7. 通过浏览器访问http://树莓派IP:8080完成初始化设置
3

Domoticz平台配置

  1. 硬件虚拟化​
  2. 添加"Dummy"硬件类型
  3. 创建虚拟传感器(类型选择"Alert")
  4. 记录设备IDX号(用于代码调用)
  5. ​通知系统集成​
  6. 配置Pushover/Pushbullet等第三方通知服务
  7. 通过API密钥实现手机实时报警


4

事件逻辑编程

  1. ​Domoticz事件配置​
  2. 使用Blockly可视化编程工具
  3. 设置触发条件:当传感器发送警报时执行通知脚本
  4. ​ESP8266固件开发​
  5. 使用MicroPython编写主程序(main.py
  6. 实现WiFi自动重连与JSON数据上报
  7. 低功耗管理模式优化(睡眠电流<100μA)


5

系统集成与测试

  1. ​硬件组装​
  2. 防水盒内集成传感器探头
  3. 3D打印支架固定锂电池与电路板
  4. 采用Pololu开关实现按需供电
  5. ​性能验证​
  6. 漏水检测响应时间≤10秒
  7. 单次报警续航5-6次(400mAh电池)
  8. 支持ESP-Now多节点组网升级


6

Domoticz设置

  1. 通过菜单栏的 ​​Setup | Settings​​ 进入设置页面,调整系统参数并保存。
  2. 在 ​​Notifications​​ 页面设置通知方式,例如Pushover、Pushsafer或Pushbullet
  3. 测试通知功能,确保API密钥正确。
7

设置硬件通信

  1. 在Domoticz中添加 ​​Dummy​​ 硬件:
  2. 选择 ​​Setup | Hardware​​,添加Dummy硬件。
  3. 点击 ​​Create Virtual Sensors​​,选择 ​​Sensor Type​​ 为 ​​Alert​​。
  4. 记录设备的 ​​IDX​​ 编号,后续Python脚本中会用到。

编程ESP8266-01模块

  1. ​擦除固件​​:使用esptool擦除ESP8266的工厂固件。
python esptool.exe --port COM5 erase_flash
  1. ​烧录固件​​:从MicroPython官网下载固件并烧录。
python esptool.exe --port COM5 --baud 460800 write_flash --flash_size=detect 0 C:\path_to_firmware\esp8266-20180511-v1.9.4.bin
  1. ​上传MicroPython脚本​​:使用Ampy上传wifimgr.pymain.py
ampy --port COM5 put C:\path\to\your\file


8

添加设备

请记下“IDX”下方的数字。这是该设备的唯一参考标识,稍后我们在Python脚本中处理通知时会用到。在这种情况下,IDX编号为1。

通过点击左侧的绿色箭头启用设备(在我的图中是蓝色的,因为设备已启用)。

填写设备名称,然后点击“添加”。

导航到“实用工具”菜单,您的设备应该会列在那里。

现在我们需要为传感器编写“事件”程序。也就是说,我们需要告诉服务器,在收到传感器消息时该怎么做。

9

如果不起作用

我在各个页面尝试对设备进行编程,但没成功。下面这种方法不是我原创的,但可以用来说明问题。如果你以为勾选几个复选框就能让设备正常工作,那你就错了。我觉得这个功能可能还没完善,毕竟它是开源软件。

好吧,经过几个小时,我找到解决办法了。我们需要使用“设置”下拉菜单中的“事件”功能。点击“事件”后,你可以创建自己的事件。你可以通过编写Python或LUA代码,或者使用名为“Blockly”的工具来实现。

10

正确构建事件的方法

1. 通过"Events"模块执行外部文件(使用Blockly消息"Start script")​

该方法在我的Windows设备上运行正常,但在树莓派的Raspbian系统上未能成功。我怀疑问题可能与权限设置有关。

11

以正确的方式构建活动

  1. 使用“发送带主题的通知”消息。它在Raspbian系统上有效。此选项支持向Pushsafe和Pushover发送通知。
  2. 使用第一种方法的优势在于它更灵活。你可以选择要在显示屏上显示的图标、声音等。我的“事件”如上图所示。
  3. 接下来,我们来编写ESP模块的程序。


12

编程ESP8266-01模块

让我们从刷写ESP8266模块开始。通常这些模块预装了出厂固件。可以通过所谓的AT指令与模块通信。但这类固件无法让模块作为独立控制器使用。若要将其用作独立控制器,需要擦除出厂固件并安装新固件。

为此我们将使用 ​​esptool​​。首先需要将模块连接到电脑以擦除固件。这需要TTL转换器+几个额外组件,但有更简单的方法:直接在速卖通或eBay购买 ​​USB转ESP8266 ESP-01 Wi-Fi适配器模块(含CH340G驱动)​​。

按图中所示将ESP8266模块插入TTL转换器,再连接电脑USB接口。

若你使用和我相同的转换器,需将开关拨到“Prog”位置。找到esptool的安装路径(通常在类似 C:\Program Files (x86)\Python36-32\Scripts 的目录)。进入该文件夹,通过命令行操作。

输入命令:

python esptool.exe --port COM5 erase_flash

(注意替换为实际端口号,我的是COM5。可通过“控制面板-系统-设备管理器”查看ESP模块占用的端口。)

安装固件(我从这里获取:),输入命令:

python esptool.exe --port COM5 --baud 460800 write_flash --flash_size=detect 0 C:\path_to_firmware\esp8266-20180511-v1.9.4.bin

现在可以开始向ESP8266上传MicroPython脚本了。我使用 ​​Adafruit MicroPython工具(ampy)​​,不过现在还有另一个选择 ​​Esplorer​​(带图形界面的文件上传工具)。

ampy的安装教程可参考这里。操作前,将TTL转换器的开关拨到“UART”位置。需要上传的文件包括:

  1. wifimgr.py:Wi-Fi连接管理脚本
  2. main.py:主程序脚本

在命令行输入:

ampy --port COM5 put C:\path_to_your_file

回车后,几秒内命令行会清空,说明文件上传成功。可通过 ampy --port COM5 ls 查看ESP模块上的文件列表。

根据经验,建议先上传其他必要文件,最后上传main.py。因为一旦上传main.py,ESP8266会立即重启并执行该脚本,此时若尝试上传其他文件可能会失败。但不用担心,再试一次通常就能成功(亲测有效)。

本项目所有文件可在这里获取。

13

连接到您的Wi-Fi网络。接收通知。

如果一切正常,通过将TTL转换器重新插入电脑的USB端口来重启模块。

ESP启动后,找到名为“Wifimanager”的新Wi-Fi网络。用电脑或手机连接该网络,然后访问IP地址192.168.4.1。在此界面可将ESP连接到本地Wi-Fi网络:选择你要使用的网络,输入密码,点击“提交”。

若一切正确,你会看到提示信息“ESP已成功连接到XXXX网络”。

现在你的ESP已接入Wi-Fi网络并准备就绪。一旦连接Wi-Fi,它会立即连接至Domoticz服务器。很快你就会在手机上收到一条通知。

你可以在“设置”/“日志”中跟踪整个过程。搞定!成功了~ 现在可以根据下方的框图,开始将所有部件组装在一起了。

14

框图

关于这个框图没什么好多说的,非常简单。通过S1开关控制电源通断。设备默认处于关闭状态,直到水导致“水位传感器”引脚短路。此时“Pololu板”会启动,并为电压转换器供电。这个基于HT7333芯片的电源模块会将电压转换为稳定的3.3V,为ESP8266供电。随后ESP模块启动,并向Domoticz服务器发送消息。

15

结果与结论

它运行良好。发送通知最多需要10秒:包括连接Wi-Fi、发送通知以及手机接收警报消息的整个过程。

我已将传感器设置为每30秒发送一次警报(检测到水时)。在水未排尽的情况下,传感器最多可发送5-6条通知。该设备还可用于检测水位。以下是我希望改进的方面:

  1. 提升响应速度。我计划尝试使用ESP-Now技术——该技术允许多个ESP模块直接互联。这种连接方式功耗极低且速度更快。具体思路是用一个ESP作为中枢,连接其他ESP模块。
  2. 增加电池电量警报功能。目前无法判断是否还有足够电量发送警报。我认为下一代传感器可能会添加一个专用按钮用于测试电量:用户按下按钮后,设备会显示当前电池电量。


阅读记录0
点赞0
收藏0
禁止 本文未经作者允许授权,禁止转载
猜你喜欢
评论/提问(已发布 0 条)
评论 评论
收藏 收藏
分享 分享
pdf下载 下载