news 2026/4/18 9:22:58

基于ESP32引脚图的水位检测装置:完整示例

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于ESP32引脚图的水位检测装置:完整示例

用ESP32做水位检测?从引脚图开始,手把手教你搭建稳定系统

你有没有遇到过这样的场景:家里的水箱快空了却没人知道,结果热水器干烧;农田灌溉靠人工看水位,一不小心就漫灌浪费;工厂冷却塔液位异常,等发现时已经停机维修……这些看似琐碎的问题,其实都可以通过一个低成本、高可靠的智能水位监测系统来解决。

而今天我们要讲的主角——ESP32,正是实现这一目标的理想选择。它不仅价格便宜(不到30元就能搞定核心模块),还自带Wi-Fi和蓝牙,配合其丰富的GPIO资源和ADC功能,完全可以独立完成“感知—处理—通信”全链路任务。

但问题是:怎么才能让这个小芯片真正“读懂”水位?

关键就在于——你得先搞懂它的引脚图


别再瞎接了!ESP32哪些引脚能读模拟信号?

很多初学者在做水位检测时,第一反应就是随便找个引脚把传感器连上去,结果发现读数跳变、不准甚至程序崩溃。原因很简单:不是所有引脚都支持模拟输入

我们常说的“esp32引脚图”,其实就是一张告诉你“每个针脚能干什么”的地图。比如哪个是数字IO、哪个能当I²C用、哪个可以读电压……如果你不看这张图,等于闭着眼开车。

ESP32的ADC通道到底有哪些?

ESP32有两个ADC模块:ADC1 和 ADC2,但它们的能力并不对等:

模块支持引脚特点
ADC1GPIO32–39全部可用,不受Wi-Fi干扰
ADC2GPIO0, 2, 4, 12–15, 25–27启用Wi-Fi后部分通道失效

🔥重点提醒:如果你想一边采集水位数据一边上传到手机APP或云平台,那必须开启Wi-Fi。这时候如果用了ADC2的引脚(比如GPIO12、13),你会发现读数忽高忽低,甚至直接卡死!

所以,强烈建议优先使用ADC1通道中的引脚,尤其是这几个:
-GPIO34
-GPIO35
-GPIO36
-GPIO39

为什么选它们?因为这四个引脚只能做输入,没有输出功能,也就不会被误配置成其他用途导致冲突。而且它们都在ADC1上,完全避开Wi-Fi干扰陷阱。


水位传感器怎么接?别烧了你的ESP32!

市面上最常见的水位传感器有两种:一种是电阻式探针型,另一种是静压式变送器。今天我们先讲最便宜也最常用的——模拟输出型电阻式水位传感器

这类传感器看起来像一根带多个金属片的杆子,随着水位上升,更多电极被浸湿,内部等效电阻下降,从而输出一个连续变化的电压信号(通常是0~3V)。

听起来很完美,对吧?但问题来了:

ESP32的ADC最大只能承受3.3V!一旦超过,轻则读数错误,重则永久损坏芯片!

有些传感器标称工作电压5V,输出也是接近5V的模拟信号。如果你直接把它接到ESP32的GPIO34上……恭喜你,可能下一秒就要换板子了。

正确连接方式(附电路图说明)

传感器引脚接到ESP32哪里注意事项
VCC3.3V必须用3.3V供电,不能接5V!
GNDGND共地,确保参考一致
SIGGPIO34中间加滤波电容更稳

📌安全提示
如果你非要用5V供电的传感器,请务必加一个分压电路!例如使用两个电阻(如10kΩ + 4.7kΩ)组成分压网络,将5V信号降到约3.2V以内再接入ADC引脚。

另外,在SIG信号线和GND之间并联一个0.1μF陶瓷电容,可以有效滤除高频噪声,让你的数据更平滑。


代码怎么写?别只会analogRead()

你以为读个ADC值就是一行analogRead()完事?Too young.

实际应用中你会发现:同样的水位,每次读出来的数值都不一样,上下波动几十甚至上百个单位。这是因为水体导电性不稳定、电源纹波、电磁干扰等多种因素叠加造成的。

所以我们需要做两件事:硬件去噪 + 软件滤波

基础采样代码(入门版)

const int WATER_SENSOR_PIN = 34; void setup() { Serial.begin(115200); } void loop() { int adcValue = analogRead(WATER_SENSOR_PIN); float voltage = adcValue * (3.3 / 4095.0); float levelPercent = (adcValue / 4095.0) * 100; Serial.printf("ADC: %d | %.2fV | %.1f%%\n", adcValue, voltage, levelPercent); delay(1000); }

这段代码能跑通,但数据抖动明显。怎么办?

加一道“软件滤镜”:平均值滤波

我们可以连续采样多次,取平均值,显著降低随机噪声的影响。

#define SENSOR_PIN 34 #define SAMPLE_COUNT 16 int readWaterLevelFiltered() { long total = 0; for (int i = 0; i < SAMPLE_COUNT; i++) { total += analogRead(SENSOR_PIN); delay(2); // 给ADC一点恢复时间 } return total / SAMPLE_COUNT; }

这样处理之后,你会发现输出曲线变得非常平滑,基本不会再出现“水没动,数值狂跳”的尴尬情况。

💡 进阶技巧:还可以用滑动窗口中值滤波卡尔曼滤波进一步提升稳定性,特别适合水面波动较大的环境(比如水泵运行时的水箱)。


实际应用场景怎么做?不只是读个数那么简单

一个真正有用的水位检测系统,绝不仅仅是把数据显示在串口监视器里。它应该能自动判断状态、发出警报、远程通知

典型工作流程设计

  1. 上电初始化ADC和Wi-Fi
  2. 每隔1秒采样一次水位(进入深度睡眠前唤醒)
  3. 将ADC值转换为实际水位高度(需标定“空”和“满”两点)
  4. 判断是否低于下限或高于上限
  5. 如果异常:
    - 点亮LED报警
    - 触发继电器关闭水泵
    - 通过MQTT发送告警消息到手机APP
  6. 正常情况下每分钟上传一次数据到云端

如何标定水位范围?

假设你测得:
- 水箱为空时:ADC值 ≈ 500
- 水箱为满时:ADC值 ≈ 3800

那么当前水位百分比就可以这样计算:

float waterLevel = (float)(adcValue - 500) / (3800 - 500) * 100; waterLevel = constrain(waterLevel, 0, 100); // 限制在0~100%

这个过程叫做线性映射,是工业控制中最基础但也最关键的一步。


避坑指南:老手才懂的几个细节

1. 电极腐蚀怎么办?

长期通直流电会导致金属探头电解氧化,寿命大幅缩短。解决方案:
- 使用交流激励(交替反转供电极性)
- 或采用间歇供电:只在采样瞬间给传感器上电,其余时间断开

可以用一个MOSFET控制VCC通断,由ESP32的一个普通GPIO驱动。

2. 水面波动误触发?

水波晃动会让ADC值来回震荡,导致系统频繁报警。加入迟滞比较机制(Hysteresis)可解决:

if (waterLevel < 10 && !lowAlarm) { lowAlarm = true; sendAlert("水位过低!"); } else if (waterLevel > 15 && lowAlarm) { lowAlarm = false; // 必须回升到15%才解除警报 }

这样就不会因为±2%的小波动反复报警。

3. 多点监测怎么做?

想同时监控多个水箱?没问题!ESP32有8个ADC1通道可用,你可以接多个传感器轮流采样。

注意:每次切换通道会有短暂建立时间,建议每个通道采样前延时几毫秒。


总结一下:成功的水位系统靠什么?

很多人失败的原因,不是技术复杂,而是忽略了最基本的几点:

看清esp32引脚图:只用ADC1引脚,远离Wi-Fi干扰雷区
保护ADC输入:绝不超压,必要时加分压和滤波电容
软件要滤波:原始ADC值太“毛”,必须加工才能用
做好标定:空满两点校准是准确测量的前提
考虑长期可靠性:防腐蚀、防误报、低功耗设计缺一不可

这套方案不仅可以用于家庭用水箱、鱼缸、热水器,稍加改造还能用在农业蓄水池、工业冷却塔、城市排水井等场景。加上OTA升级和LoRa远传,甚至能构建覆盖整个园区的无线水位监控网络。

而这一切的起点,就是你手里那份看似枯燥的“esp32引脚图”。

下次接线前,不妨多花五分钟看看它——也许就能帮你省下一百块钱的 replacement cost 😄


如果你正在尝试做一个类似的项目,欢迎留言交流!我可以分享具体的PCB布局建议、低功耗休眠代码模板,或者推荐几款真正耐用的防水型水位传感器。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 8:46:12

图解说明Arduino Nano连接振动传感器的电路与代码

从零开始&#xff1a;用 Arduino Nano 玩转振动传感器&#xff0c;轻松实现震动报警系统你有没有遇到过这样的场景&#xff1f;家里的洗衣机突然“狂舞”起来&#xff0c;震动得地板都在抖&#xff1b;或者工厂里某台设备发出异常响动&#xff0c;却没人及时发现……其实&#…

作者头像 李华
网站建设 2026/3/14 11:59:12

OpenCore Legacy Patcher终极指南:让老款Mac焕发新生的完整教程

OpenCore Legacy Patcher终极指南&#xff1a;让老款Mac焕发新生的完整教程 【免费下载链接】OpenCore-Legacy-Patcher 体验与之前一样的macOS 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 还在为手中的老款Mac无法升级到最新系统而烦恼…

作者头像 李华
网站建设 2026/4/18 8:55:28

Qwen2.5-7B-Instruct教程:构建个性化推荐系统

Qwen2.5-7B-Instruct教程&#xff1a;构建个性化推荐系统 1. 技术背景与应用场景 随着大语言模型在自然语言理解与生成能力上的持续突破&#xff0c;其在个性化推荐系统中的应用潜力日益凸显。传统推荐系统多依赖协同过滤、矩阵分解或浅层机器学习模型&#xff0c;难以充分理…

作者头像 李华
网站建设 2026/4/16 18:13:11

从歪到正:AI图片旋转技术全解析与实战

从歪到正&#xff1a;AI图片旋转技术全解析与实战 你有没有遇到过这样的情况&#xff1f;拍了一张特别满意的照片&#xff0c;结果回看时发现角度歪了&#xff0c;地平线斜着&#xff0c;整个画面看起来别扭极了。以前我们只能靠Photoshop手动拉直&#xff0c;或者用手机自带的…

作者头像 李华
网站建设 2026/4/18 8:50:32

FST ITN-ZH性能测试:大规模文本处理基准

FST ITN-ZH性能测试&#xff1a;大规模文本处理基准 1. 引言 随着自然语言处理技术的不断发展&#xff0c;中文逆文本标准化&#xff08;Inverse Text Normalization, ITN&#xff09;在语音识别、智能客服、数据清洗等场景中扮演着越来越重要的角色。FST ITN-ZH 是一个基于有…

作者头像 李华
网站建设 2026/4/18 8:33:43

无人机航线规划终极指南:从零构建智能飞行系统

无人机航线规划终极指南&#xff1a;从零构建智能飞行系统 【免费下载链接】UAVS 智能无人机路径规划仿真系统是一个具有操作控制精细、平台整合性强、全方向模型建立与应用自动化特点的软件。它以A、B两国在C区开展无人机战争为背景&#xff0c;该系统的核心功能是通过仿真平台…

作者头像 李华