# ESP32 Configuration

If you are using ESP32 by Espressif Systems version 3.0.0 and later, audio tools will use the new adc_continuous API.

For the adc_continuous API, audio tools provides the following options:

- **sample_rate** (per channel), the effective ADC sampling rate is the number of channels x sample rate and can be:
    - ESP32: 20kHz to 2MHz
    - ESP32 S2, S3, H2, C6, C3: 611Hz to 83.333kHz

for example:

    -       306
    -     4,000
    -     5,000
    -     8,000
    -    10,000
    -    11,025
    -    16,000
    -    20,000
    -    22,050
    -    40,000
    -    44,100
    -    48,000
    -    88,200
    -    96,000
    -   176,400
    -   192,200
    -   352,800
    -   384,000
    -   500,000
    - 1,000,000

- **adc_bit_with**
    - 9, 10, 11, 12 depending on ESP32 model
    - audio stream is int16_t
- **adc_calibration_active**: values measured are in mV
- **is_auto_center_read**: subtraction of current estimated average from samples
- **adc_attenuation**:

    | attenuation     | range   | accurate range |
    | ------------    | --------| -------------- |
    | ADC_ATTEN_DB_0  | 0..1.1V | 100-950mV      |
    | ADC_ATTEN_DB_2_5| 0..1.5V | 100-1250mV     |
    | ADC_ATTEN_DB_6  | 0..2.2V | 150-1750mV     |
    | ADC_ATTEN_DB_12 | 0..3.9V | 150-2450mV     |
   
- **channels**:
    - mono = 1  
    - stereo = 2
- **adc_channels**: defining the channels (only channels on ADC unit 1 are supported) e.g.:
    - A3 on Sparkfun ESP32 Thing Plus is ADC_CHANNEL_3
    - A4 on Sparkfun ESP32 Thing Plus is ADC_CHANNEL_0
    - D5 on Adafruit ESP32-S3 is ADC_CHANNEL_4
    - D6 on Adafruit ESP32-S3 is ADC_CHANNEL_5

- **buffer_size**
    - maximum is 2048
    - minimum is number of channels
    - number needs to be divisible by number of channels
    - care must be taken because some streams in audio tools can not exceed 1024 bytes

## Example Configuration
```
auto adcConfig = adc.defaultConfig(RX_MODE);
adcConfig.sample_rate = 44100;
adcConfig.adc_bit_width = 12;
adcConfig.adc_calibration_active = true;
adcConfig.is_auto_center_read = false;
adcConfig.adc_attenuation = ADC_ATTEN_DB_12; 
adcConfig.channels = 2;
adcConfig.adc_channels[0] = ADC_CHANNEL_4; 
adcConfig.adc_channels[1] = ADC_CHANNEL_5;
```

## ADC unit 1 channels on common ESP32 boards
Audio tools continuous ADC framework supports ADC Unit 1 only.

### Sparkfun ESP32 Thing Plus (ESP32)
- A2, ADC1_CH6
- A3, ADC1_CH3 
- A4, ADC1_CH0 
- 32, ADC1_CH4
- 33, ADC1_CH5

### Sparkfun ESP32 Thing Plus C (ESP32)
- A2, ADC1_CH6
- A3, ADC1_CH3 
- A4, ADC1_CH0 
- A5, ADC1_CH7
- 32/6, ADC1_CH4
- 33/10, ADC1_CH5

### Sparkfun ESP32 Qwiic Pocket Development (ESP32C6)
- 2, ADC1_CH2
- 3, ADC1_CH3
- 4, ADC1_CH4
- 5, ADC1_CH5

### ESP32-C6-DevKit
- 4, ADC1_CH4
- 5, ADC1_CH5
- 6, ADC1_CH6
- 7, ADC1_CH0
- 0, ADC1_CH1
- 2, ADC1_CH2
- 3, ADC1_CH3

### ESP32-H2-DevKit
- 1, ADC1_CH0
- 2, ADC1_CH1
- 3, ADC1_CH2
- 4, ADC1_CH3
- 5, ADC1_CH4

### ESP32­-S3­-DevKit
- 1,  ADC1_CH0
- 2,  ADC1_CH1
- 4,  ADC1_CH3
- 5,  ADC1_CH4
- 6,  ADC1_CH5
- 7,  ADC1_CH6
- 8,  ADC1_CH7
- 3,  ADC1_CH2
- 9,  ADC1_CH8
- 10, ADC1_CH9

### ESP32-C3-DevKit
-  4, IO2, ADC1_CH2
-  5, IO3, ADC1_CH3
-  9, IO0, ADC1_CH0
- 10, IO1, ADC1_CH1
- 11, IO4, ADC1_CH4

### Adafruit ESP32 Feather V2
- D32, ADC1_CH4
- D33, ADC1_CH5
-  A2, ADC1_CH6
-  A3, ADC1_CH3
-  A4, ADC1_CH0
- D37, ADC1_CH1

### Adafruit ESP32-S3 Feather
-  D5, ADC1_CH4
-  D6, ADC1_CH5
-  D9, ADC1_CH8
- D10, ADC1_CH9
-  A5, ADC1_CH7

### Adafruit QT Py ESP32-C3
- A0, ADC1-CH4
- A1, ADC1-CH3
- A2, ADC1-CH1
- A3, ADC1-CH0
