КОРЗИНА
магазина
8 (499) 500-14-56 | ПН. - ПТ. 12:00-18:00
ЛЕСНОРЯДСКИЙ ПЕРЕУЛОК, 18С2, БЦ "ДМ-ПРЕСС"

Raspberry Pi Pico: способы управления светодиодом на MicroPython





Общие сведения

В этом уроке мы научимся управлять светодиодом, подключённым к одному из выводов 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)

Ссылки




Обсуждение

Гарантии и возврат Используя сайт Вы соглашаетесь с условями