From 751419d47e2173c7d366e817a8321d9e49dd41c5 Mon Sep 17 00:00:00 2001 From: Edvin Date: Mon, 13 Oct 2025 15:41:15 +0200 Subject: First commit --- CMakeLists.txt | 3 +++ EZADC.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ README.md | 24 ++++++++++++++++++++++++ include/EZADC.h | 35 +++++++++++++++++++++++++++++++++++ 4 files changed, 108 insertions(+) create mode 100644 CMakeLists.txt create mode 100644 EZADC.c create mode 100644 README.md create mode 100644 include/EZADC.h diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..dd87db2 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,3 @@ +idf_component_register(SRCS "EZADC.c" + INCLUDE_DIRS "include" + REQUIRES "esp_adc") diff --git a/EZADC.c b/EZADC.c new file mode 100644 index 0000000..371faf6 --- /dev/null +++ b/EZADC.c @@ -0,0 +1,46 @@ +#include "EZADC.h" + +void init_adc(ADC* adc) +{ + // Only use unit 1, as unit 2 is going to be deprecated. + // And it does not work while using the Wi-Fi module. + adc->adc_init_config.unit_id = ADC_UNIT_1; + + ESP_ERROR_CHECK(adc_oneshot_new_unit(&(adc->adc_init_config), &(adc->adc_handle))); +} + +void config_adc(ADC* adc, int config_channel) +{ + adc->adc_config.atten = ADC_ATTEN_DB_12; + adc->adc_config.bitwidth = ADC_BITWIDTH_DEFAULT; + + adc->channel = ezadc_channel[config_channel]; + + ESP_ERROR_CHECK(adc_oneshot_config_channel(adc->adc_handle, adc->channel, &(adc->adc_config))); + + adc->adc_cali_handle = NULL; + adc->cali_config.unit_id = ADC_UNIT_1; + adc->cali_config.atten = ADC_ATTEN_DB_12; + adc->cali_config.bitwidth = ADC_BITWIDTH_DEFAULT; + + ESP_ERROR_CHECK(adc_cali_create_scheme_line_fitting(&(adc->cali_config), &(adc->adc_cali_handle))); +} + +void teardown_adc(ADC* adc) +{ + ESP_ERROR_CHECK(adc_oneshot_del_unit(adc->adc_handle)); + ESP_ERROR_CHECK(adc_cali_delete_scheme_line_fitting(adc->adc_cali_handle)); +} + +int ez_read(ADC* adc)//, int adc_raw[2][10], int voltage[2][10]) +{ + char* TAG = "ez_read"; + + ESP_ERROR_CHECK(adc_oneshot_read(adc->adc_handle, adc->channel, &adc_raw[0][0])); + ESP_LOGI(TAG, "ADC%d Channel[%d] Raw data: %d", adc->adc_init_config.unit_id + 1, adc->channel, adc_raw[0][0]); + + ESP_ERROR_CHECK(adc_cali_raw_to_voltage(adc->adc_cali_handle, adc_raw[0][0], &voltage[0][0])); + ESP_LOGI(TAG, "ADC%d Channel[%d] Voltage: %d", adc->adc_init_config.unit_id + 1, adc->channel, voltage[0][0]); + + return voltage[0][0]; +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..ae16c11 --- /dev/null +++ b/README.md @@ -0,0 +1,24 @@ +# `EZADC` + +This ESP32 component was made to more easily gather data from the analog-to-digital converter (ADC). It defines a new data structure, `ADC`, which allows the user to quickly configure and use the ADC. + +## `ADC` + +To initialize the data structure, one may use the component library as follows: + + // Create ADC + ADC my_adc; + + // Initialize ADC + init_adc(&my_adc); + + // Configure ADC to channel 7 + config_adc(&my_adc, 7); + + // Read from ADC channel 7 + ez_read(&my_adc); + + // Tear down ADC when you're done + teardown_adc(&my_adc); + +This was originally done to read the battery voltage on the Adafruit Feather HUZZAH32, where the GPIO 35 is connected to ADC channel 7. diff --git a/include/EZADC.h b/include/EZADC.h new file mode 100644 index 0000000..08b66ef --- /dev/null +++ b/include/EZADC.h @@ -0,0 +1,35 @@ +#include "esp_log.h" +#include "esp_adc/adc_oneshot.h" +#include "esp_adc/adc_cali.h" +#include "esp_adc/adc_cali_scheme.h" + +static int adc_raw[2][10]; +static int voltage[2][10]; + +typedef struct { + adc_oneshot_unit_handle_t adc_handle; + adc_oneshot_unit_init_cfg_t adc_init_config; + adc_oneshot_chan_cfg_t adc_config; + adc_cali_handle_t adc_cali_handle; + adc_cali_line_fitting_config_t cali_config; + adc_channel_t channel; +} ADC; + +static const adc_channel_t ezadc_channel[] = {ADC_CHANNEL_0, + ADC_CHANNEL_1, + ADC_CHANNEL_2, + ADC_CHANNEL_3, + ADC_CHANNEL_4, + ADC_CHANNEL_5, + ADC_CHANNEL_6, + ADC_CHANNEL_7, + ADC_CHANNEL_8, + ADC_CHANNEL_9}; + +void init_adc(ADC* adc); + +void config_adc(ADC* adc, int config_channel); + +void teardown_adc(ADC* adc); + +int ez_read(ADC* adc);//, int adc_raw[2][10], int voltage[2][10]); -- cgit v1.2.3