Общие сведения
В этом уроке мы научимся управлять светодиодом, подключённым к одному из выводов Pi Pico.
Для этого урока нам понадобится:
Для работы данных примеров в Pi Pico необходимо загрузить прошивку MicroPython и установить Thonny IDE, о том как это сделать можно прочитать в этой статье https://lesson.iarduino.ru/page/pi-pico-python-ide
Подключение
Подключим Trema-модуль Светодиод согласно таблице
Вывод модуля | Вывод Pi Pico |
---|---|
Vcc | 3V3(OUT) |
GND | GND |
S | GP15 |
Включаем светодиод
Подключим Pi Pico к ПК и откроем Thonny IDE.
Первое что мы сделаем, это рассмотрим как работают выводы Pi Pico и просто включим светодиод. Сделаем это в интерактивном режиме - код вводится построчно в окно оболочки, в конце каждой строки нажимаем ввод.
Сначала подключим класс Pin
для работы с выводами из
модуля machine
.
>>> from machine import Pin
Далее создадим объект класса Pin
, назовём его
led
и передадим в конструктор класса номер вывода и режим
его работы. Название - "GP15", это вывод к которому мы подключили
светодиод и режим работы Pin.OUT
- выход. То есть вывод
платы "GP15" становиться выводом с низким импедансом, из-за чего он
может работать как контролируемый источник тока. Очень важно соблюдать
максимальные характеристики вывода и не подключать к нему излишнюю
нагрузку. Отдельно взятый вывод Pi Pico может давать не более 50 мА, а
наш светодиод потребляет не больше 20 мА, поэтому в данном случае
нагрузка в допустимых пределах.
>>> led = Pin("GP15", mode=Pin.OUT)
Объект led
создан, попробуем им управлять:
>>> led.on()
Поздравляю, Вы включили светодиод! Теперь попробуем его выключить и переключить:
>>> led.off() >>> led.toggle()
Метод off()
объекта led
выключил наш
светодиод, а метод toggle()
обратно включил его.
toggle()
переключает состояние светодиода на
противоположное текущему, если вызвать этот метод ещё раз, то светодиод
выключится.
Теперь попробуем мигать светодиодом прямо из оболочки, для этого нам понадобятся функции времени, введём следующее:
>>> from time import sleep
Мы подключили в оболочку функцию сна. Если сейчас ввести, например,
sleep(2)
и нажать enter
, то оболочка не будет
отвечать на Ваши запросы в течении двух секунд, попробуйте:
>>> sleep(2)
Оболочка убрала значок командной строки >>>
на
две секунды и потом снова показала. Выполнение команды
sleep(2)
заняло две секунды процессорного времени, в
которое процессор не занимался ничем, кроме этой команды (по крайней
мере в этом потоке выполнения, о потоках мы поговорим позже)
Попробуем включить светодиод на две секунды, введём команды в одну строчку, разделяя их точкой с запятой:
>>> led.on(); sleep(2); led.off()
Теперь мы знаем как включить светодиод на две секунды, попробуем
делать это циклично, скажем на секунду включать и на секунду выключать,
бесконечно. Здесь нам поможет оператор цикла
while выражение:
. while
работает следующим
образом: код который находится в теле цикла будет выполняться до тех
пор, пока значение выражения является истинным. В данном случае мы
говорим, что выражение всегда истинно (значение True) заставляя цикл
выполнять операции в его теле бесконечно:
>>> while True: led.on() sleep(1) led.off() sleep(1)
После ввода последней команды sleep
необходимо нажать
enter
дважды, чтобы код заработал.
Что ж, светодиод мигает, но как теперь вводить команды? Для того чтобы выйти из цикла вручную есть несколько способов:
- нажать на клавиатуре <CTRL> + <C>
- нажать на кнопку "Стоп" в верхнем меню Thonny IDE
- выдернуть шнур питания контроллера и снова подключить его (звучит варварски, но поверьте, иногда это единственное решение в совокупности со стиранием flash-памяти контроллера, особенно когда речь зайдёт про асинхронные операции, мы к этому вернёмся в последующих уроках)
Теперь мы знаем как заставить светодиод мигать циклически, но что
если мы хотим не работать с интерактивной оболочкой, а написать весь код
и потом как-то проиграть его? В таком случае нам следует вводить код не
во вкладку оболочки, а в текстовый редактор выше, где во вкладке
написано <безымянный>
:
Чтобы запустить код, написанный в редакторе нужно нажать "Запустить текущую программу" (зелёный круг с белым треугольником). Введём текст следующего примера в текстовый редактор...
Управление яркостью
Иногда необходимо чтобы светодиод не просто светился, но светился с заданной яркостью, для таких случаев можно использовать ШИМ (Широтно Импульсная Модуляция). Более подробно про ШИМ мы расскажем в следующих уроках, а пока этот пример будет плавно менять яркость светодиода.
# Подключаем модуль для работы с выводами и ШИМ from machine import Pin, PWM # Подключаем функцию сна (задержки) from time import sleep # Создаём объект ШИМ, передавая в конструктор объект вывода, к которому подключён светодиод led = PWM(Pin("GP15")) # Устанавливаем частоту ШИМ led.freq(1000) # Включаем ШИМ led.init() # Бесконечный цикл while True: # Устанавливаем нарастание ШИМ от 0% до 100% (шестнадцатибитное число) for duty in range(0, 65000, 1000): led.duty_u16(duty) sleep(.01) # Устанавливаем спадание ШИМ от 100% до 0 (шестнадцатибитное число) for duty in range(64000, 0 ,-1000): led.duty_u16(duty) sleep(.01)
Обсуждение