Аналогові входи 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).
Стійка нейлонова М3 12мм + 6мм
Стійка для кріплення усіляких електронних модулів до корпусу пристроюВисота стійки 12 ммДовжина зовн..
5.18грн.
Arduino функції та як з ними боротися
Ця стаття із серії уроки Arduino. Тема цього уроку: Arduino функції і як з ними боротися.Ми дізнаємо..
Arduino повернення більше однієї змінної функції
Привіт друзі! З відео Arduino функції ми вже знаємо, що в функцію можна передавати багато змінних, а..
Отримання даних через UART Arduino Nano
Усім користувачам контролерів Arduino відомо, що можна передавати дані через апаратний порт UART кон..
Sonoff basic розумний вимикач WiFi
Напруга живлення 90 ... 250 В змінного струмуМаксимальний струм комутації 10 А..
308.20грн.





