Аналогові входи 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).
Serial Monitor для налагодження скетчів Arduino
Використання Serial Monitor для налагодження скетчів Arduino Вступ Serial Monitor — це в..
Модуль 1 — Знайомство з Arduino: перше прошивання Blink і проєкт миготіння світлодіода
Модуль 1 — Знайомство з Arduino (курс для початківців) Мета модуля: зрозуміти, що таке Arduino, в..
Змінне жало паяльника 900M-T 1шт.
Жало для паяльника 60Вт з регуляторомДіаметр робочої частини 3 ммВнутрішній діаметр отвору під ..
34.24грн.
Чистий код в Arduino IDE
Вступ Коли ми говоримо про чистий код в Arduino IDE, багато початківців дивуються: навіщо ц..
Потенціометр Robotale
Двохканальний змінний резистор прямолінійної конструкціїОпір 10 кОмРозміри 90 х 20 мм..
111.67грн.





