最近Arduino更新了ESP32平台的3.0预览版,使用了最新的ESP-IDF v5.1,在之前的版本中,对ADC读取数据可以通过esp_adc_cal_raw_to_voltage()函数来根据eFuse中烧录的信息进行校准,但在ESP-IDF v5.1中,这个函数被废弃了。
在新的版本中,ESP32在Arduino框架下ADC校准的方法如下:
#include "Arduino.h"
#include "esp_adc/adc_cali.h"
#include "esp_adc/adc_cali_scheme.h"
int ADC_PIN = 7;
static adc_cali_handle_t adc_handel;
void adc_calibration_init(){
esp_err_t ret;
bool cali_enable = false;
adc_cali_scheme_ver_t verf_curve = ADC_CALI_SCHEME_VER_CURVE_FITTING;
ret = adc_cali_check_scheme(&verf_curve);
adc_cali_curve_fitting_config_t cali_config = {ADC_UNIT_1, ADC_CHANNEL_0, ADC_ATTEN_DB_11, ADC_BITWIDTH_12};
adc_cali_create_scheme_curve_fitting(&cali_config, &adc_handel);
}
void setup()
{
Serial.begin(115200);
int raw = 0;
int batVoltage = 0;
for (size_t i = 0; i < 50; i++) {
delay(1);
raw += analogRead(ADC_PIN);
}
adc_calibration_init();
adc_cali_raw_to_voltage(adc_handel, int(raw/50), &batVoltage);
Serial.println(avolt);
}
void loop()
{delay(100);}