4. BMP280 气压温度传感器数据上云
任务目标
使用ESP32内置ADC读取电位器分压电压,将模拟量转换为数字量后通过串口输出,掌握模拟信号采集的基本流程。
硬件与接线
- ESP32开发板(如ESP32-DevKitC)
- 10kΩ电位器(旋钮式)
- 杜邦线3根
接线方式:电位器两端分别接3.3V和GND,中间抽头(滑片)接GPIO34(ADC1_CH6)。GPIO34为纯输入引脚,无需外部上拉/下拉电阻。
关键实现说明
ESP32的ADC精度为12位(0~4095),默认衰减为0dB时测量范围约0~1.1V,不满足0~3.3V测量需求。因此需通过analogSetPinAttenuation()将衰减设置为ADC_11db,使测量范围扩展至约0~3.3V。代码中同时输出原始ADC值和换算后的电压值(单位mV),便于直接观察电位器旋转与电压变化的对应关系。
完整代码
#include <Arduino.h>
#define POT_PIN 34 // GPIO34 = ADC1_CH6
void setup() {
Serial.begin(115200);
// 设置衰减为11dB,使ADC测量范围覆盖0~3.3V
analogSetPinAttenuation(POT_PIN, ADC_11db);
delay(100);
Serial.println("ESP32 ADC Potentiometer Demo");
}
void loop() {
int raw = analogRead(POT_PIN); // 读取原始值 0~4095
int voltage_mv = map(raw, 0, 4095, 0, 3300); // 换算为毫伏
Serial.printf("Raw: %4d | Voltage: %4d mV\n", raw, voltage_mv);
delay(200); // 每200ms输出一次
}
编译与烧录
- 在Arduino IDE中,选择开发板为“ESP32 Dev Module”。
- 确认串口端口选择正确(如COM3或/dev/ttyUSB0)。
- 将上述代码粘贴到编辑器,点击“上传”按钮完成编译烧录。
验证方法
- 打开Arduino IDE的串口监视器,波特率设为115200。
- 旋转电位器旋钮至一端极限,观察串口输出:原始值应接近0,电压接近0 mV。
- 旋转至另一端极限,原始值应接近4095,电压接近3300 mV。
- 缓慢旋转旋钮,串口输出的原始值和电压值应连续平滑变化,无跳变或卡顿。
通过标准:串口输出的电压值随旋钮转动在0~3300 mV范围内单调连续变化,且两端极限值与上述预期一致。
常见问题
- 电压读数始终为0或4095:检查电位器两端是否分别接3.3V和GND,中间抽头是否确实接到GPIO34。
- 读数跳动剧烈:确保杜邦线连接稳固,可尝试缩短导线长度;若仍跳动,可在GPIO34与GND之间并联一个0.1μF陶瓷电容滤波。
- 电压上限不足3300 mV:确认已调用
analogSetPinAttenuation(POT_PIN, ADC_11db),否则默认衰减下满量程仅约1.1V。