Как сделать мигающие светодиоды с помощью Raspberry Pi

Raspberry Pi — это не просто крошечный компьютер. Это мощная плата, которая позволяет делать множество вещей с ее GPIO-выводами. Здесь мы покажем вам, как сделать мигающие светодиоды с помощью Raspberry Pi.
Содержание
- Что заставляет светодиоды мигать?
- Что вам нужно
- Как сделать мигающие светодиоды
- Как работает код
- Давайте заставим мигать больше светодиодов!
- Часто задаваемые вопросы
Также читайте: Как управлять вашим Raspberry Pi через Windows с помощью SSH
Что заставляет светодиоды мигать?
Когда вы посмотрите на верхнюю часть вашего Raspberry Pi, вы найдете около 40 металлических выводов, выступающих из печатной платы. Если у вас Raspberry Zero, вероятно, есть круглые отверстия для пайки заголовочных выводов. В любом случае, они называются GPIO-выводами (выводы общего назначения).

Каждый GPIO-вывод может находиться в одном из двух режимов в любой момент времени: HIGH и LOW. Для спецификаций Raspberry Pi, вывод, заряженный на 3.3 В, считается HIGH или “логической 1”, в то время как все, что ниже примерно 2.5 В, считается LOW или “логической 0”. Плата, основанная на 3.3 В для высоких и низких выходов, считается работающей на “логике 3.3 В”.
Когда вы подключаете светодиод между выводом на HIGH и выводом GND, вы фактически создаете замкнутую цепь. Светодиод должен загореться из-за проходящего электричества.

Иногда ваши светодиоды могут сгореть, если через них проходит слишком много тока. Чтобы этого избежать, вы можете добавить резистор. Не имеет значения, на анодной или катодной стороне — любая сторона должна уменьшить проходящий ток.
Также читайте: Как программировать Arduino с помощью Raspberry Pi
GPIO и другие выводы
Давайте проясним, так как не все металлические выводы считаются GPIO. Они являются GPIO только в том случае, если их можно запрограммировать на HIGH или LOW — отсюда и термин “Ввод / Вывод”. Для Raspberry Pi также есть выводы, предназначенные для питания (3.3 В, 5 В и GND) и работы с EEPROM (ID_SD и ID_SC).
На этот раз вам не нужно думать обо всех этих других выводах, кроме GND и одного GPIO-вывода.
Программирование GPIO-выводов
Как вы говорите каждому GPIO-выводу, что делать? На самом базовом уровне вам придется создавать команды на машинном коде. Это будет немного слишком сложно для новичков.
Вместо этого для Raspberry Pi вы можете использовать Python или C++, которые затем компилируются в машинный код.
Для этого конкретного проекта мы используем Python, так как это проще.
Также читайте: Как установить Windows 11 на Raspberry Pi 4
Что вам нужно
- Любая модель Raspberry Pi, кроме Pico (предпочтительно Raspberry Pi 3 Model B+, как в этом примере, но подойдет любая), установленная с Raspberry Pi OS.
- HDMI монитор и кабель
- Мышь и клавиатура
- Зарядное устройство для телефона (для питания Raspberry Pi)
- Маленький светодиод
- Резистор 250Ω (можно использовать любое значение, близкое к этому)
- Безпайочный макет
- x2 провода-переходники male-to-female (или male-to-male, если у вас есть заголовок)
Как сделать мигающие светодиоды
Давайте сделаем это шаг за шагом и заставим один светодиод мигать самостоятельно.
- Откройте терминал и введите
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("Светодиод включен")
sleep(1)
GPIO.output(7, GPIO.LOW)
print("Светодиод выключен")
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 В, которые проходят через резистор и светодиод, а затем попадают в GND. Это становится замкнутой цепью и именно поэтому светодиод загорается.

Но что происходит, когда вывод 7 находится на LOW? 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, initial=GPIO.HIGH)
GPIO.setup(37, GPIO.OUT, initial=GPIO.LOW)
while True:
GPIO.output(7, GPIO.HIGH)
GPIO.output(12, GPIO.LOW)
print("Светодиод включен на выводе 7")
print("Светодиод выключен на выводе 12")
sleep(1)
GPIO.output(7, GPIO.LOW)
GPIO.output(12, GPIO.HIGH)
print("Светодиод выключен на выводе 7")
print("Светодиод включен на выводе 12")
sleep(1)
if x == 1:
GPIO.output(37, GPIO.HIGH)
print("Светодиод включен на выводе 37")
x = 0
elif x == 0:
GPIO.output(37, GPIO.LOW)
print("Светодиод выключен на выводе 37")
x = 1
else:
print("Логическая ошибка")
sleep(1)- Сохраните, затем выключите Raspberry Pi.
- Чтобы подключить цепь, для каждого светодиода, который у вас есть, подключите его к резистору последовательно, затем подключите катодную сторону к Raspberry Pi. Должен быть один для вывода 7, другой для вывода 12 и последний для вывода 37. Анодная сторона должна быть подключена к GND. У каждого из этих выводов есть рядом вывод GND. Это должны быть выводы 9, 20 и 39.

Совет: если у вас закончились провода-переходники male-to-female, вы можете соединить male-to-male с female-to-female, чтобы сформировать более длинный провод male-to-female.

- Как только вы закончите, включите Raspberry Pi и повторите шаг 6, чтобы запустить скрипт Python.

Также читайте: Как использовать Python для базового администрирования системы Linux и сетевых задач
Часто задаваемые вопросы
Почему мой светодиод остается включенным, когда я останавливаю скрипт?
Когда Raspberry Pi читает Python-скрипт, он читает строку перед выполнением команды. Вы, вероятно, остановили его сразу после того, как он прочитал строку GPIO.output(7, GPIO.HIGH), поэтому он не смог сначала перевести вывод в LOW. Вы можете оставить это как есть, так как он вернется в LOW в следующий раз, когда вы перезагрузите. В качестве альтернативы, создайте другой Python-скрипт, который переводит вывод в LOW, как только он запускается.
Я разместил свой светодиод на правильном выводе, но он вообще не загорается. Почему?
Есть две возможные причины: либо ваш светодиод сломан, либо вы подключили катод с противоположной стороны. Попробуйте сначала поменять местами выводы светодиода.
Безопасно ли размещать светодиод наоборот?
Да. Вы можете разместить его наоборот, и ток просто не пройдет через него. Это особая черта диодов — даже светодиодов — они позволяют электричеству проходить с одной стороны и не с другой.
Безопасно ли перемещать светодиод, пока Raspberry Pi включен?
Если вы просто поворачиваете светодиод наоборот, то это нормально, и в этом нет вреда. Но если вы собираетесь разместить светодиод везде, есть вероятность, что вы можете замкнуть 5 В на GPIO-вывод. Это сломает вашу плату.