3、基于Arduino框架esp32的GPIO使用介绍:基于Arduino框架esp32的GPIO使用介绍
注:本文章内容是基于arduino框架进行esp32的开发。
开发环境搭建可以参考上一篇文章:2、搭建ESP32开发环境
1、ADC简介
ADC(模数转换器)是非常常见的外围设备之一,用于将模拟电压信号转换为数字形式。在监控大多数产生模拟输出电压的传感器(例如温度、压力、水压等)中使用非常广泛。
在实际使用中被采集的电压可能超出片内ADC的电压采集范围,此时需要设计相应的分压电路分压后才进行采集计算得到实际电压。
不同芯片有不同数量的ADC,每个ADC也可能具有不同数量的可用通道和引脚。请参阅每个板的数据手册。
2、Arduino框架下ESP32的ADC相关函数
Arduino框架ADC通用API:1~6
ESP32芯片专用的ADC API:7~9
(1)analogReadResolution设置所有ADC分辨率
**功能:**用于设置模拟读取返回值的分辨率。所有芯片的默认值为12位(范围从0到4096),但ESP32S3除外,ESP32S3的默认值是13位(范围为0到8192)。当设置不同的分辨率时,读取的值将被移动以匹配给定的分辨率。范围为1-16。如果未使用此函数,将使用默认值。对于ESP32,分辨率介于9到12之间,这将改变ADC硬件分辨率。否则将移动值。
函数原型:
void analogReadResolution(uint8_t bits);
/*
参数说明:
bits:ADC模拟读取分辨率。
*/
(2)analogSetClockDiv设置ADC时钟分频
**功能:**用于设置ADC时钟的分频器。
函数原型:
void analogSetClockDiv(uint8_t clockDiv);
/*
参数说明:
clockDiv:为ADC时钟设置分频器。范围为1-255,默认值为1。
*/
(3)analogSetAttenuation设置所有ADC通道衰减(设计电压采集范围)
**功能:**用于设置所有通道的衰减,实现修改ADC的电压测量范围。
函数原型:
void analogSetAttenuation(adc_attenuation_t attenuation);
/*
参数说明:
attenuation:设置的衰减。(ADC_ATTEN_DB_0、ADC_ATTEN_DB_2_5、ADC_ATTEN_DB_2_5、ADC_ATTEN_DB_2_5)
*/
宏定义
衰减宏 | 对于esp32的意义 |
---|---|
ADC_ATTEN_DB_0 | 电压测量范围100 mV ~ 950 mV |
ADC_ATTEN_DB_2_5 | 电压测量范围100 mV ~ 1250 mV |
ADC_ATTEN_DB_6 | 电压测量范围150 mV ~ 1750 mV |
ADC_ATTEN_DB_11 | 电压测量范围150 mV ~ 2450 mV |
(4)analogSetPinAttenuation设置特定ADC通道衰减(设计电压采集范围)
**功能:**用于设置特定pin/ADC通道的衰减。
函数原型:
void analogSetPinAttenuation(uint8_t pin, adc_attenuation_t attenuation);
/*
参数说明:
pin: ADC通道对应的特定管脚。
attenuation:设置衰减。(ADC_ATTEN_DB_0、ADC_ATTEN_DB_2_5、ADC_ATTEN_DB_2_5、ADC_ATTEN_DB_2_5)
*/
宏定义
衰减宏 | 对于esp32的意义 |
---|---|
ADC_ATTEN_DB_0 | 电压测量范围100 mV ~ 950 mV |
ADC_ATTEN_DB_2_5 | 电压测量范围100 mV ~ 1250 mV |
ADC_ATTEN_DB_6 | 电压测量范围150 mV ~ 1750 mV |
ADC_ATTEN_DB_11 | 电压测量范围150 mV ~ 2450 mV |
(5)analogRead读取ADC通道原始值
**功能:**用于获取给定pin/ADC通道的ADC原始值。
函数原型:
uint16_t analogRead(uint8_t pin);
/*
参数说明:
pin:ADC通道对应的管脚编号。
*/
(6)analogReadMillivolts读取ADC通道电压值
**功能:**用于获取给定pin/ADC通道的ADC值,f返回值单位为毫伏。
函数原型:
uint32_t analogReadMilliVolts(uint8_t pin);
/*
参数说明:
pin:ADC通道对应的管脚编号。
*/
(7)analogSetWidth设置所有ADC通道硬件分辨率
**功能:**用于设置硬件采样位和读取分辨率。默认值为12位(0-4095),范围为9-12。
函数原型:
void analogSetWidth(uint8_t bits);
/*
参数说明:
bits:ADC采样分辨率位宽。
*/
(8)analogSetVRefPin设置ADC校准引脚
**功能:**用于在esp32尚未校准时用于设置ADC校准的引脚(引脚25、26或27)。
函数原型:文章来源:https://www.toymoban.com/news/detail-626369.html
void analogSetVRefPin(uint8_t pin);
/*
参数说明:
pin:用于设置ADC校准的VRefPin的引脚编号。
*/
(9)hallRead读取引脚36、39连接的HALL传感器ADC值
**功能:**用于获得连接到引脚36(SVP)和39(SVN)的HALL传感器的ADC值。
函数原型:文章来源地址https://www.toymoban.com/news/detail-626369.html
int hallRead();
/*
参数说明:
*/
3、ESP32 ADC使用例子(Arduino框架)
#include <Arduino.h>
#define PIN_ADC2_CH2 2 //定义引脚宏
void setup() {
Serial.begin(115200); //初始化配置串口
analogReadResolution(12); //设置ADC的分辨率为12位(0-4096)
}
void loop() {
//定义两个变量用于保存ADC采集的原始值和电压值(单位毫伏)
int analogOriginalValue = 0;
int analogVoltsValue = 0;
analogOriginalValue = analogRead(PIN_ADC2_CH2); //读取ADC原始值
analogVoltsValue = analogReadMilliVolts(PIN_ADC2_CH2); //读取ADC电压值(范围毫伏)
// 上传A读取的ADC值:
Serial.printf("ADC analog value = %d\n",analogOriginalValue);
Serial.printf("ADC millivolts value = %d ms\n",analogVoltsValue);
delay(100); //延时
}
如有不对之处,欢迎大家指正!
到了这里,关于4、Arduino_esp32 ADC使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!