#include <esp_adc/adc_oneshot.h> #include <esp_adc/adc_cali.h> #include <esp_adc/adc_cali_scheme.h> adc_oneshot_unit_handle_t adc1_handle = nullptr; adc_cali_handle_t adc_cali_channel_handle = nullptr; void InitADC() { //-------------ADC1 Init---------------// adc_oneshot_unit_init_cfg_t init_config1 = { .unit_id = ADC_UNIT_1, }; ESP_ERROR_CHECK(adc_oneshot_new_unit(&init_config1, &adc1_handle)); //-------------ADC1 Config---------------// adc_oneshot_chan_cfg_t config = { .atten = ADC_ATTEN_DB_11, .bitwidth = ADC_BITWIDTH_DEFAULT, // default width is max supported width }; ESP_ERROR_CHECK(adc_oneshot_config_channel(adc1_handle, ADC_CHANNEL_6, &config)); // Initialize adc_cali_curve_fitting_config_t cali_config = { .unit_id = ADC_UNIT_1, .chan = ADC_CHANNEL_6, .atten = ADC_ATTEN_DB_11, .bitwidth = ADC_BITWIDTH_DEFAULT, }; ESP_ERROR_CHECK(adc_cali_create_scheme_curve_fitting(&cali_config, &adc_cali_channel_handle)); } void ADCRead() { // Read raw value int raw = 0; ESP_ERROR_CHECK(adc_oneshot_read(adc1_handle, ADC_CHANNEL_6, &raw)); // Apply calibration to value int voltage = 0; ESP_ERROR_CHECK(adc_cali_raw_to_voltage(adc_cali_channel_handle, raw, &voltage)); printf("ADC Channel[%d] Cali Voltage: %d mV\n", ADC_CHANNEL_6, voltage); }
Usage example:
InitADC(); while(true) { ADCRead(); // Wait for some delay before reading again vTaskDelay(50 / portTICK_PERIOD_MS); }
This prints, for example:
ADC Channel[6] Cali Voltage: 163 mV