Аналогові входи ESP32: особливості, приклади та рекомендації
Особливості АЦП ESP32
- Кількість каналів: до 18 аналогових входів, але частина з них може бути недоступною під час роботи Wi-Fi або Bluetooth.
- Розрядність: 12 біт (значення від 0 до 4095).
- Діапазон напруги: 0–3,3 В.
ESP32 має два аналого-цифрових перетворювача: ADC1 і ADC2. Рекомендується використовувати ADC1 для точніших вимірювань, оскільки ADC2 конфліктує з Wi-Fi.
Приклад програми: читання аналогового значення
int sensorPin = 34; // Вхід ADC1int value = 0;void setup() { Serial.begin(115200);}void loop() { value = analogRead(sensorPin); Serial.println(value); delay(500);}
Настройка ADC: analogReadResolution и analogSetPinAttenuation
Для більш гнучкої роботи з АЦП в ESP32 можна використовувати додаткові функції налаштування:
analogReadResolution()
Ця функція дозволяє задати розрядність результату перетворення.
За замовчуванням ESP32 має 12 біт (значення від 0 до 4095).
Але у деяких випадках можна зменшити точність для прискорення обробки або спрощення обчислень.
analogReadResolution(9)→ значення від 0 до 511.analogReadResolution(10)→ значення від 0 до 1023.analogReadResolution(11)→ значення від 0 до 2047.analogReadResolution(12)→ значення від 0 до 4095 (рекомендоване).
analogSetPinAttenuation()
Функція дозволяє змінювати атенюацію (ослаблення сигналу), щоб адаптувати вхідний діапазон напруги для конкретного піну. Це важливо, оскільки стандартний діапазон вимірювання ESP32 становить приблизно 0–1.1 В, але його можна розширити.
ADC_0db→ діапазон 0–1.1 В (за замовчуванням, максимальна точність).ADC_2_5db→ діапазон 0–1.5 В.ADC_6db→ діапазон 0–2.2 В.ADC_11db→ діапазон 0–3.3 В (для роботи з повним діапазоном живлення).
Приклад коду
#include <Arduino.h>
void setup() {
Serial.begin(115200);
// Задаємо розрядність 12 біт (0-4095)
analogReadResolution(12);
// Розширюємо діапазон піну 34 до 3.3 В
analogSetPinAttenuation(34, ADC_11db);
}
void loop() {
int val = analogRead(34);
Serial.println(val);
delay(500);
}
Таким чином можна налаштувати точність і діапазон вимірювання для кожного аналогового входу ESP32 окремо.
Приклад з програмним фільтром сигналу
int sensorPin = 34;int filteredValue = 0;void setup() { Serial.begin(115200);}void loop() { int raw = analogRead(sensorPin); filteredValue = (filteredValue * 9 + raw) / 10; // ковзне середнє Serial.println(filteredValue); delay(200);}
Таблиця пінів ADC ESP32
| Канал | Пін ESP32 | ADC1/ADC2 | Примітка |
|---|---|---|---|
| ADC1_CH0 | GPIO36 | ADC1 | Працює завжди |
| ADC1_CH1 | GPIO37 | ADC1 | Працює завжди |
| ADC1_CH2 | GPIO38 | ADC1 | Працює завжди |
| ADC1_CH3 | GPIO39 | ADC1 | Працює завжди |
| ADC1_CH4 | GPIO32 | ADC1 | Рекомендується для сенсорів |
| ADC1_CH5 | GPIO33 | ADC1 | Рекомендується для сенсорів |
| ADC2_CH0 | GPIO4 | ADC2 | Не працює при ввімкненому Wi-Fi |
| ADC2_CH1 | GPIO0 | ADC2 | Не працює при ввімкненому Wi-Fi |
| ADC2_CH2 | GPIO2 | ADC2 | Не працює при ввімкненому Wi-Fi |
Підводні камені ESP32 ADC
- Нелінійність: значення АЦП можуть помітно відхилятися від реальної напруги.
- Вплив Wi-Fi: під час передачі даних точність вимірювань знижується.
- ADC1 і ADC2: у них різні характеристики, ADC2 практично не використовується для точних вимірювань.
Калібрування та покращення точності
- Використовуйте
esp_adc_calдля корекції вимірювань. - Вимикайте АЦП у режимі енергозбереження, коли він не потрібен.
- Застосовуйте програмне фільтрування (ковзне середнє, медіана).
Висновки
Вбудовані АЦП ESP32 підходять для більшості побутових і IoT-застосувань: моніторинг напруги, датчики температури, освітленості, потенціометри. Але для завдань, де потрібна висока точність і стабільність, краще використовувати зовнішні спеціалізовані АЦП (наприклад, ADS1115).
Розумний дім #10: Датчик CO2
Розумний дім #10: Датчик CO₂ Контроль якості повітря в приміщенні — один із ключових ел..
Таймери Arduino UNO — Частина 1. Вступ
Таймери Arduino UNO — Частина 1. Вступ Теорія Що таке таймер у мікроконтролері ATmega3..
Міні ESP32
Плата контролера ESP32. Цікавий мініатюрний формат WiFi Bluetooth контролера. Напруга живлення 5В ..
300.26грн.
Цикли 4 — Цикл do...while
Цикли 4 — Цикл do...while Вступ Цикл do...while — це різновид циклу while, але з однією ..
Модуль 2 — Основи електроніки: напруга, струм, опір і кнопковий ліхтарик
Модуль 2 — Основи електроніки (курс для початківців) Мета модуля: ознайомитися з базовими е..





