学习目标:
- 掌握Arduino 在ESP32上读取模拟输入(ADC)。
学习内容:
使用ESP32读取模拟值,可以测量0 V至3.3 V之间的电压(实际自己体会...)。
测得的电压转为数字量为0到4095,即2的12次方(模块上的ADC是12位的),其中0 V对应于0,3.3 V对应于4095。
但是,ADC是非线性的。
读取模拟输入的函数:
analogRead(GPIO);
注意下图中ADC的引脚!
- analogReadResolution(分辨率):设置采样位数和分辨率。它可以是介于9(0–511)和12位(0–4095)之间的值。默认值为12位分辨率。
- analogSetWidth(宽度):设置采样位数和分辨率。它可以是介于9(0–511)和12位(0–4095)之间的值。默认值为12位分辨率。
- analogSetCycles(周期):设置每个样本的循环次数。默认值为8。范围:1到255。
- analogSetSamples(样本):设置范围内的样本数量。默认值为1个样本。它具有增加灵敏度的效果。
- analogSetClockDiv(衰减):设置ADC时钟的分频器。默认值为1。范围:1到255。
- 模拟衰减(衰减):设置所有ADC引脚的输入衰减。默认值为ADC_11db。可接受的值:
- ADC_0db:不设置衰减。ADC最高可测量约800 mV (1V输入= ADC读数为1088)。
- ADC_2_5db:ADC的输入电压将被衰减,从而将测量范围扩展到大约。1100 mV。(1V输入= ADC读数为3722)。
- ADC_6db:ADC的输入电压将被衰减,从而将测量范围扩展到大约。1350 mV。(1V输入= ADC读数为3033)。
- ADC_11db:ADC的输入电压将被衰减,从而将测量范围扩展到大约。2600 mV。(1V输入= ADC读数为1575)。
- analogSetPinAttenuation(引脚,衰减):设置指定引脚的输入衰减。默认值为ADC_11db。衰减值与之前的函数相同。
- adcAttachPin(引脚):将一个引脚连接到ADC(同时清除任何其他可能开启的模拟模式)。返回真或假结果。
- adcStart(引脚), adcBusy(引脚)和resultadcEnd(引脚):在相连引脚的总线上启动ADC转换。检查引脚ADC总线上的转换当前是否正在运行(返回真或假)。获取转换结果:返回16位整数。
仿真测试:
仿真网址:
Wokwi - Online Arduino and ESP32 Simulator
测试代码:
// Potentiometer is connected to GPIO 34 (Analog ADC1_CH6)
const int potPin = 34;
// variable for storing the potentiometer value
int potValue = 0;
void setup() {
Serial.begin(115200);
delay(1000);
}
void loop() {
// Reading potentiometer value
potValue = analogRead(potPin);
Serial.println(potValue);
delay(500);
}