Управление цифровыми выходами Raspberry Pi с помощью Python (светодиод)
В этом руководстве вы узнаете, как настроить GPIO Raspberry Pi в качестве цифровых выходов и управлять ими с помощью программы на Python. В качестве примера мы покажем, как управлять светодиодом, подключённым к одному из GPIO Raspberry Pi, используя интерфейс gpiozero.
В этом руководстве мы рассмотрим следующие основные темы:
Предварительные требования
Прежде чем продолжить работу с этим руководством, проверьте следующие предварительные требования.
Ознакомьтесь с платой Raspberry Pi — если вы ещё не знакомы с Raspberry Pi, вы можете прочитать наше :doc:`руководство по началу работы с Raspberry Pi </raspberry/rnt/getting-started-with-raspberry-pi/index>`_.
Вы должны уметь запускать и создавать файлы Python на Raspberry Pi. Мы предпочитаем программировать Raspberry Pi удалённо через SSH, используя расширение в VS Code. У нас есть подробное руководство на эту тему: :doc:`Программирование Raspberry Pi удалённо с помощью VS Code (Remote-SSH) </raspberry/rnt/raspberry-pi-remote-ssh-vs-code/index>`_.
Знакомство с GPIO Raspberry Pi
GPIO расшифровывается как General Purpose Input Output (контакты общего назначения ввода-вывода), и они позволяют подключать и управлять электронным оборудованием, таким как светодиоды, двигатели и датчики, к вашему Raspberry Pi.
Это означает, что они могут использоваться как для чтения, так и для отправки информации, позволяя вашему Pi взаимодействовать с внешним миром.
Большинство моделей плат Raspberry Pi имеют двойной ряд из 40 контактов GPIO. Расположение контактов обычно одинаково для большинства моделей Raspberry Pi.
В этом руководстве мы рассмотрим, как настроить GPIO Raspberry Pi в качестве выходов для управления светодиодом или любым другим исполнительным устройством, которое можно контролировать с помощью сигналов HIGH (3,3 В) и LOW (0 В).
Нумерация GPIO Raspberry Pi
Существует два различных способа обращения к контакту GPIO: по его имени (известному как нумерация GPIO или нумерация Broadcom) или по соответствующему физическому номеру контакта (который соответствует физическому расположению контакта на разъёме).
Например, GPIO 25 соответствует контакту 22 (см. изображение ниже). В этом руководстве мы будем обращаться к контактам GPIO по их нумерации GPIO (нумерация Broadcom).
Чтобы узнать больше о GPIO Raspberry Pi, ознакомьтесь с этим руководством: :doc:`Руководство по распиновке Raspberry Pi: как использовать GPIO Raspberry Pi? </raspberry/rnt/raspberry-pi-pinout-gpios/index>`_
Контакты GPIO можно установить в состояние HIGH, которое выдаёт 3,3 В и включает компонент, или LOW, которое выдаёт 0 В и выключает компонент.
Подключение схемы
Подключите светодиод к одному из GPIO Raspberry Pi. Мы подключим один светодиод к GPIO 14 (контакт 8). Вы можете использовать любые другие контакты, кроме GPIO 0 и GPIO 1.
Вот список необходимых компонентов:
Плата Raspberry Pi — читайте Лучшие стартовые наборы Raspberry Pi
Резистор 220 Ом (или аналогичный)
Вы можете воспользоваться вышеуказанными ссылками или перейти непосредственно на MakerAdvisor.com/tools , чтобы найти все детали для ваших проектов по лучшей цене!
Управление выходами Raspberry Pi с помощью gpiozero
Библиотека gpiozero предоставляет набор интерфейсов для повседневных компонентов, таких как светодиоды, кнопки, потенциометры, датчики и многое другое. Таким образом, вместо настройки свойств GPIO для управления светодиодом, gpiozero предоставляет интерфейс LED с методами, которые полезны для управления светодиодами. Кроме того, вы также можете использовать интерфейс DigitalOutputDevice, который можно применять для управления цифровыми выходами в целом (включая светодиоды). Давайте посмотрим, как это работает.
Библиотека gpiozero должна быть уже установлена, если вы используете Raspberry Pi OS — если нет, вы можете выполнить следующую команду:
python3 -m pip gpiozero
Создайте новый файл Python на Raspberry Pi с именем blinking_led.py и скопируйте следующий код.
# Complete Project Details: https://RandomNerdTutorials.com/projects-raspberry-pi/
from gpiozero import LED
from time import sleep
led = LED(14)
# blinking an LED forever
while True:
#set the led ON for one second
led.on()
sleep(1)
#set the led ON for one second
led.off()
sleep(1)
Как работает код
Продолжайте чтение, чтобы узнать, как работает код.
Импорт библиотек
Сначала вы импортируете компонент LED из библиотеки gpiozero для управления GPIO, к которому подключён светодиод. Затем вам также нужно импортировать функцию sleep() из модуля time для создания задержек в коде.
from gpiozero import LED
from time import sleep
Вместо компонента LED вы можете использовать компонент DigitalOutputDevice, который работает точно так же.
from gpiozero import DigitalOutputDevice
Объявление светодиода
Далее вы создаёте объект LED с именем led, который ссылается на GPIO 14 — это GPIO, к которому подключён светодиод. Измените номер, если вы используете другой GPIO.
led = LED(14)
Когда вы создаёте и используете этот объект LED, ваша программа знает, что GPIO 14 является выходом, который можно установить в состояние HIGH или LOW. После этого объявления вы можете использовать led для обращения к вашему GPIO 14. Вы можете использовать этот объект LED для управления другими компонентами, помимо светодиодов, при условии, что они могут управляться сигналами HIGH (3,3 В) и LOW (0 В).
Примечание: если вы хотите использовать вместо этого компонент DigitalOutputDevice, объявление будет следующим:
led = DigitalOutputDevice(14)
Цикл While
Затем, чтобы светодиод мигал бесконечно, мы создаём цикл while, который всегда True — код будет выполняться бесконечно, пока вы не остановите программу. Строки после объявления цикла имеют отступ, что сообщает Python, что это содержимое цикла, которое должно выполняться, пока условие while выполняется.
# blinking an LED forever
while True:
#set the led ON for one second
led.on()
sleep(1)
#set the led ON for one second
led.off()
sleep(1)
Управление цифровым выходом
Объект LED имеет два метода, которые вы можете использовать для включения и выключения GPIO — методы on() и off(). Вы можете использовать их следующим образом:
led.on()
led.off()
Инструкция led.on() включает GPIO 14, а led.off() выключает GPIO 14. Между каждым состоянием светодиода есть пауза в одну секунду с использованием функции sleep(), создающая эффект мигания. Функция sleep() принимает в качестве аргумента время в секундах.
sleep(1)
Подведём итог…
1) Для управления цифровым выходом Raspberry Pi вы можете использовать интерфейс LED или DigitalOutputDevice библиотеки gpiozero. Сначала его нужно импортировать следующим образом:
from gpiozero import LED
или так:
from gpiozero import DigitalOutputDevice
2) Определите GPIO, которым вы хотите управлять. Используя интерфейс LED:
led = LED(GPIO_NUMBER_OF_YOUR_CHOICE)
Или если вы используете интерфейс DigitalOutputDevice:
led = DigitalOutputDevice(GPIO_NUMBER_OF_YOUR_CHOICE)
3) Затем используйте методы on() и off() для включения и выключения GPIO.
led.on()
led.off()
Демонстрация
Сохраните ваш файл Python. Затем запустите его на Raspberry Pi. Выполните следующую команду в каталоге вашего файла проекта (используйте имя вашего файла):
python blinking_led.py
Светодиод, подключённый к GPIO 14, должен мигать.
Вы можете остановить выполнение программы, нажав CTRL + C.
Другие полезные методы
Интерфейсы LED и DigitalOutputDevice предоставляют другие полезные дополнительные методы.
toggle()
Метод toggle() меняет текущее состояние GPIO на противоположное. Вот альтернативный скрипт для мигания светодиодом с использованием метода toggle().
# Complete Project Details: https://RandomNerdTutorials.com/projects-raspberry-pi/
from gpiozero import LED
from time import sleep
led = LED(14)
# blinking an LED forever
while True:
led.toggle()
sleep(1)
blink()
Метод blink() мигает светодиодом, включая и выключая его. Вы можете задать время включения и выключения, а также количество раз, которое светодиод будет мигать. Вот скрипт мигания светодиодом с использованием метода blink().
# Complete Project Details: https://RandomNerdTutorials.com/projects-raspberry-pi/
from gpiozero import LED
from signal import pause
led = LED(14)
# blinking an LED forever
led.blink()
pause()
Вы можете передать следующие параметры методу blink():
blink(on_time=1, off_time=1, n=None, background=True)
on_time: количество секунд, в течение которых светодиод будет включён. По умолчанию — одна секунда.
off_time: количество секунд, в течение которых светодиод будет выключен. По умолчанию — одна секунда.
n: количество миганий. Установите в None для бесконечного выполнения. None — значение по умолчанию.
background: если True (по умолчанию), запускает фоновый поток для продолжения мигания и немедленно возвращает управление.
Заключение
В этом руководстве вы узнали, как настроить GPIO Raspberry Pi в качестве цифровых выходов и включать и выключать их с помощью интерфейсов LED или DigitalOutputDevice библиотеки gpiozero. Мы также рассмотрели три различных способа мигания светодиодом с использованием разных методов.
Мы надеемся, что это руководство было для вас полезным. Если вы новичок в Raspberry Pi, вы можете начать со следующих руководств:
:doc:`Начало работы с Raspberry Pi </raspberry/rnt/getting-started-with-raspberry-pi/index>`_
:doc:`Руководство по распиновке Raspberry Pi </raspberry/rnt/raspberry-pi-pinout-gpios/index>`_
Вы можете ознакомиться со всеми нашими проектами для Raspberry Pi по следующей ссылке: