Raspberry Pi — это больше, чем просто крошечный компьютер. Это мощная плата, которая позволяет делать очень многое с помощью контактов GPIO. Здесь мы покажем вам, как сделать мигающие светодиоды с помощью Raspberry Pi.
Читайте также: Как управлять Raspberry Pi через Windows через SSH
Что заставляет светодиоды мигать?
Когда вы посмотрите на верхнюю часть Raspberry Pi, вы обнаружите около 40 металлических контактов, торчащих из печатной платы. Если у вас Raspberry Zero, вероятно, т
Contents
Что заставляет светодиоды мигать?
тов разъема. В любом случае они называются контактами GPIO (вход/выход общего назначения).Каждый вывод GPIO в любой момент времени имеет один из двух режимов: ВЫСОКИЙ и НИЗКИЙ. Для Характеристики распиновки Raspberry Pi вывод, заряженный на 3,3 В, считается ВЫСОКИМ или «логической 1», а все, что ниже 2,5 В, считается НИЗКИМ или «логическим 0». Говорят, что плата, основанная на напряжении 3,3 В для высокого и низкого выходов, имеет «логику 3,3 В».
Когда вы подключаете светодиод между контактом HIGH и контактом GND, вы по сути создаете полную цепь. Светодиод должен загореться из-за проходящего электричества.
Иногда светодиоды дымят, когда через них проходит слишком большой ток. Чтобы этого не произошло, можно добавить резистор. Неважно, находится ли он на стороне анода или катода — любая сторона должна уменьшать проходящий ток.
Читайте также: Как запрограммировать Arduino с помощью Raspberry Pi
GPIO и другие контакты
Давайте внесем ясность: не все эти металлические контакты считаются GPIO. Они являются GPIO только в том случае, если их можно запрограммировать на высокий или низкий уровень — отсюда и термин «Вход/Выход». Для Raspberry PI также имеются контакты для питания (3,3 В, 5 В и GND) и работы с EEPROM (ID_SD и ID_SC).
На этот раз вам не придется думать обо всех остальных контактах, кроме GND и одного контакта GPIO.
Программирование контактов GPIO
Как сообщить каждому выводу GPIO, что делать? На самом базовом уровне вам придется создавать команды в машинном коде. Новичкам это будет слишком сложно.
Вместо этого для Raspberry Pi вы можете использовать Питон или С++ , которые затем компилируются в машинный код.
Для этого конкретного проекта мы используем Python, так как его проще использовать.
Читайте также: Как установить Windows 11 на Raspberry Pi 4
Что вам нужно
- Любая модель Raspberry Pi, кроме Pico (предпочтительно Raspberry Pi 3 Model B+, как в этом примере, но подойдет любая), установленная с помощью ОС Малины Пи .
- Монитор
GPIO и другие контакты
лавиатура - Зарядное устройство для телефона (для питания Raspberry Pi)
- Маленький светодиод
- Резистор сопротивлением 250 Ом (может быть любого номинала, близкого к этому)
- Беспаечный макет
- x2 перемычки «папа-гнездо» (или «папа-папа», если у вас есть головной убор)
Как сделать мигающие светодиоды
Давайте сделаем это шаг за шагом и заставим один светодиод мигать самостоятельно.
- Откройте терминал и введите
sudo apt-get install python3-rpi.gpio
, чтобы установить модуль RPi.GPIO для Python 3.
- Откройте текстовый редактор и введите этот код:
import RPI.GPIO as GPIO from time import sleep GPIO.setwarnings(False) GPIO.setmode(GPIO.BOARD) GPIO.setup(7, GPIO.OUT, initial=GPIO.LOW) while True: GPIO.output(7, GPIO.HIGH) print("LED on") sleep(1) GPIO.output(7, GPIO.LOW) print("LED off") sleep(1)
- Сохраните его где-нибудь в папке. Им
Что вам нужно
ть.py. НА моем Raspberry Pi я назвал его «rpi-blink.py», чтобы его было легче найти.
- Выключите Raspberry Pi и отключите от него все источники питания.
- Чтобы приступить к созданию схемы, подключите светодиод так, чтобы на катоде или аноде был резистор, затем направьте катодную сторону на контакт 7, а анодную сторону на контакт 9 (GND).
Совет. чтобы определить номер контакта, держите Raspberry Pi так, чтобы контакты GPIO находились справа. Левый верхний контакт — это контакт 1, верхний правый — контакт 2. Тот, что под контактом 1, — это контакт 3, затем справа от него — контакт 4 и так далее.
<Как сделать мигающие светодиоды
тобы мы могли запустить скрипт Python. Откройте терминал и используйтеcd
, чтобы перейти в папку с файлом Python. Тип:
python3 rpi-blink.py
чтобы светодиод мигал.
Альтернатива, если у вас есть Thonny Python IDE, нажмите кнопку «Запустить текущий скрипт», чтобы запустить его прямо из IDE.
- Чтобы остановить его, нажмите Ctrl+ Cв терминале. Но если вы используете Thonny Python IDE, просто закройте редактор.
Читайте также: 10 полезных острот Python, которые вы должны знать
Как работает код
Есть две вещи, которые заставляют его работать: код и схема. Мы начинаем с кода и разрезаем его на три части:
- Команды импорта
- Команды настройки
- Зацикленные команды
На практике полезно представлять код как небольшие функции, сгруппированные вместе для создания более крупных функций.
Команды импорта
Обычно Python не позволяет так просто программировать контакты GPIO. За кулисами происходит масса вещей. Хорошей новостью является то, что вы можете импортировать код, который обрабатывает все эти неприятные вещи.
Взгляните на строки 1 и 2:
import RPI.GPIO as GPIO from time import sleep
Это пара строк, которые импортируют код из так называемого «модуля Python».
import RPI.GPIO as GPIO
позволяет импортировать содержимое модуля RPI.GPIO и использовать ключевое слово GPIO
для вызова функции, связанной с RPI.GPIO
..
С другой стороны, from time import sleep
позволяет импортировать функцию sleep()
из встроенного модуля времени Python. Это позволяет задержать следующую строку кода на заданное количество секунд.
Команды настройки
Некоторый код необходимо «настроить» или определить таким образом, поскольку он используется другим кодом для выполнения сложной логики. Мы будем вызывать эти команды настройки.
В отличие от команд импорта, команды настройки не «импортируют» код из внешних модулей. Они импортируют их из уже импортированных вами модулей.
Например, GPIO.setwarnings(False)
импортирует функцию .setwarnings()
из модуля RPI.GPIO
, который ранее был определен как GPIO
. Эта функция останавливает предупреждение о триггере при запуске кода. По умолчанию установлено значение True
.
Чтобы объяснить два других, мы продолжим с GPIO.setmode(GPIO.BOARD)
. Это сообщит RPI.GPIO
, какую распиновку вы собираетесь использовать. Существует два типа: BOARD и BCM. Распиновка BOARD позволяет выбирать контакты по их номерам. Между тем, распиновка BCM основана на обозначении канала Broadcomm SOC. Короче говоря, BOARD проще в использовании, потому что он всегда один и тот же, независимо от того, какую модель Raspberry Pi вы используете. С другой стороны, BCM, как правило, отличается от модели к модели.
Наконец, у нас есть GPIO.setup(7, GPIO.OUT, initial=GPIO.LOW)
, который использует функцию .setup()
, которая запрашивает три вещи: номер контакта, его обозначение и его начальное значение. Номер контакта, который мы здесь используем, — номер контакта 7. Мы должны установить его в качестве выходного контакта и убедиться, что он начинается с LOW
. Без этого Raspberry Pi никогда не узнает, что делать с контактом 7.
Зацикленные команды
Это самое интересное. Зацикленные команды позволяют вам приказывать Raspberry Pi что-то делать. Мы начали этот цикл с while True:
, который повторяет следующие строки кода бесконечно.
В цикле было три функции: GPIO.output()
, print()
и sleep()
.
GPIO.output()
берет выходной контакт и устанавливает для него значениеHIGH
илиLOW
. Если вы задумывались об изменении того, какой контакт использовать на Raspberry Pi, вам следовало бы изменить7
на номер контакта по вашему выбору.print()
заставляет его печатать что-то на консоли.Как работает код
ло или переменную, содержащую предыдущие два.sleep()
приостанавливает всю программу на определенное количество секунд. Используйте число меньше 1, чтобы сделать паузу менее секунды.
Трасса
Теперь, когда вы знаете, как работает код, давайте взглянем на схему. Код создает цепь, соединяя контакт 7 с GND. Когда контакт 7 подключен к HIGH
, он выдает напряжение 3,3 В, которое проходит через резистор и светодиод, а затем поступает на землю. Это становится целостной цепью, и именно поэтому загорается светодио
Команды импорта
g="async" src="https://saintist.ru/wp-content/uploads/2024/05/lt-spice-schematic-raspberry-pi-pin-7-on-and-off-1.jpg" alt="Схема Lt Spice Raspberry Pi Pin 7 вкл. и выкл.">Но что происходит, когда на контакте 7 низкий уровень? Напряжение 3,3 В снижается примерно до 0 В. Таким образом, через светодиод не проходит электричество, поэтому он не загорается. Вы можете думать о контакте 7 как о своего рода переключателе, поскольку он включает или выключает цепь.
Давайте заставим мигать больше светодиодов!
Теперь, когда вы знаете, как все работает, давайте немного изменим наш код, чтобы он работал с двумя светодиодами.
Для этого вам просто нужно добавить еще два светодиода любого цвета и еще два резистора сопротивлением 250 Ом.
- Снова откройте редактор кода и вставьте этот код:
import RPI.GPIO as GPIO from time import sleep GPIO.setwarnings(False) GPIO.setmode(GPIO.BOARD) GPIO.setup(7, GPIO.OUT, initial=GPIO.LOW) GPIO.setup(12, GPIO.OUTКоманды настройки
n>=GPIO.HIGH) GPIO.setup(37, GPIO.OUT, initial=GPIO.LOW) while True: GPIO.output(7, GPIO.HIGH) GPIO.output(12, GPIO.LOW) print("LED on @ pin 7") print("LED off @ pin 12") sleep(1) GPIO.output(7, GPIO.LOW) GPIO.output(12, GPIO.HIGH) print("LED off @ pin 7") print("LED on @ pin 12") sleep(1) if x == 1: GPIO.output(37, GPIO.HIGH) print("LED on @ pin 37") x = 0 elif x == 0: GPIO.output(37, GPIO.LOW) print("LED off @ pin 37") x = 1 else: print("Logic Error") sleep(1)
- Сохраните файл и выключите Raspberry Pi.
- Чтобы подключить схему, подключите каждый имеющийся у вас светодиод к резистору последовательно, а затем подключите катодную сторону к Raspberry Pi. Один должен быть для контакта 7, другой для контакта 12 и последний для контакта 37. Сторона анода должна быть подключена к GND. Рядом с каждым из этих контактов есть контакт GND. Это должны быть контакты 9, 20 и 39.
Совет: если у вас закончилась перемычка «папа-гнездо», можно прикрепить провод «папа-папа» к перемычке «папа-гнездо», чтобы образовать более длинный провод «папа-гнездо». -гнездовая перемычка.
Читайте также: Как использовать Python для базового системного администрирования Linux и сетевых задач
Часто задаваемые вопросы
Почему мой светодиод остается открытым, когда я останавливаю сценарий?
Когда Raspberry Pi читает сценарий Python, он читает строку перед выполнением команды. Вероятно, вы остановили его сразу после того, как он прочитал строку GPIO.output(7, GPIO.HIGH)
, поэтому он не смог сначала перевести вывод в состояние LOW. Вы можете оставить все как есть, так как при следующей перезагрузке оно вернется в состояние LOW. Альтернативно, создайте другой скрипт Python, который переводит вывод в состояние LOW сразу после запуска.
Я поместил светодиод на правый контакт, но он вообще не загорается. Почему?
Причин может быть две: либо у вас сломался свет
Трасса
поставили катод с противоположной стороны. Попробуйте сначала перевернуть контакты светодиода.Безопасно ли размещать светодиод наоборот?
Да. Вы можете разместить его напротив, и ток просто непройдет. Это особенность диодов – даже светоизлучающихдиодов – они пропускают электричество с одной стороны, а не с другой.
Безопасно ли менять положение светодиода, когда Raspberry Pi включен?
Если просто повернуть светодиод в обратную сторону, то ничего страшного, и никакого вреда в этом нет. Но если вы собираетесь разместить светодиод повсюду, есть вероятность, что вы замкнете контакт 5 В на контакт GPIO. Это сломает вашу доску.