ESP32 PWM (analogWrite): керування світлодіодами та моторами
ESP32 підтримує широтно-імпульсну модуляцію (ШІМ, PWM), яка дозволяє регулювати яскравість світлодіодів, швидкість моторів, роботу вентиляторів та інших пристроїв.
На відміну від Arduino Uno, де для PWM використовується стандартна функція analogWrite(), у ESP32 вона розширена та дозволяє налаштовувати частоту і роздільну здатність.
Основні можливості analogWrite на ESP32
- Будь-який GPIO може працювати з PWM (крім вхідних пінів 34–39).
- Частота ШІМ налаштовується від 1 Гц до 1 МГц.
- Роздільна здатність задається від 1 до 16 біт (1–65535 значень duty cycle).
Налаштування PWM
В ESP32 перед використанням PWM можна змінювати частоту та роздільну здатність:
// Встановлення роздільної здатності (кількість бітів)
void analogWriteResolution(uint8_t pin, uint8_t resolution);
// Встановлення частоти PWM
void analogWriteFrequency(uint8_t pin, uint32_t freq);
Наприклад:
analogWriteResolution(5, 10); // 10 біт = 0–1023
analogWriteFrequency(5, 5000); // 5 кГц
Приклад 1. Просте керування яскравістю світлодіода
const int ledPin = 5;
void setup() {
analogWriteResolution(ledPin, 8); // 0–255
analogWriteFrequency(ledPin, 5000); // 5 кГц
}
void loop() {
for (int i = 0; i <= 255; i++) {
analogWrite(ledPin, i);
delay(10);
}
for (int i = 255; i >= 0; i--) {
analogWrite(ledPin, i);
delay(10);
}
}
Що відбувається: світлодіод плавно загоряється та гасне.
Приклад 2. Керування швидкістю двигуна
const int motorPin = 18;
void setup() {
analogWriteResolution(motorPin, 10); // 0–1023
analogWriteFrequency(motorPin, 20000); // 20 кГц (поза чутним діапазоном)
}
void loop() {
// 50% швидкості
analogWrite(motorPin, 512);
delay(3000);
// Максимальна швидкість
analogWrite(motorPin, 1023);
delay(3000);
// Зупинка
analogWrite(motorPin, 0);
delay(3000);
}
Що відбувається: двигун змінює швидкість залежно від значення PWM.
Приклад 3. RGB-світлодіод
const int redPin = 21;
const int greenPin = 22;
const int bluePin = 23;
void setup() {
analogWriteResolution(redPin, 8);
analogWriteResolution(greenPin, 8);
analogWriteResolution(bluePin, 8);
analogWriteFrequency(redPin, 5000);
analogWriteFrequency(greenPin, 5000);
analogWriteFrequency(bluePin, 5000);
}
void loop() {
// Червоний
analogWrite(redPin, 255);
analogWrite(greenPin, 0);
analogWrite(bluePin, 0);
delay(1000);
// Зелений
analogWrite(redPin, 0);
analogWrite(greenPin, 255);
analogWrite(bluePin, 0);
delay(1000);
// Синій
analogWrite(redPin, 0);
analogWrite(greenPin, 0);
analogWrite(bluePin, 255);
delay(1000);
}
Що відбувається: RGB-світлодіод змінює колір від червоного до зеленого та синього.
Висновки
Використовуючи analogWrite() на ESP32, можна просто керувати світлодіодами, RGB-підсвіткою та моторами.
Можливість налаштувати частоту та роздільну здатність робить ESP32 значно гнучкішим у порівнянні з Arduino Uno.
Модуль підсилювача 2 х 3 Вт
Мініатюрний стерео підсилювач звукової частоти класу D на базі мікросхеми PAM8403Потужність 2 х 3 Вт..
29.19грн.
Джойстик шилд для Arduino UNO MEGA
Шилд джойстика для контролерів Arduino UNO та MEGAМожна використовувати для саморобних ігор, а також..
176.49грн.
Твердотільне реле 10А
Реле без механічних контактів на 10 А. Силовим елементом даного реле є симистор.Гальванічна розв'язк..
281.48грн.
Світлодіод ультраяскравий 5мм
Над-яскравий світлодіод діаметром 5 мм Корпус прозорий в світлодіодів різного кольору світіння. Тоб..
5.75грн.
Кнопка металева герметична 16мм (латунь, IP65, 3A, без фіксації)
Надійна вологозахищена кнопка без фіксації діаметром 16 мм. Виготовлена з латуні з нікелевим покритт..
82.91грн.





