思路
- 定义 ADC 管脚和 UART 参数。
- 初始化 ADC 和 UART。
- 在循环中读取 ADC 值,将其转换为电压,并通过 UART 输出。
扩展知识
analogSetAttenuation()
函数是ESP32特有的一个函数,用于设置模拟输入引脚的衰减级别。这个函数影响ADC(模数转换器)如何读取外部电压。
衰减级别决定了输入电压范围,这是因为在没有衰减的情况下,ESP32的ADC只能正确读取0到1.1V之间的电压。通过增加衰减,可以扩展这个范围,以便测量更高的电压。
参数ADC_11db
是衰减级别的枚举值之一,以下是可用的衰减级别及其对应的电压范围:
ADC_0db
: 无衰减,输入电压范围是0 - 1.1VADC_2_5db
: 2.5dB衰减,输入电压范围是0 - ~1.5VADC_6db
: 6dB衰减,输入电压范围是0 - ~2.2VADC_11db
: 11dB衰减,输入电压范围是0 - 3.3V
当选择ADC_11db
时,你就可以测量0到3.3V之间的电压,这对于使用3.3V电源的ESP32系统来说是非常有用的。
这里是如何使用analogSetAttenuation()
函数的示例:
analogSetAttenuation(ADC_11db); // 设置衰减为11dB,允许测量0-3.3V的电压
完整实例
#define ADC_PIN 2 // 定义一个 GPIO 管脚作为 ADC 输入
// ADC 参数
#define ADC_ATTENUATION ADC_11db // 设置 ADC 衰减,适用于 0 - 3.3V 的输入范围
#define ADC_RESOLUTION 12 // 设置 ADC 分辨率,ESP32-C3 支持最高 12 位
#define V_REF 3.3 // 参考电压
void setup() {
Serial.begin(115200); // 初始化串口通信,波特率 115200
analogSetAttenuation(ADC_ATTENUATION); // 设置 ADC 衰减
analogReadResolution(ADC_RESOLUTION); // 设置 ADC 分辨率
}
void loop() {
// 读取 ADC 值
int adcValue = analogRead(ADC_PIN);
// 将 ADC 值转换为电压
float voltage = (float)adcValue * V_REF / (1 << ADC_RESOLUTION);
// 通过 UART 输出电压值
Serial.print("Voltage: ");
Serial.print(voltage, 2); // 输出电压值,保留两位小数
Serial.println(" V");
// 等待一段时间再次读取
delay(1000);
}