ADC 模拟输入
大约 4 分钟
ADC 模拟输入
功能说明
ADC(模数转换器)用于采集模拟信号,如光照强度、烟雾浓度、火焰强度、土壤湿度等模拟传感器的输出电压。ESP32 内置 12 位 ADC,可将 0~3.3V 的模拟电压转换为 0~4095 的数字值。
支持的外设类型
| 类型 | type值 | 说明 |
|---|---|---|
| GPIO_ANALOG_INPUT | 15 | GPIO模拟输入(简单模式) |
| ADC | 26 | ADC专用模式(带衰减/分辨率参数) |
ADC 参数说明
| 参数 | 说明 | 可选值 |
|---|---|---|
| attenuation | 衰减系数 | 0=0dB(1.1V), 1=2.5dB(1.5V), 2=6dB(2.2V), 3=11dB(3.3V) |
| resolution | 分辨率(位) | 9, 10, 11, 12 |
| sampleRate | 采样率 | 0=默认 |
常用配置:
attenuation=3(满量程3.3V)+resolution=12(0~4095)
ADC 接入前先确认输入电压、衰减、分辨率和 WiFi 对 ADC2 的影响;现场排查时建议同时保存原始值、换算值和采样间隔。
可用引脚
- ESP32 ADC1: GPIO 32-39(推荐,WiFi开启时仍可用)
- ESP32 ADC2: GPIO 0, 2, 4, 12-15, 25-27(WiFi开启时不可用)
- ESP32-C3: GPIO 0-4(ADC1)
- ESP32-S3: GPIO 1-10(ADC1),GPIO 11-20(ADC2)
重要:使用 WiFi 时只能使用 ADC1 通道的引脚!
典型传感器应用
| 传感器 | 输出范围 | 说明 |
|---|---|---|
| 光敏电阻 | 0~3.3V | 光照越强电压越低 |
| MQ-2 烟雾 | 0~3.3V | 浓度越高电压越高 |
| 火焰传感器 | 0~3.3V | 火焰越近电压越低 |
| 雨滴传感器 | 0~3.3V | 雨量越大电压越低 |
| 声音传感器 | 0~3.3V | 声音越大电压越高 |
| 土壤湿度 | 0~3.3V | 湿度越大电压越低 |
配置方式
方式1:Web界面配置(推荐)
ADC 类外设保存前重点核对输入引脚、量程换算参数和是否已做分压保护。
步骤1:进入外设管理页面
- 打开浏览器访问 ESP32 IP 地址
- 登录后点击左侧菜单 外设配置
步骤2:添加ADC模拟输入外设
点击 新增外设 按钮
填写配置:
字段 填写内容 说明 外设ID light_sensor或smoke_sensor唯一标识符 名称 光照强度或MQ-2烟雾传感器显示名称 外设类型 GPIO模拟输入 (type: 15) 或 ADC (type: 26) 简单模式或专用模式 引脚配置 36或34必须使用ADC1引脚 衰减系数 33=11dB(0-3.3V满量程) 分辨率 1212位=0-4095 点击 保存
步骤3:验证配置
- 在外设列表中找到刚添加的外设
- 点击 启用 开关
- 查看实时ADC值
⚠️ 重要:使用WiFi时必须使用ADC1引脚(GPIO 32-39)
方式2:JSON配置文件导入
将以下配置添加到 data/config/peripherals.json 的 peripherals 数组中:
光敏传感器
{
"id": "light_sensor",
"name": "光照强度",
"type": 15,
"enabled": false,
"pins": [36],
"params": {
"initialState": 0,
"pwmChannel": 0,
"pwmFrequency": 1000,
"pwmResolution": 8,
"defaultDuty": 0
}
}ADC 专用配置(烟雾传感器)
{
"id": "smoke_sensor",
"name": "MQ-2烟雾传感器",
"type": 26,
"enabled": false,
"pins": [34],
"params": {
"attenuation": 3,
"resolution": 12,
"sampleRate": 0
}
}多路 ADC 采集
{
"id": "adc_multi",
"name": "环境监测ADC",
"type": 26,
"enabled": false,
"pins": [36, 39, 34, 35],
"params": {
"attenuation": 3,
"resolution": 12,
"sampleRate": 0
}
}与外设执行联动
作为轮询触发数据源
ADC 值可被外设执行规则通过 ACTION_SENSOR_READ(19) 周期采集:
{
"targetPeriphId": "smoke_sensor",
"actionType": 19,
"actionValue": "",
"useReceivedValue": false,
"syncDelayMs": 0,
"execMode": 0
}作为平台触发条件
采集的 ADC 值通过 MQTT 上报后,可用于平台触发条件判断:
{
"triggerType": 0,
"triggerPeriphId": "smoke_sensor",
"operatorType": 2,
"compareValue": "2000"
}含义:当烟雾传感器 ADC 值 > 2000 时触发规则
电压/电流传感器
对于需要将 ADC 值转换为实际物理量的场景,请参考:
注意事项
- WiFi 与 ADC2 冲突:WiFi 开启后 ADC2 不可用,生产环境务必使用 ADC1 引脚
- ESP32 ADC 非线性:ESP32 原生 ADC 在两端(接近 0V 和 3.3V)存在非线性,中间段精度较好
- 参考电压:ESP32 内部参考电压约 1.1V,通过衰减系数扩展量程
- 多路采集:同一 ADC 类型外设可配置多个引脚,系统按顺序轮询采集
- 采样噪声:建议对 ADC 读数进行多次采样取平均(系统对电流/电压传感器已内置 10 次平均)
