目录
1、模拟信号
2、ADC输入
analogRead()函数
analogReadMillivolts
analogReadResolution
3、示例
1、模拟信号
生活中,接触到的大多数信号都是模拟信号,如声音、温度的变化等。如图1所示,模拟信号是用连续变化的物理量表示的信息,信号随时间作连续变化。在模拟输入引脚是指带有ADC(Analog-to-Digital Converter,模数转换器)功能的引脚。非常常见的外设,用于将模拟信号(如电压)转换成数字信号。以便可以读取和处理。
Arduino自己的硬件Arduino Uno模拟输入功能有10位精度,即可以将0~3.3V的电压信号转换为0~1023的整数形式表示。ESP8266也是只有10位,而ESP32,默认12位分辨率,可以接受0~3.3V电压信号转换成0~4095的整数形式表示。
下图是ESP8266 min-D1开发板引脚定义,仅有A0引脚支持ADC输入,
Pin | 说明 | ESP-8266 内部引脚 |
TX | TXD | TXD |
RX | RXD | RXD |
A0 | Analog input, max 3.3V input | A0 |
D0 | IO | GPIO16 |
D1 | IO, SCL | GPIO5 |
D2 | IO, SDA | GPIO4 |
D3 | IO, 10k Pull-up | GPIO0 |
D4 | IO, 10k Pull-up, BUILTIN_LED | GPIO2 |
D5 | IO, SCK | GPIO14 |
D6 | IO, MISO | GPIO12 |
D7 | IO, MOSI | GPIO13 |
D8 | IO, 10k Pull-down, SS | GPIO15 |
G | Ground | GND |
5V | 5V | 外部电源 |
3V3 | 3.3V | 3.3V |
RST | Reset复位 | RST |
ESP32-S3 集成了两个 12 位 SAR ADC,每个ADC有10个通道,共支持 20 个ADC输入
2、ADC输入
analogRead()函数
此函数用于用于获取给定引脚/ADC通道的ADC原始值
analogRead(pin)
pin: 读取的模拟输入引脚的名称,被指定的引脚必须是模拟输入引脚,该值未校准。
analogReadMillivolts
该函数用于获取给定引脚ADC通道的ADC原始值,并将其转换为mV校准结果。
uint32_t analogReadMilliVolts(uint8_t pin);
pin :读取的模拟输入引脚的名称。
analogReadResolution
此函数用于设置返回值的分辨率。默认值为 12 位(范围为 0 到 4095) 对于除 ESP32S3 之外的所有芯片,默认为 13 位(范围从 0 到 8191)。 当设置不同的分辨率时,读取的值将被移动以匹配给定的分辨率
范围是 1 - 16 。如果未使用此函数,则将使用默认值。
void analogReadResolution(uint8_t bits);
//bits设置模拟读取分辨率
//注意:对于 ESP32,分辨率介于 9 到 12 之间,它会改变 ADC 硬件分辨率。否则值将被转移。
3、示例
模拟量接线注意:
测量模拟量引脚A0电压,通过analogRead()函数读取,关系:0-1023<---->0-3.3V
void setup() {
//定义波特率
Serial.begin(115200);
}
void loop() {
// 从A0针脚读取模拟量的数值
int sensorValue = analogRead(A0);
//将模拟量转为电压,(模拟量0-1023,对应的电压是0-3.3V)
float voltage =sensorValue*(3.3/1023.0)
/发送到串口监视器输出
Serial.println(voltage);
delay(1);
}