ESP32: Аналоговые входы

 Arduino  Комментарии к записи ESP32: Аналоговые входы отключены
Июл 182021
 

ESP32: Аналоговые входы

У платы ESP32 15 аналоговых входов с АЦП (12 бит): 2, 4, 12–15, 25–27, 32–36 и 39. Позволяет представить аналоговое напряжение в цифровом виде с разрядностью 12 бит.

Для получения показаний достаточно вызвать функцию analogRead(GPIO), указав нужный пин.

При этом мы считываем уровень напряжения от 0В до 3.3В, которые распределяются от 0 до 4095.

Для примера подключим потенциометр к пину 34 и будем считывать показания через монитор порта.

 // Соединим потенциометр к пину GPIO 34 (Analog ADC1_CH6) const int potPin = 34; // показания int potValue = 0; void setup() { Serial.begin(115200); delay(1000); } void loop() { // считываем показания potValue = analogRead(potPin); Serial.println(potValue); delay(500); } 

Следует учитывать, что показания не являются строго линейными. Так напряжение от 3.2 до 3.3 всё равно будет выводить значение 4095, аналогично для напряжения от 0 до 0.1, которое будет равно 0.

При использовании WiFi для аналоговых входов используйте пины 32, 33, 34, 35, 36, 39. Остальные могут вызвать проблемы.

Другие функции

Существует свои нестандартные функции для работы с аналоговыми входами.

  • analogReadResolution(resolution) — устанавливает разрешение. Можно использовать значение 9 (0 – 511) или 12 (0 – 4095). По умолчанию используется 12 бит
  • analogSetWidth(width) — аналогичная функция. Можно использовать значение 9 (0 – 511) или 12 (0 – 4095). По умолчанию используется 12 бит
  • analogSetCycles(cycles) — set the number of cycles per sample. Default is 8. Range: 1 to 255
  • analogSetSamples(samples) — set the number of samples in the range. Default is 1 sample. It has an effect of increasing sensitivity
  • analogSetClockDiv(attenuation) — set the divider for the ADC clock. Default is 1. Range: 1 to 255
  • analogSetAttenuation(attenuation) — sets the input attenuation for all ADC pins. Default is ADC_11db. Accepted values:
    ADC_0db: sets no attenuation (1V input = ADC reading of 1088).
    ADC_2_5db: sets an attenuation of 1.34 (1V input = ADC reading of 2086).
    ADC_6db: sets an attenuation of 1.5 (1V input = ADC reading of 2975).
    ADC_11db: sets an attenuation of 3.6 (1V input = ADC reading of 3959).
  • analogSetPinAttenuation(pin, attenuation) — sets the input attenuation for the specified pin. The default is ADC_11db. Attenuation values are the same from previous function.
  • adcAttachPin(pin) — Attach a pin to ADC (also clears any other analog mode that could be on). Returns TRUE or FALSE result.
  • adcStart(pin), adcBusy(pin), resultadcEnd(pin) — starts an ADC convertion on attached pin’s bus. Check if conversion on the pin’s ADC bus is currently running (returns TRUE or FALSE). Get the result of the conversion: returns 16-bit integer.