ESP8266 NodeMCU PWM с Arduino IDE – Плавное управление яркостью светодиода (аналоговый выход)
В этом руководстве показано, как генерировать ШИМ-сигналы (PWM) на ESP8266 NodeMCU с помощью Arduino IDE. В качестве примера мы будем плавно изменять яркость светодиода, меняя коэффициент заполнения (duty cycle) во времени.
Для генерации ШИМ-сигнала на выводах ESP8266 в Arduino IDE используется функция analogWrite(pin, value). Значение value – целое число в диапазоне от 0 до 255.
Для версий ESP8266 до 3.0 диапазон по умолчанию составляет от 0 до 1023. Диапазон ШИМ можно изменить, вызвав analogWriteRange(new_range).
Вам также могут быть полезны другие руководства по ШИМ:
ESP32 PWM с Arduino IDE – Плавное управление яркостью светодиода
ESP32/ESP8266 PWM с MicroPython – Плавное управление яркостью светодиода
Прежде чем приступить к этому руководству, у вас должен быть установлен аддон ESP8266 в Arduino IDE. Следуйте следующему руководству для установки ESP8266 в Arduino IDE.
ESP8266 NodeMCU PWM (широтно-импульсная модуляция)
GPIO ESP8266 могут быть установлены либо на выход 0В, либо на 3.3В, но они не могут выдавать промежуточные напряжения. Однако вы можете выводить «ненастоящие» промежуточные напряжения с помощью широтно-импульсной модуляции (ШИМ/PWM), и именно так вы будете создавать различные уровни яркости светодиода в этом проекте.
Если вы будете переключать напряжение светодиода между HIGH и LOW очень быстро, ваши глаза не успеют уследить за скоростью, с которой светодиод включается и выключается; вы просто увидите некоторые градации яркости.
Именно так работает ШИМ – создавая выходной сигнал, который переключается между HIGH и LOW с очень высокой частотой.
Коэффициент заполнения (duty cycle) – это доля периода, в течение которой светодиод находится в состоянии HIGH. На следующем рисунке показано, как работает ШИМ.
Коэффициент заполнения 50 процентов соответствует 50-процентной яркости светодиода, коэффициент заполнения 0 означает, что светодиод полностью выключен, а коэффициент заполнения 100 означает, что светодиод полностью включён. Изменение коэффициента заполнения – это способ получения различных уровней яркости.
analogWrite()
Для генерации ШИМ-сигнала на заданном выводе используйте следующую функцию:
analogWrite(pin, value);
pin: ШИМ может использоваться на выводах с 0 по 16
value: должно быть в диапазоне от 0 до PWMRANGE, который по умолчанию равен 255. Когда значение равно 0, ШИМ отключается на этом выводе. Значение 255 соответствует 100% коэффициенту заполнения
Вы можете изменить диапазон ШИМ, вызвав:
analogWriteRange(new_range);
По умолчанию частота ШИМ ESP8266 составляет 1 кГц. Вы можете изменить частоту ШИМ с помощью:
analogWriteFreq(new_frequency);
Допустимые значения – от 100 Гц до 40000 Гц.
ESP8266 NodeMCU – Плавное управление яркостью светодиода с помощью ШИМ
В этом разделе мы создадим простой пример, который плавно изменяет яркость светодиода, чтобы вы увидели, как использовать ШИМ в своих проектах. Вам потребуются следующие компоненты:
ESP8266 (читайте Лучшие платы разработки ESP8266)
Опционально: осциллограф (читайте Лучшие осциллографы для начинающих)
Если вы используете ESP-01, вам понадобится FTDI-программатор или последовательный адаптер для загрузки кода.
Вы можете перейти по ссылкам выше или напрямую на MakerAdvisor.com/tools, чтобы найти все компоненты для ваших проектов по лучшей цене!
Схема подключения
После загрузки кода подключите светодиод к вашему ESP8266, как показано на следующей схеме. Мы подключаем светодиод к GPIO 2, но вы можете использовать любой другой подходящий GPIO.
Если вы используете ESP-01, вы можете посмотреть распиновку платы здесь.
Код ESP8266 NodeMCU PWM
Скопируйте код в Arduino IDE и загрузите его на ESP8266.
/*********
Rui Santos
Complete project details at https://randomnerdtutorials.com
*********/
const int ledPin = 2;
void setup() {
}
void loop() {
// increase the LED brightness
for(int dutyCycle = 0; dutyCycle < 255; dutyCycle++){
// changing the LED brightness with PWM
analogWrite(ledPin, dutyCycle);
delay(1);
}
// decrease the LED brightness
for(int dutyCycle = 255; dutyCycle > 0; dutyCycle--){
// changing the LED brightness with PWM
analogWrite(ledPin, dutyCycle);
delay(1);
}
}
Как работает код
Продолжайте читать этот раздел, чтобы узнать, как работает код, или перейдите к следующему разделу.
Начните с определения вывода, к которому подключён светодиод. В данном случае светодиод подключён к GPIO 2 (D4).
const int ledPin = 2;
В loop() вы изменяете коэффициент заполнения от 0 до 255, чтобы увеличить яркость светодиода.
for(int dutyCycle = 0; dutyCycle < 255; dutyCycle++){
// changing the LED brightness with PWM
analogWrite(ledPin, dutyCycle);
delay(1);
}
А затем от 255 до 0, чтобы уменьшить яркость.
for(int dutyCycle = 255; dutyCycle > 0; dutyCycle--){
// changing the LED brightness with PWM
analogWrite(ledPin, dutyCycle);
delay(1);
}
Для установки яркости светодиода необходимо использовать функцию analogWrite(), которая принимает в качестве аргументов GPIO, на котором вы хотите получить ШИМ-сигнал, и значение от 0 до 255 для установки коэффициента заполнения.
Загрузка кода
В Arduino IDE перейдите в Tools > Board и выберите вашу модель ESP8266 (если вы используете ESP-01, выберите «Generic ESP8266 Module»).
Перейдите в Tools > Port и выберите COM-порт, к которому подключён ESP8266.
Если вы используете ESP-01, вам понадобится FTDI-программатор или последовательный адаптер для загрузки кода. Вот подключения, которые необходимо выполнить:
ESP-01 |
FTDI-программатор |
|---|---|
RX |
TX |
TX |
RX |
CH_PD |
3.3V |
GPIO 0 |
GND |
VCC |
3.3V |
GND |
GND |
Демонстрация
После загрузки скетча светодиод, подключённый к GPIO 2, должен плавно увеличивать и уменьшать яркость со временем.
Вы можете подключить GPIO 2 к осциллографу, чтобы увидеть, как ШИМ-сигнал изменяется со временем.
Читайте наш обзор: Лучшие осциллографы для начинающих и любителей электроники.
Заключение
Мы надеемся, что это руководство по использованию ШИМ на ESP8266 было вам полезно. Помимо управления яркостью светодиода, ШИМ также можно использовать для управления скоростью двигателя постоянного тока.
Вам также могут понравиться другие наши проекты:
Если вам нравится ESP8266, обязательно ознакомьтесь с нашими ресурсами: