ESP-LiveControl  1.99.1
HTTP server, AJAX API backend and Vue.js web application implementing self-contained, zero-install WiFi remote control of hardware modules attached to the Espressif ESP32 SoC
esp32_adc_channel.hpp
Go to the documentation of this file.
1 
6 #ifndef ESP32_ADC_CHANNEL_HPP__
7 #define ESP32_ADC_CHANNEL_HPP__
8 
9 #include <array>
10 
11 #include "driver/gpio.h"
12 #include "driver/timer.h"
13 #include "driver/adc.h"
14 #include "esp_adc_cal.h"
15 #include "soc/sens_reg.h"
16 #include "soc/sens_struct.h"
17 
18 #include "adc_filter_interpolation.hpp"
19 #include "app_config.hpp"
20 
21 
33 {
34 public:
35  adc1_channel_t channel_num;
36  adc_atten_t attenuation;
37  esp_adc_cal_characteristics_t calibration_data;
38 
48  ESP32ADCChannel(adc1_channel_t channel_num,
49  adc_atten_t attenuation,
50  uint32_t averaged_samples = 64,
51  adc_bits_width_t bits_width = ADC_WIDTH_BIT_12,
52  uint32_t default_vref = 1100u);
53 
60  uint16_t get_raw_averaged();
61 
71  uint16_t get_voltage_averaged();
72 
77  int32_t calculate_raw_from_voltage(uint32_t v_in_mv);
78 
82  void debug_print_characterisation_val_type(esp_adc_cal_value_t val_type);
83  void test_register_direct();
84 
85 protected:
86  uint32_t division_shift;
87  // Initialised with an invalid value to check if HW was initialised by a
88  // previous constructor call. (All channels must have same bits_width)
89  inline static auto _bits_width = adc_bits_width_t{ADC_WIDTH_MAX};
90 };
91 
92 
104 template<size_t filter_length>
106 {
107 public:
117  ESP32ADCChannelFiltered(adc1_channel_t channel_num,
118  adc_atten_t attenuation,
119  uint32_t averaged_samples = 64,
120  adc_bits_width_t bits_width = ADC_WIDTH_BIT_12,
121  uint32_t default_vref = 1100u)
122  : ESP32ADCChannel{channel_num, attenuation, averaged_samples,
123  bits_width, default_vref}
124  {
125  filter.initialize(get_raw_averaged());
126  }
127 
133  auto raw_sample = get_raw_averaged();
134  filter.input_data(raw_sample);
135  }
136 
145  uint16_t get_raw_filtered(bool trigger_new_acquisition = true) {
146  if (trigger_new_acquisition) {
148  }
149  return filter.get_result();
150  }
151 
152 
162  uint16_t get_voltage_filtered(bool trigger_new_acquisition = true) {
163  return esp_adc_cal_raw_to_voltage(get_raw_filtered(trigger_new_acquisition),
164  &calibration_data);
165  }
166 
167 protected:
169 };
170 
171 #endif
Application, network and hardware settings, constants and preset configuration.
ESP32 ADC 1 channel access with configurable moving average filter. Moving average filtering/smoothin...
Definition: esp32_adc_channel.hpp:106
uint16_t get_raw_filtered(bool trigger_new_acquisition=true)
Get raw ADC channel conversion value, through moving average filter.
Definition: esp32_adc_channel.hpp:145
uint16_t get_voltage_filtered(bool trigger_new_acquisition=true)
Get channel input voltage, filtered by internal moving average.
Definition: esp32_adc_channel.hpp:162
ESP32ADCChannelFiltered(adc1_channel_t channel_num, adc_atten_t attenuation, uint32_t averaged_samples=64, adc_bits_width_t bits_width=ADC_WIDTH_BIT_12, uint32_t default_vref=1100u)
Initialize an ESP32 ADC channel.
Definition: esp32_adc_channel.hpp:117
void trigger_acquisition()
Explicitly trigger a new ADC analog input channel acquisition.
Definition: esp32_adc_channel.hpp:132
ESP32 ADC 1 channel access with configurable averaging.
Definition: esp32_adc_channel.hpp:33
int32_t calculate_raw_from_voltage(uint32_t v_in_mv)
Calculate backwards the raw ADC reading for given input voltage, based on calibration constants from ...
Definition: esp32_adc_channel.cpp:80
void debug_print_check_efuse()
Definition: esp32_adc_channel.cpp:90
uint16_t get_raw_averaged()
Get raw ADC channel conversion value. Repeats sampling a number of times, see "averaged_samples" cons...
Definition: esp32_adc_channel.cpp:54
uint16_t get_voltage_averaged()
Get channel input voltage in millivolts. Repeats sampling a number of times, see "averaged_samples" c...
Definition: esp32_adc_channel.cpp:72
ESP32ADCChannel(adc1_channel_t channel_num, adc_atten_t attenuation, uint32_t averaged_samples=64, adc_bits_width_t bits_width=ADC_WIDTH_BIT_12, uint32_t default_vref=1100u)
Initialize an ESP32 ADC channel.
Definition: esp32_adc_channel.cpp:14
void input_data(uint16_t value_in)
Read in a new datum and update the filter.
Definition: adc_filter_interpolation.hpp:55
uint16_t get_result()
Get filter output value.
Definition: adc_filter_interpolation.hpp:66
void initialize(uint16_t init_value)
Initializes the moving average filter with a start value.
Definition: adc_filter_interpolation.hpp:46