ESP32/ESP8266 ШИМ (PWM) с MicroPython — плавная регулировка яркости светодиода
В этом руководстве показано, как генерировать сигналы ШИМ (PWM) на платах ESP32 и ESP8266 с использованием прошивки MicroPython. В качестве примера мы будем плавно изменять яркость светодиода, меняя скважность (duty cycle) с течением времени.
Предварительные требования
Для выполнения этого руководства у вас должна быть установлена прошивка MicroPython на плате ESP32 или ESP8266. Также вам потребуется IDE для написания и загрузки кода на плату. Мы рекомендуем использовать Thonny IDE или uPyCraft IDE:
Thonny IDE:
uPyCraft IDE:
Схема подключения
Для этого примера подключите светодиод к вашей плате ESP. Мы подключим светодиод к GPIO 5 на обеих платах, но вы можете выбрать другой подходящий пин с поддержкой ШИМ. Ознакомьтесь с лучшими пинами для использования в нашем руководстве по распиновке ESP32.
Необходимые компоненты
Вот список компонентов, необходимых для сборки схемы:
Схема — ESP32
Следуйте приведённой ниже схеме, если вы используете плату ESP32:
Схема — ESP8266
Следуйте приведённой ниже схеме, если вы используете плату ESP8266:
Скрипт
Вот скрипт, который изменяет яркость светодиода с течением времени, увеличивая скважность. Этот скрипт работает как с ESP32, так и с ESP8266.
# Полная документация проекта на https://RandomNerdTutorials.com/micropython-programming-with-esp32-and-esp8266/
from machine import Pin, PWM
from time import sleep
frequency = 5000
led = PWM(Pin(5), frequency)
while True:
for duty_cycle in range(0, 1024):
led.duty(duty_cycle)
sleep(0.005)
Как работает код
Для создания ШИМ-пина импортируйте класс PWM в дополнение к классу Pin из модуля machine.
from machine import Pin, PWM
Затем создайте объект PWM с именем led.
led = PWM(Pin(5), frequency)
Для создания объекта PWM необходимо передать в качестве параметров: пин, к которому он подключён, частоту сигнала и скважность.
Частота: Частота может быть значением от 0 до 78125. Частота 5000 Гц может использоваться для управления яркостью светодиода.
Скважность (Duty cycle): Скважность может быть значением от 0 до 1023. При этом 1023 соответствует 100% скважности (полная яркость), а 0 соответствует 0% скважности (светодиод не горит).
Мы установим скважность в цикле while, поэтому нам не нужно передавать параметр скважности при создании объекта. Если вы не зададите скважность при создании объекта PWM, по умолчанию она будет равна 0.
Для установки скважности используйте метод duty() объекта PWM и передайте значение скважности в качестве аргумента:
led.duty(duty_cycle)
Внутри цикла while мы создаём цикл for, который увеличивает скважность на 1 в каждой итерации с интервалом 5 мс между каждым изменением.
for duty_cycle in range(0, 1024):
led.duty(duty_cycle)
sleep(0.005)
Функция range() имеет следующий синтаксис:
range(start, stop, step)
Start: число, указывающее, с какой позиции начинать. Мы хотим начать со скважности 0;
Stop: число, указывающее, на какой позиции остановиться, не включая это значение. Максимальная скважность — 1023, поскольку мы увеличиваем на 1 в каждом цикле, последнее значение должно быть 1023+1. Поэтому мы используем 1024.
Step: целое число, определяющее шаг приращения. По умолчанию шаг равен 1.
В каждой итерации цикла for мы устанавливаем скважность светодиода в текущее значение переменной duty_cycle:
led.duty(duty_cycle)
После этого переменная duty_cycle увеличивается на 1.
Демонстрация
Сохраните код на плату ESP с помощью Thonny IDE или uPyCraft IDE. Светодиод, подключённый к GPIO 5, должен постепенно увеличивать яркость.
Заключение
Надеемся, что это руководство по MicroPython было для вас полезным. Если вы хотите узнать больше о MicroPython, обязательно ознакомьтесь с электронной книгой: MicroPython Programming with ESP32 and ESP8266.
Если вам нравится MicroPython, вам также могут быть интересны:
Спасибо за чтение.