ESP32-S3 DevKit 模拟量采集调试报告
1. 调试目的
使用 ESP32-S3 DevKit 和 Arduino
框架,对外部传感器输出的模拟电压进行采样。程序通过 ADC
读取模拟量,连续采样 1024 次后计算平均值,并通过串口输出 ADC
平均值和电压估算值。
2. 硬件连接
信号 连接位置 说明
模拟信号输出 ESP32-S3 DevKit 的 1 将待测模拟量接入 A0
号引脚(A0)
GND ESP32-S3 DevKit GND 传感器与开发板必须共地
传感器供电 按传感器规格连接 3.3 V 供电电压不等于模拟输出电压,需分别确认
或 5 V
重要电气注意事项
- 传感器可以使用 3.3 V 或 5 V 供电,前提是传感器本身支持对应供电电压。
- ESP32-S3 的 ADC 输入不能因为传感器使用 5 V 供电,就直接接入 5 V
模拟输出。 ESP32-S3 GPIO 通常不具备 5 V 容忍能力。ADC
输入电压必须限制在芯片允许范围内;为安全起见,未经确认不要超过 3.3
V。 - 如果传感器模拟输出可能达到 5
V,应使用合适的电阻分压或缓冲/调理电路,将电压降低到 ADC
可接受范围,并确认分压后的最大电压仍留有余量。 - 传感器地与 ESP32-S3 GND
应连接在一起,除非系统使用了专门的隔离测量方案。
3. 串口配置
- 串口:Arduino
Serial - 波特率:9600 bit/s
- 串口监视器波特率必须设置为 9600
- 输出内容:1024 次 ADC 采样的平均原始值,以及
analogReadMilliVolts()读取的电压估算值
4. 采样逻辑
程序每轮执行以下步骤:
- 连续读取 A0 共 1024 次。
- 每次采样间隔 2 ms,因此仅采样等待就约为 2048 ms,实际时间还包括 ADC
读取和循环开销。 - 将 1024 次 ADC 原始读数累加并求平均值。
- 调用
analogReadMilliVolts(A0)取得一次额外的电压估算值。 - 通过 9600 波特率串口输出结果。
- 延时 500 ms 后进入下一轮。
因此,程序不是快速单次读取,而是每轮花费约 2
秒以上进行长时间采样,以降低随机波动对平均读数的影响。
测量一致性说明: 当前示例中的 ADC 平均值来自 1024
次采样,而电压值来自随后的一次独立读取。若需要让两项结果严格对应同一批样本,应改为累加这
1024 次样本对应的校准电压,或根据实测标定关系将平均 ADC 值换算为电压。
5. Arduino 示例程序
cpp
/*
* ESP32-S3 DevKit ADC 调试程序
*
* 输入:A0(开发板 1 号引脚,按本项目连接说明)
* 串口:9600 baud
* 采样:每轮 1024 次,每次间隔 2 ms
*/
#define ADC_PIN A0
#define ADC_SAMPLES 1024
void setup()
{
Serial.begin(9600);
delay(500);
analogReadResolution(12); // ESP32-S3 ADC 原始读数为 0~4095
analogSetPinAttenuation(ADC_PIN, ADC_11db);
Serial.println("ESP32-S3 DevKit ADC Test Started");
Serial.println("Pin: A0 / board pin 1 as wired");
Serial.println("Baud rate: 9600");
}
void loop()
{
uint32_t sum = 0;
for (int i = 0; i < ADC_SAMPLES; i++)
{
sum += analogRead(ADC_PIN);
delay(2);
}
uint32_t average = sum / ADC_SAMPLES;
// 这是额外的一次电压读取,不是上述 1024 个样本的平均电压
uint32_t voltage_mV = analogReadMilliVolts(ADC_PIN);
Serial.print("ADC average: ");
Serial.println(average);
Serial.print("The voltage value: ");
Serial.print(voltage_mV);
Serial.println(" mV");
Serial.println();
delay(500);
}
6. 调试步骤
- 确认开发板上标注为 A0 的引脚确实映射到当前 Arduino 板卡定义中的
A0,并按项目约定连接到开发板 1 号引脚。不同 ESP32-S3 DevKit
版本的丝印与 GPIO 映射可能不同,不能只凭"1 号引脚"推断 GPIO 编号。 - 确认传感器供电电压符合其规格。
- 将传感器模拟输出接到 A0,并连接共地。
- 若输出可能高于 3.3 V,先增加分压或电压调理电路,不能直接接入。
- 在 Arduino IDE 中选择正确的 ESP32-S3
开发板和串口端口,编译并烧录程序。 - 打开串口监视器,波特率选择 9600。
- 观察
ADC average与The voltage value是否随输入电压变化。 - 可使用已知且安全的输入电压进行对比;若需要准确测量,应使用万用表测量
A0 实际输入电压,并据此校准。
7. 结果记录表
测试项 记录
开发板 ESP32-S3 DevKit
模拟输入 A0(项目连接位置:开发板 1 号引脚)
串口波特率 9600
ADC 分辨率 12 bit
每轮采样次数 1024
采样间隔 2 ms
采样等待时间 约 2.048 s,另加读取及循环开销
供电 根据传感器规格使用 3.3 V 或 5 V
模拟输出电压安全要求 ESP32-S3 ADC 引脚不得直接输入 5 V
实测 ADC 平均值 待填写
实测电压(程序输出) 待填写
万用表实测 A0 电压 待填写
8. 当前结论与后续事项
当前程序采用 1024
次采样求均值,适合观察缓慢变化的模拟信号。单轮采样耗时约 2
秒以上,因此输出更新速度较慢,这是程序有意采用长时间采样的结果。
后续若用于正式传感器测量,建议: - 明确 A0 对应的实际 GPIO 编号; -
确认传感器模拟输出范围; - 对比万用表读数并进行必要的电压标定; - 如需让
ADC 均值和电压输出严格对应同一批样本,修改为对同一批采样进行校准与平均。