开源水位监测系统:从超声波传感器到Web仪表盘的物联网实践
1. 项目概述:一个开源的水位监测系统
如果你正在为家里的水井、蓄水箱或者花园的雨水桶的水位发愁,总担心水不够用或者溢出,那么这个名为Watmonitor的开源项目可能就是你的“数字看水人”。简单来说,这是一个软硬件结合的系统,核心是一个中央Web界面,用来接收、存储和展示来自传感器节点的水位数据。你可以把它想象成一个专为水位打造的私人仪表盘,无论你身在何处,打开网页就能看到水井里还有多少水,历史水位变化曲线如何。
这个项目的巧妙之处在于它的模块化和开放性。硬件端,它支持从经典的Arduino Uno到流行的ESP8266、ESP32,甚至包括基于Sigfox低功耗广域网的方案。这意味着你可以根据自家的网络条件、供电情况和预算,灵活选择最合适的“大脑”。传感器方面,则主要围绕超声波测距模块展开,最常用的是HC-SR04及其防水版本JSN-SR04T。软件端,Web界面负责所有数据的汇聚、计算(比如将距离换算成水量)和可视化,后端用PHP写成,轻量且高效。
我最初接触这个项目,是想解决乡下老宅水井的远程监控问题。手动打水查看不仅麻烦,而且无法了解用水规律和水源稳定性。市面上成品的物联网水位计要么太贵,要么封闭不透明。Watmonitor的开源特性让我能完全掌控数据流和硬件成本,从零搭建一套属于自己的监测系统。经过一段时间的部署和优化,它已经稳定运行了超过一年,让我对家庭用水情况了如指掌。接下来,我将详细拆解这个项目的设计思路、硬件选型、软件部署以及那些只有实际动手才能遇到的“坑”和技巧。
2. 核心设计思路与方案选型
2.1 为什么选择超声波传感器?
水位监测的传感器种类繁多,从简单的浮球开关到高精度的压力传感器。Watmonitor项目首选超声波传感器,主要是基于成本、可靠性和适用性的综合考量。
核心原理: 超声波传感器(如HC-SR04)工作时,会通过Trig引脚发送一个短暂的10微秒高频脉冲。这个声波脉冲在空气中传播,遇到水面(或其他物体)后反射回来,被传感器的接收器捕捉。通过测量从发送到接收回波的时间差(Time-of-Flight),再乘以声音在空气中的速度(约343米/秒,20°C时),就能计算出传感器到水面的距离。知道了传感器安装高度和井深,水位高度自然就得出了。
优势分析:
- 非接触式测量: 传感器本身不需要浸入水中,避免了腐蚀、污染和生物附着问题,尤其适合水质复杂或需要长期无人值守的场合。
- 成本低廉: HC-SR04模块价格极为亲民,是入门级电子项目的常客,极大降低了整套系统的硬件门槛。
- 维护简单: 没有活动机械部件,理论上寿命很长,只需保持探头表面相对清洁即可。
关键限制与选型要点: 然而,超声波并非万能。项目文档中特别强调了两个关键参数: 探测角度(波束宽度) 和 防水性 。
- HC-SR04(15°窄波束): 波束角小,能量集中,适合直径较小的水井或水箱。但它不防水,必须安装在井口上方干燥处。井内的潮湿水汽长期侵蚀其金属探头,极易导致氧化失效。我的经验是,即使用在井口,也最好加一个简单的防雨罩,并确保通风,避免冷凝水积聚。
- JSN-SR04T(60°宽波束): 探头部分完全防水,可以应对潮湿环境。但宽波束角带来了大问题:随着测量距离增加,声波覆盖的圆形区域会迅速变大。在4.5米深的井中,其波束在地面处的直径可能达到6米。这意味着它只能用于直径非常大的蓄水池或露天水体,对于常见的家庭圆井或方井,声波会大量打在井壁上,产生杂波干扰,导致测量不准甚至失败。
实操心得: 选择传感器前,务必测量或估算你的水井/水箱的直径。一个简单的判断方法是:传感器所需的最小井径 ≈ 2 * 测量深度 * tan(波束角/2)。对于深井窄口,HC-SR04是更可靠的选择,但务必做好物理防护。对于露天大水桶,JSN-SR04T的防水性则更有优势。
2.2 微控制器平台:Arduino、ESP与Sigfox的抉择
项目支持多种MCU,这背后对应着不同的应用场景和网络条件。
1. Arduino + 有线以太网(如W5100/W5500 shield)
- 适用场景: 监测点附近有稳定的路由器和网线接口,且供电不是问题(通常需要9-12V直流适配器)。例如,监控地下室蓄水箱或锅炉房料仓。
- 优点: 连接极其稳定,不受无线信号干扰。基于ATmega328P的Arduino Uno编程简单,生态成熟。
- 缺点: 灵活性差,布线麻烦。整体功耗较高,不适合太阳能供电的野外场景。随着时间推移,这类方案显得有些“老旧”。
2. ESP8266/ESP32 + Wi-Fi
- 适用场景: 绝大多数家庭和花园环境。监测点位于Wi-Fi信号可覆盖的范围内(必要时可通过中继器扩展)。
- 优点:
- ESP8266(如NodeMCU、Wemos D1): 性价比之王,足以胜任定时测量、连接Wi-Fi、发送HTTP数据包的任务。支持深度睡眠(Deep Sleep),在两分钟测量间隔下,配合电池或太阳能板,可以实现超低功耗运行。
- ESP32: 功能更强大的旗舰选择。双核处理器允许更复杂的任务调度(如项目提到的FreeRTOS双任务队列)。关键优势在于原生支持 HTTPS 加密通信,且具有更丰富的接口(如可用于未来扩展的蓝牙、霍尔传感器等)。对于新建项目,ESP32是更面向未来的选择。
- 网络配置技巧: 项目提供的预编译固件使用了著名的WiFiManager库。首次上电时,ESP会创建一个名为“Hladinomer_AP”的开放Wi-Fi热点。用手机连接后,会自动弹出引导页面(或手动访问192.168.4.1),让你选择家庭Wi-Fi并输入密码。配置一次,永久保存。即使日后家里Wi-Fi密码改了,设备也会因连不上旧网络而再次进入配网模式,非常人性化。
3. Sigfox(或其它LPWAN)
- 适用场景: 偏远地区、没有手机信号或Wi-Fi覆盖的野外监测点,如山林中的水源地、远离农舍的灌溉蓄水池。
- 工作原理: Sigfox是一种超窄带物联网技术,终端设备通过专用模块将极小的数据包(每次最多12字节)发送至基站,再经运营商网络传到互联网。它的优势是超远距离(农村可达几十公里)和超低功耗(一节电池可工作数年)。
- 现实考量: 正如项目作者2024年更新所言,Sigfox网络在全球许多地区(包括项目起源地斯洛伐克)正在萎缩或关闭。在国内,可以将其类比为NB-IoT或LoRa。如果你需要这类方案,Watmonitor的架构思想仍然适用,但你需要将数据发送到支持这些协议的自家服务器或云平台,并相应修改硬件和固件。
我的选择与建议: 对于家庭用户, ESP32 是目前最平衡的选择。它价格已非常亲民,性能冗余足够应对未来功能升级(如本地数据缓存、多传感器融合),HTTPS支持也提升了数据安全性。ESP8266则适合预算极其严格或对功耗有极致要求的场景。
2.3 数据流与Web界面架构解析
理解了硬件,我们再看软件和数据如何流动。
-
传感器节点端:
- 微控制器定时(如每5分钟)唤醒,触发超声波传感器完成一次测量。
- 计算得到传感器到水面的距离
raw_distance。 - 根据公式
水位高度 = 井深 - raw_distance计算出水位高度。 这里有一个至关重要的细节 :如果这个计算是在单片机端完成的,那么在Web界面里,“井深”参数必须设置为0。因为Web后端预期收到的是“传感器到水面的原始距离”,它会用你预设的井深去减。如果两端都做了减法,结果就会错乱。我建议 始终在单片机端发送原始距离 ,将计算逻辑完全交给后台,这样更灵活,便于后期调整参数。 - 将数据(可能包含设备ID、距离值、时间戳、电池电压等)通过HTTP/HTTPS POST请求,发送到指定的Web服务器API接口。
-
服务器后端(PHP):
- 接收POST请求,验证设备ID(简单的令牌认证),将数据存入数据库(如MySQL)。
- 进行核心计算:
实际水位 = 用户设定的井深 - 原始距离;水量体积 = π * (井半径)² * 实际水位。对于方井,则用等效圆直径或直接计算长方体体积。 - 提供数据查询API,供前端界面调用。
-
前端Web界面:
- 仪表盘(Dashboard): 直观展示当前水位、水量百分比、总体积等。2024年后使用了JustGauge插件,仪表盘视觉效果更专业。
- 历史图表: 展示水位随时间变化的曲线图。升级到ApexCharts后,支持区域图、缩放、导出为图片或CSV数据,方便进一步分析。
- 数据表格: 以表格形式列出所有历史记录,支持动态删除(AJAX技术),无需刷新页面。
- 工具页面: 帮助用户根据已知井径和传感器波束角,计算该传感器能可靠测量的最大井深,辅助选型。
- QR码功能: 为每个监测点生成专属QR码。用手机扫描,可直接跳转到该监测点的实时数据页面,省去打开浏览器、输入网址、寻找设备的步骤,对不熟悉技术的家人非常友好。
这套架构清晰地将数据采集、处理与展示分离,使得任何一部分都可以独立升级或替换。例如,你可以更换更强大的后端框架,或者为前端仪表盘接入Grafana,而无需改动下位机代码。
3. 硬件搭建与核心环节实现
3.1 元器件清单与电路连接
假设我们选择 ESP32开发板(如ESP32 DevKit V1) 和 HC-SR04超声波传感器 作为核心,构建一个Wi-Fi版本的水位监测节点。
所需材料清单:
- ESP32开发板 x1
- HC-SR04超声波传感器 x1
- 微型USB数据线(用于供电和编程)x1
- 杜邦线(母对母)若干
- (可选)5V继电器模块 x1(如果你想实现水位过低自动控制水泵)
- (可选)18650锂电池及充放电保护板 x1套(用于移动或断电备用)
- (可选)防水盒、导线、热缩管等辅助材料
电路连接示意图(接线表):
| ESP32 GPIO引脚 | 连接至 HC-SR04 | 说明 |
|---|---|---|
| GPIO5 | Trig | 输出触发信号 |
| GPIO18 | Echo | 输入回波信号 |
| 5V | Vcc | 供电正极 |
| GND | GND | 供电地线 |
注意: 引脚选择是相对随意的,只要在代码中对应修改即可。避免使用一些有特殊启动功能的引脚(如GPIO0、GPIO2等)。我选择GPIO5和GPIO18是因为它们在我的开发板上位置方便,且无特殊限制。
供电考虑:
- 长期稳定运行: 建议使用手机充电器(5V/1A或以上)通过USB口供电,最稳定可靠。
- 低功耗/野外场景: 需要使用ESP32的深度睡眠模式。这时,HC-SR04的供电必须由ESP32的一个GPIO口控制,在测量间隙彻底断电,否则其静态功耗会耗尽电池。连接方式变为:ESP32的某个GPIO(如GPIO19)连接一个MOSFET或三极管开关电路,来控制HC-SR04的VCC通断。同时,需按照项目说明,将ESP32的GPIO16与RST引脚用跳线短接,以实现定时唤醒。
3.2 固件烧录与配置
对于初学者,最快捷的方式是使用项目提供的 预编译固件(.bin文件) 。
- 获取固件: 访问项目页面
https://your-iot.github.io/Watmonitor/,找到针对ESP32的预编译固件链接并下载。 - 烧录工具: 下载并安装
ESP32 Flash Download Tool或使用esptool.py(命令行工具)。 - 接线与识别: 用USB线连接ESP32和电脑。在设备管理器中确认COM端口号。
- 烧录配置(以Flash Download Tool为例):
- 选择正确的
CHIP TYPE为ESP32。 - 选择正确的
COM端口。 - 在
SPIDownload区域,添加下载的.bin文件。 - 通常需要设置
0x1000为固件的起始地址(请以项目页面具体说明为准)。 - 点击
START开始烧录。看到进度条完成且日志显示成功即可。
- 选择正确的
- Wi-Fi配置:
- 烧录完成后,给ESP32重新上电。它会启动并创建一个名为
Hladinomer_AP的开放Wi-Fi网络。 - 用手机或电脑连接这个网络。
- 连接后,通常会自动弹出配置页面。如果没有,在浏览器手动输入
192.168.4.1。 - 在页面中选择你的家庭Wi-Fi(SSID),输入密码,点击保存。
- ESP32将尝试连接你指定的网络。成功后,
Hladinomer_AP热点会消失,设备开始正常工作。
- 烧录完成后,给ESP32重新上电。它会启动并创建一个名为
对于开发者:从源码编译 如果你想修改代码或学习实现细节,需要搭建Arduino IDE环境。
- 安装环境: 在Arduino IDE中安装ESP32开发板支持(通过开发板管理器)。
- 获取库文件: 需要安装必要的库,如
WiFiManager、用于HTTP请求的HTTPClient或WiFiClientSecure(用于HTTPS)、以及用于超声波测距的NewPing库(比原生pulseIn更稳定)。 - 获取源码: 从项目GitHub仓库
https://github.com/martinius96/hladinomer-studna-scripty下载示例代码。 - 修改配置: 打开
Hladinomer.ino文件,修改关键参数:// 示例片段,非完整代码 const char* serverName = "https://hladinomer.eu"; // Web服务器地址 const char* apiKey = "YOUR_DEVICE_UNIQUE_ID"; // 在Web界面创建设备后获取的ID const int well_depth_cm = 0; // 如前所述,发送原始距离则设为0 const int measurement_interval = 300; // 测量间隔,单位秒 const int trigPin = 5; // 对应你的实际接线 const int echoPin = 18; - 编译上传: 选择正确的开发板型号和端口,点击上传。
3.3 传感器安装与校准
这是影响测量精度的最关键物理步骤。
- 确定安装位置: 将HC-SR04传感器 水平 固定于井口正上方。可以使用木条、角铁或3D打印一个支架。确保传感器平面与水面平行。
- 测量基准值:
- 安装高度(H): 精确测量传感器超声波发射面到井口平面的垂直距离。
- 井口到水面的最大距离(D_max): 在水井完全干涸时,测量井口到井底的深度。 实际井深 = H + D_max 。
- 井筒直径(d): 测量水井的内径。如果是方井,计算等效圆直径:
等效直径 = 2 * sqrt(面积/π)。
- Web界面初始设置:
- 登录Watmonitor Web界面(如
https://hladinomer.eu)。 - 添加一个新的传感器节点,输入你为设备设置的唯一ID(与固件中
apiKey一致)。 - 在设备设置中,填入上一步测量得到的 “井深” 和 “井直径” 。
- “传感器安装高度” 参数,根据固件逻辑填写:如果你在固件中发送的是原始距离,这里就填
H;如果你在固件中已经减去了H,发送的是水位高度,这里就填0。 强烈建议采用前者(发送原始距离) ,让Web端处理所有计算。
- 登录Watmonitor Web界面(如
- 现场校准验证:
- 用卷尺实际测量当前水面到井口的距离
L_measured。 - 等待设备上传几次数据后,在Web仪表盘查看显示的“水位高度”。
- 理论上,
仪表盘水位高度 = 井深 - L_measured。 - 对比实际值与显示值。如果存在固定偏差,可能是传感器测量存在系统误差,可以在Web界面或固件中设置一个“校准偏移量”进行修正。超声波在空气中的速度受温度影响,但对于家庭水位监测,常温下的误差通常在可接受范围内(厘米级)。
- 用卷尺实际测量当前水面到井口的距离
4. 软件部署与高级功能配置
4.1 自建Web服务器(可选)
项目提供的公共Web服务 https://hladinomer.eu 非常方便,但如果你希望数据完全私有化,或者进行二次开发,可以自建服务器。
基础环境搭建(以Ubuntu + Nginx为例):
- 服务器准备: 准备一台VPS或家中常年开机的电脑(如树莓派),安装Ubuntu系统。
- 安装服务:
sudo apt update sudo apt install nginx mysql-server php-fpm php-mysql php-curl php-gd php-mbstring - 部署代码:
- 从项目GitHub仓库克隆或下载后端PHP代码。
- 将代码放置到Nginx的Web目录,例如
/var/www/watmonitor/。 - 配置Nginx站点,确保PHP文件能被正确解析。
- 数据库初始化:
- 登录MySQL,创建数据库和用户:
CREATE DATABASE watmonitor; - 导入项目提供的SQL文件(通常在仓库的
sql/目录下)来创建数据表结构。
- 登录MySQL,创建数据库和用户:
- 配置修改:
- 修改PHP配置文件(如
config.php),填入数据库连接信息、网站域名等。 - 在固件中,将
serverName改为你自建服务器的地址。
- 修改PHP配置文件(如
安全增强建议:
- 为Web服务配置SSL证书(使用Let‘s Encrypt免费证书),启用HTTPS。
- 在PHP后端对设备ID(API Key)进行强验证,甚至可以增加简单的签名机制,防止数据被恶意注入。
- 定期备份数据库。
4.2 数据集成与自动化
Watmonitor在2025年更新中提供了JSON API,这打开了通往智能家居和工业监控系统的大门。
1. 集成到家庭自动化(Home Assistant):
- 通过RESTful Sensor: Home Assistant可以定期调用Watmonitor的JSON API接口,获取最新的水位数据,并将其作为一个传感器实体。
# configuration.yaml 示例片段 sensor: - platform: rest name: "Well Water Level" resource: "https://hladinomer.eu/api/your_device_id/latest" value_template: "{{ value_json.water_level }}" unit_of_measurement: "cm" scan_interval: 300 # 每5分钟更新一次 - 通过MQTT(更优雅): 可以编写一个简单的Python脚本(运行在Home Assistant所在的服务器上),定期从Watmonitor API获取数据,然后通过MQTT发布到Home Assistant的MQTT代理。这样可以利用MQTT的实时性优势。项目也提到了通过Node-RED作为中间件来实现此功能。
2. 使用Node-RED进行流处理: Node-RED是一个图形化的流编程工具,非常适合做数据桥接和简单逻辑处理。
- 安装
node-red-contrib-web-worldmap等节点。 - 创建一个流:使用 “http request”节点 定时从Watmonitor API拉取数据。
- 使用 “function”节点 解析JSON,并计算水量百分比、判断是否低于阈值。
- 使用 “email”节点 或 “telegram”节点 ,在水位低于20%时发送报警通知到手机。
- 使用 “dashboard”节点 创建自定义的UI,将水位数据显示在仪表盘上。
3. 数据可视化进阶(Grafana):
- 将Watmonitor的数据存入一个支持时间序列的数据库,如InfluxDB。这可能需要修改后端PHP代码,在插入MySQL的同时,也写入InfluxDB。
- 或者,使用Telegraf(一个数据收集代理)的HTTP输入插件,定期从Watmonitor API抓取数据并写入InfluxDB。
- 在Grafana中连接InfluxDB数据源,创建漂亮的水位趋势图、水量预测仪表盘等。
4.3 移动端与AR体验
项目提到的AR(增强现实)Web应用是一个有趣的尝试。其原理大致如下:
- 为每个监测点生成一个包含设备ID信息的QR码。
- 用户用手机浏览器访问AR Web应用页面(通常基于JavaScript库如AR.js或Three.js)。
- 浏览器请求摄像头权限,扫描设备QR码。
- 应用识别出设备ID,然后通过API向Watmonitor服务器请求该设备的实时数据。
- 在手机屏幕的摄像头画面上,叠加一个虚拟的仪表盘或3D水井模型,其水位高度根据实时数据动态变化。
这虽然是一个“炫技”功能,但在向家人或访客展示时非常直观。实现它需要一定的Web前端和3D图形编程知识,项目提供了基础范例,可以作为学习的起点。
5. 常见问题排查与优化心得
5.1 硬件与测量问题
问题1:读数不稳定,跳动很大。
- 可能原因1: 井壁反射干扰。超声波波束打到不平整的井壁或井内物体(如水管、电线)上,产生杂波。
- 解决: 确保传感器正对水面中心。对于窄井,使用波束角更小的HC-SR04。可以在传感器下方加装一个 纸质或塑料的锥形导波筒 ,约束声波传播方向,但要注意筒内不能有阻碍物。
- 可能原因2: 水面波动。有水流流入或风导致水面涟漪。
- 解决: 增加测量次数,在固件中取中位数或平均值滤波。例如,连续测10次,去掉最大最小值,取中间几个值的平均。
NewPing库内置了超时和滤波功能,比直接使用pulseIn更可靠。
- 解决: 增加测量次数,在固件中取中位数或平均值滤波。例如,连续测10次,去掉最大最小值,取中间几个值的平均。
- 可能原因3: 电源噪声。ESP32的Wi-Fi模块工作时电流变化大,可能影响传感器供电。
- 解决: 在HC-SR04的VCC和GND之间并联一个 100μF的电解电容 ,进行电源滤波。使用质量较好的USB电源或线性稳压模块。
问题2:测量距离远小于实际距离,或一直返回一个固定小值。
- 可能原因: 回波(Echo)引脚一直为高电平,可能是接线错误、传感器损坏,或者测量间隔太短,上一次的回波还没结束。
- 解决: 检查接线。在代码中,确保每次测量前有足够的延迟(
delay(60)毫秒以上),让传感器模块内部复位。使用NewPing库可以更好地处理时序。
- 解决: 检查接线。在代码中,确保每次测量前有足够的延迟(
问题3:ESP32无法连接到Wi-Fi,或经常断线。
- 可能原因1: 信号弱。
- 解决: 使用手机测试安装位置的信号强度。考虑使用Wi-Fi中继器,或改用ESP32开发板外接天线型号。
- 可能原因2: 路由器设置了MAC地址过滤或仅允许特定设备连接。
- 解决: 在路由器设置中将ESP32的MAC地址加入白名单,或关闭相关过滤功能。
- 可能原因3: 电源不足。Wi-Fi连接瞬间峰值电流可达500mA。
- 解决: 确保使用足额(5V/2A)的电源适配器,USB线不能太细太长。
5.2 软件与数据问题
问题1:数据无法发送到Web服务器。
- 排查步骤:
- 检查网络: 确保ESP32已成功连接Wi-Fi(可通过串口打印日志查看)。
- 检查地址: 确认固件中的
serverName和API路径完全正确。HTTPS地址需要正确的证书。 - 检查API Key: 确认Web界面创建的设备ID与固件中填写的
apiKey完全一致(区分大小写)。 - 查看服务器日志: 如果是自建服务器,查看Nginx/PHP的错误日志,看是否收到了请求以及请求有何问题。
- 使用工具测试: 在电脑上用Postman或curl工具模拟发送一个POST请求到服务器API,看是否能成功,以此隔离硬件问题。
问题2:Web界面显示的水位或水量计算错误。
- 核心检查点: 井深、安装高度、原始距离 这三个参数的逻辑关系。
- 黄金法则: 统一计算逻辑。建议采用 “固件发原始距离,Web端做全部计算” 的模式。
- 固件中:
well_depth_cm = 0, 发送raw_distance。 - Web界面:设置“井深”为实际总深,“传感器安装高度”为传感器到井口的距离。
- 此时,Web后端计算:
水位 = 井深 - (安装高度 + raw_distance)。如果传感器直接装在井口平面(安装高度=0),则公式简化为水位 = 井深 - raw_distance。
- 固件中:
问题3:设备功耗过高,电池消耗快。
- 优化措施:
- 启用深度睡眠: 在ESP32代码中,在每次测量并发送数据后,调用
esp_deep_sleep_start(measurement_interval * 1000000);。记得连接GPIO16到RST引脚。 - 外设电源管理: 通过MOSFET控制HC-SR04的电源,仅在测量前通电。
- 降低Wi-Fi功耗: 在连接Wi-Fi前,可以尝试设置
WiFi.setSleep(true);启用调制解调器睡眠(对于ESP8266)。ESP32的Wi-Fi功耗优化更复杂,深度睡眠是最有效的手段。 - 降低CPU频率: ESP32可以在代码中动态降低CPU主频以节省功耗,但可能影响Wi-Fi连接速度,需测试稳定性。
- 启用深度睡眠: 在ESP32代码中,在每次测量并发送数据后,调用
5.3 长期维护与扩展建议
- 定期检查传感器探头: 尤其是非防水的HC-SR04,检查金属触片是否有氧化迹象。可用棉签蘸取少量无水酒精轻轻擦拭。
- 数据备份: 定期从数据库导出CSV备份,防止数据丢失。
- 功能扩展:
- 多传感器融合: ESP32引脚丰富,可以同时连接多个超声波传感器,监控多个水桶。
- 环境参数集成: 增加DHT22温湿度传感器,监测井房环境;增加DS18B20防水温度传感器,监测水温。
- 水泵控制: 连接继电器模块,当水位低于阈值时自动启动水泵抽水,水位恢复后停止。 务必做好物理防干烧和水泵过载保护 。
- 太阳能供电: 搭配小功率太阳能板、充电控制器和锂电池,实现完全离网运行。
- 系统健壮性增强:
- 本地缓存: 修改固件,在发送数据失败时将数据暂存到ESP32的SPIFFS文件系统或EEPROM中,待网络恢复后重发。
- 看门狗: 启用硬件看门狗定时器,防止程序跑飞导致设备死机。
- 电池电压监测: 通过ESP32的ADC引脚监测电池电压,在数据发送时一并上报,方便远程了解设备电量状态。
这个项目从一个简单的想法出发,通过开源社区的不断迭代,已经成长为一个功能相对完善、可定制性极强的水位监测解决方案。它不仅仅给了你一个查看水位的工具,更重要的是提供了一套完整的、可复用的物联网数据流框架。无论你是想监控水井、雨水桶,还是想将其改造成粮仓料位计、地下室洪水报警器,其核心的“感知-传输-展示”逻辑都是相通的。动手搭建的过程,本身就是一次绝佳的嵌入式开发和物联网入门实践。当你第一次在手机上看到自家水井的实时水位时,那种连接物理世界与数字世界的成就感,是购买任何成品设备都无法比拟的。
更多推荐
所有评论(0)