news 2026/2/10 20:07:59

基于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/2/6 12:24:00

AI读脸术部署秘籍:避开CUDA坑,云端1小时快速验证

AI读脸术部署秘籍&#xff1a;避开CUDA坑&#xff0c;云端1小时快速验证 你是不是也遇到过这种情况&#xff1a;好不容易准备转行做程序员&#xff0c;面试官说“来个CV项目展示一下”&#xff0c;你心里一紧——不是不会做&#xff0c;而是每次配环境都像在拆炸弹。CUDA版本不…

作者头像 李华
网站建设 2026/2/10 16:53:07

Python3.9游戏开发入门:云端GPU渲染,5分钟跑通Demo

Python3.9游戏开发入门&#xff1a;云端GPU渲染&#xff0c;5分钟跑通Demo 你是不是也和我一样&#xff0c;刚开始学用Python做小游戏的时候&#xff0c;满心期待地写完代码&#xff0c;一运行却发现卡成幻灯片&#xff1f;明明只是个简单的2D小球弹跳程序&#xff0c;结果帧率…

作者头像 李华
网站建设 2026/2/8 10:12:33

TradingAgents-CN智能交易系统:从零部署到实战的完整指南

TradingAgents-CN智能交易系统&#xff1a;从零部署到实战的完整指南 【免费下载链接】TradingAgents-CN 基于多智能体LLM的中文金融交易框架 - TradingAgents中文增强版 项目地址: https://gitcode.com/GitHub_Trending/tr/TradingAgents-CN TradingAgents-CN是一个基于…

作者头像 李华
网站建设 2026/2/3 10:42:49

3步搞定《巫师2》手机60帧!Winlator性能调校实战指南

3步搞定《巫师2》手机60帧&#xff01;Winlator性能调校实战指南 【免费下载链接】winlator Android application for running Windows applications with Wine and Box86/Box64 项目地址: https://gitcode.com/GitHub_Trending/wi/winlator 还在为手机玩《巫师2》卡顿掉…

作者头像 李华
网站建设 2026/2/8 8:09:16

OpenCore Legacy Patcher:让老Mac突破限制重获新生的终极解决方案

OpenCore Legacy Patcher&#xff1a;让老Mac突破限制重获新生的终极解决方案 【免费下载链接】OpenCore-Legacy-Patcher 体验与之前一样的macOS 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 还在为那台陪伴多年的老Mac无法升级最新系统…

作者头像 李华
网站建设 2026/2/5 20:00:20

揭秘AI音频分离黑科技:UVR 5.6如何让音乐制作平民化

揭秘AI音频分离黑科技&#xff1a;UVR 5.6如何让音乐制作平民化 【免费下载链接】ultimatevocalremovergui 使用深度神经网络的声音消除器的图形用户界面。 项目地址: https://gitcode.com/GitHub_Trending/ul/ultimatevocalremovergui 还在为提取纯净人声而烦恼&#x…

作者头像 李华