← Back to ratslair.com
aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt3
-rw-r--r--EZADC.c46
-rw-r--r--README.md24
-rw-r--r--include/EZADC.h35
4 files changed, 108 insertions, 0 deletions
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]);