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时),就能计算出传感器到水面的距离。知道了传感器安装高度和井深,水位高度自然就得出了。

优势分析:

  1. 非接触式测量: 传感器本身不需要浸入水中,避免了腐蚀、污染和生物附着问题,尤其适合水质复杂或需要长期无人值守的场合。
  2. 成本低廉: HC-SR04模块价格极为亲民,是入门级电子项目的常客,极大降低了整套系统的硬件门槛。
  3. 维护简单: 没有活动机械部件,理论上寿命很长,只需保持探头表面相对清洁即可。

关键限制与选型要点: 然而,超声波并非万能。项目文档中特别强调了两个关键参数: 探测角度(波束宽度) 防水性

  • 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界面架构解析

理解了硬件,我们再看软件和数据如何流动。

  1. 传感器节点端:

    • 微控制器定时(如每5分钟)唤醒,触发超声波传感器完成一次测量。
    • 计算得到传感器到水面的距离 raw_distance
    • 根据公式 水位高度 = 井深 - raw_distance 计算出水位高度。 这里有一个至关重要的细节 :如果这个计算是在单片机端完成的,那么在Web界面里,“井深”参数必须设置为0。因为Web后端预期收到的是“传感器到水面的原始距离”,它会用你预设的井深去减。如果两端都做了减法,结果就会错乱。我建议 始终在单片机端发送原始距离 ,将计算逻辑完全交给后台,这样更灵活,便于后期调整参数。
    • 将数据(可能包含设备ID、距离值、时间戳、电池电压等)通过HTTP/HTTPS POST请求,发送到指定的Web服务器API接口。
  2. 服务器后端(PHP):

    • 接收POST请求,验证设备ID(简单的令牌认证),将数据存入数据库(如MySQL)。
    • 进行核心计算: 实际水位 = 用户设定的井深 - 原始距离 水量体积 = π * (井半径)² * 实际水位 。对于方井,则用等效圆直径或直接计算长方体体积。
    • 提供数据查询API,供前端界面调用。
  3. 前端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文件)

  1. 获取固件: 访问项目页面 https://your-iot.github.io/Watmonitor/ ,找到针对ESP32的预编译固件链接并下载。
  2. 烧录工具: 下载并安装 ESP32 Flash Download Tool 或使用 esptool.py (命令行工具)。
  3. 接线与识别: 用USB线连接ESP32和电脑。在设备管理器中确认COM端口号。
  4. 烧录配置(以Flash Download Tool为例):
    • 选择正确的 CHIP TYPE ESP32
    • 选择正确的 COM 端口。
    • SPIDownload 区域,添加下载的 .bin 文件。
    • 通常需要设置 0x1000 为固件的起始地址(请以项目页面具体说明为准)。
    • 点击 START 开始烧录。看到进度条完成且日志显示成功即可。
  5. Wi-Fi配置:
    • 烧录完成后,给ESP32重新上电。它会启动并创建一个名为 Hladinomer_AP 的开放Wi-Fi网络。
    • 用手机或电脑连接这个网络。
    • 连接后,通常会自动弹出配置页面。如果没有,在浏览器手动输入 192.168.4.1
    • 在页面中选择你的家庭Wi-Fi(SSID),输入密码,点击保存。
    • ESP32将尝试连接你指定的网络。成功后, Hladinomer_AP 热点会消失,设备开始正常工作。

对于开发者:从源码编译 如果你想修改代码或学习实现细节,需要搭建Arduino IDE环境。

  1. 安装环境: 在Arduino IDE中安装ESP32开发板支持(通过开发板管理器)。
  2. 获取库文件: 需要安装必要的库,如 WiFiManager 、用于HTTP请求的 HTTPClient WiFiClientSecure (用于HTTPS)、以及用于超声波测距的 NewPing 库(比原生 pulseIn 更稳定)。
  3. 获取源码: 从项目GitHub仓库 https://github.com/martinius96/hladinomer-studna-scripty 下载示例代码。
  4. 修改配置: 打开 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;
    
  5. 编译上传: 选择正确的开发板型号和端口,点击上传。

3.3 传感器安装与校准

这是影响测量精度的最关键物理步骤。

  1. 确定安装位置: 将HC-SR04传感器 水平 固定于井口正上方。可以使用木条、角铁或3D打印一个支架。确保传感器平面与水面平行。
  2. 测量基准值:
    • 安装高度(H): 精确测量传感器超声波发射面到井口平面的垂直距离。
    • 井口到水面的最大距离(D_max): 在水井完全干涸时,测量井口到井底的深度。 实际井深 = H + D_max
    • 井筒直径(d): 测量水井的内径。如果是方井,计算等效圆直径: 等效直径 = 2 * sqrt(面积/π)
  3. Web界面初始设置:
    • 登录Watmonitor Web界面(如 https://hladinomer.eu )。
    • 添加一个新的传感器节点,输入你为设备设置的唯一ID(与固件中 apiKey 一致)。
    • 在设备设置中,填入上一步测量得到的 “井深” “井直径”
    • “传感器安装高度” 参数,根据固件逻辑填写:如果你在固件中发送的是原始距离,这里就填 H ;如果你在固件中已经减去了H,发送的是水位高度,这里就填 0 强烈建议采用前者(发送原始距离) ,让Web端处理所有计算。
  4. 现场校准验证:
    • 用卷尺实际测量当前水面到井口的距离 L_measured
    • 等待设备上传几次数据后,在Web仪表盘查看显示的“水位高度”。
    • 理论上, 仪表盘水位高度 = 井深 - L_measured
    • 对比实际值与显示值。如果存在固定偏差,可能是传感器测量存在系统误差,可以在Web界面或固件中设置一个“校准偏移量”进行修正。超声波在空气中的速度受温度影响,但对于家庭水位监测,常温下的误差通常在可接受范围内(厘米级)。

4. 软件部署与高级功能配置

4.1 自建Web服务器(可选)

项目提供的公共Web服务 https://hladinomer.eu 非常方便,但如果你希望数据完全私有化,或者进行二次开发,可以自建服务器。

基础环境搭建(以Ubuntu + Nginx为例):

  1. 服务器准备: 准备一台VPS或家中常年开机的电脑(如树莓派),安装Ubuntu系统。
  2. 安装服务:
    sudo apt update
    sudo apt install nginx mysql-server php-fpm php-mysql php-curl php-gd php-mbstring
    
  3. 部署代码:
    • 从项目GitHub仓库克隆或下载后端PHP代码。
    • 将代码放置到Nginx的Web目录,例如 /var/www/watmonitor/
    • 配置Nginx站点,确保PHP文件能被正确解析。
  4. 数据库初始化:
    • 登录MySQL,创建数据库和用户: CREATE DATABASE watmonitor;
    • 导入项目提供的SQL文件(通常在仓库的 sql/ 目录下)来创建数据表结构。
  5. 配置修改:
    • 修改PHP配置文件(如 config.php ),填入数据库连接信息、网站域名等。
    • 在固件中,将 serverName 改为你自建服务器的地址。

安全增强建议:

  • 为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应用是一个有趣的尝试。其原理大致如下:

  1. 为每个监测点生成一个包含设备ID信息的QR码。
  2. 用户用手机浏览器访问AR Web应用页面(通常基于JavaScript库如AR.js或Three.js)。
  3. 浏览器请求摄像头权限,扫描设备QR码。
  4. 应用识别出设备ID,然后通过API向Watmonitor服务器请求该设备的实时数据。
  5. 在手机屏幕的摄像头画面上,叠加一个虚拟的仪表盘或3D水井模型,其水位高度根据实时数据动态变化。

这虽然是一个“炫技”功能,但在向家人或访客展示时非常直观。实现它需要一定的Web前端和3D图形编程知识,项目提供了基础范例,可以作为学习的起点。

5. 常见问题排查与优化心得

5.1 硬件与测量问题

问题1:读数不稳定,跳动很大。

  • 可能原因1: 井壁反射干扰。超声波波束打到不平整的井壁或井内物体(如水管、电线)上,产生杂波。
    • 解决: 确保传感器正对水面中心。对于窄井,使用波束角更小的HC-SR04。可以在传感器下方加装一个 纸质或塑料的锥形导波筒 ,约束声波传播方向,但要注意筒内不能有阻碍物。
  • 可能原因2: 水面波动。有水流流入或风导致水面涟漪。
    • 解决: 增加测量次数,在固件中取中位数或平均值滤波。例如,连续测10次,去掉最大最小值,取中间几个值的平均。 NewPing 库内置了超时和滤波功能,比直接使用 pulseIn 更可靠。
  • 可能原因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服务器。

  • 排查步骤:
    1. 检查网络: 确保ESP32已成功连接Wi-Fi(可通过串口打印日志查看)。
    2. 检查地址: 确认固件中的 serverName 和API路径完全正确。HTTPS地址需要正确的证书。
    3. 检查API Key: 确认Web界面创建的设备ID与固件中填写的 apiKey 完全一致(区分大小写)。
    4. 查看服务器日志: 如果是自建服务器,查看Nginx/PHP的错误日志,看是否收到了请求以及请求有何问题。
    5. 使用工具测试: 在电脑上用Postman或curl工具模拟发送一个POST请求到服务器API,看是否能成功,以此隔离硬件问题。

问题2:Web界面显示的水位或水量计算错误。

  • 核心检查点: 井深、安装高度、原始距离 这三个参数的逻辑关系。
  • 黄金法则: 统一计算逻辑。建议采用 “固件发原始距离,Web端做全部计算” 的模式。
    • 固件中: well_depth_cm = 0 , 发送 raw_distance
    • Web界面:设置“井深”为实际总深,“传感器安装高度”为传感器到井口的距离。
    • 此时,Web后端计算: 水位 = 井深 - (安装高度 + raw_distance) 。如果传感器直接装在井口平面(安装高度=0),则公式简化为 水位 = 井深 - raw_distance

问题3:设备功耗过高,电池消耗快。

  • 优化措施:
    1. 启用深度睡眠: 在ESP32代码中,在每次测量并发送数据后,调用 esp_deep_sleep_start(measurement_interval * 1000000); 。记得连接GPIO16到RST引脚。
    2. 外设电源管理: 通过MOSFET控制HC-SR04的电源,仅在测量前通电。
    3. 降低Wi-Fi功耗: 在连接Wi-Fi前,可以尝试设置 WiFi.setSleep(true); 启用调制解调器睡眠(对于ESP8266)。ESP32的Wi-Fi功耗优化更复杂,深度睡眠是最有效的手段。
    4. 降低CPU频率: ESP32可以在代码中动态降低CPU主频以节省功耗,但可能影响Wi-Fi连接速度,需测试稳定性。

5.3 长期维护与扩展建议

  1. 定期检查传感器探头: 尤其是非防水的HC-SR04,检查金属触片是否有氧化迹象。可用棉签蘸取少量无水酒精轻轻擦拭。
  2. 数据备份: 定期从数据库导出CSV备份,防止数据丢失。
  3. 功能扩展:
    • 多传感器融合: ESP32引脚丰富,可以同时连接多个超声波传感器,监控多个水桶。
    • 环境参数集成: 增加DHT22温湿度传感器,监测井房环境;增加DS18B20防水温度传感器,监测水温。
    • 水泵控制: 连接继电器模块,当水位低于阈值时自动启动水泵抽水,水位恢复后停止。 务必做好物理防干烧和水泵过载保护
    • 太阳能供电: 搭配小功率太阳能板、充电控制器和锂电池,实现完全离网运行。
  4. 系统健壮性增强:
    • 本地缓存: 修改固件,在发送数据失败时将数据暂存到ESP32的SPIFFS文件系统或EEPROM中,待网络恢复后重发。
    • 看门狗: 启用硬件看门狗定时器,防止程序跑飞导致设备死机。
    • 电池电压监测: 通过ESP32的ADC引脚监测电池电压,在数据发送时一并上报,方便远程了解设备电量状态。

这个项目从一个简单的想法出发,通过开源社区的不断迭代,已经成长为一个功能相对完善、可定制性极强的水位监测解决方案。它不仅仅给了你一个查看水位的工具,更重要的是提供了一套完整的、可复用的物联网数据流框架。无论你是想监控水井、雨水桶,还是想将其改造成粮仓料位计、地下室洪水报警器,其核心的“感知-传输-展示”逻辑都是相通的。动手搭建的过程,本身就是一次绝佳的嵌入式开发和物联网入门实践。当你第一次在手机上看到自家水井的实时水位时,那种连接物理世界与数字世界的成就感,是购买任何成品设备都无法比拟的。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐