ESP32-S2 TFT Feather读取气体传感器模数转换电压过高问题求助
ESP-S2 TFT Feather读取气体传感器电压偏高问题解决
代码修正要点
- 冗余代码清理:原代码中
sensorValue = analogRead(analogInPin) + sensorValue;属于无效操作,直接替换为sensorValue = analogRead(analogInPin);即可。 - 强制设置ADC分辨率:ESP-S2默认ADC分辨率并非13位,必须在初始化阶段手动指定。在
setup()函数中添加analogSetResolution(13);,确保ADC工作在13位模式下——如果未设置,默认10位分辨率(最大值1023),用8191计算会让结果放大8倍,直接导致电压偏高。 - 明确参考电压:添加
analogSetVRef(ADC_VREF_3V3);固定参考电压为3.3V,避免系统自动选择参考源带来的偏差。
硬件排查方向
- 确认传感器与开发板共地:接地不良是模拟电压飘高的常见原因,检查传感器GND引脚是否与开发板GND可靠连接。
- 消除引脚干扰:给A2引脚并联100nF陶瓷电容,减少电源线或高频信号对模拟输入的干扰。
- 检查传感器输出范围:确认传感器最大输出电压不超过3.3V,若输出饱和(固定在3.3V),ADC读取值会达到8191,计算出的电压也会异常偏高。
修正后的完整代码示例
int analogInPin = A2; float sensorValue; void setup() { analogSetResolution(13); // 配置13位ADC分辨率 analogSetVRef(ADC_VREF_3V3); // 设置参考电压为3.3V } void readco() { const int res = 8191; // 13位ADC最大值:2^13 - 1 sensorValue = analogRead(analogInPin); iaq_data.co_0 = (float)sensorValue * 3.3 / res; }
内容的提问来源于stack exchange,提问作者Saleh
相关产品推荐
相关产品推荐

