Мигающий светодиод с использованием GPIO на Raspberry Pi
Руководство: мигающий светодиод с использованием выхода GPIO
В этом примере мы рассмотрим, как собрать очень простую схему, состоящую из светодиода и резистора, подключённых к порту GPIO вашего Raspberry Pi. Это простое упражнение продемонстрирует визуальное подтверждение того, что порт GPIO делает именно то, что ваша программа на Python ему говорит.
Для этого упражнения потребуется всего несколько простых компонентов, доступных в ModMyPi:
Средняя макетная плата (Breadboard)
Соединительные провода «папа-мама» (Male to Female Jumper Wires)
Светодиод (LED — Light Emitting Diode) любого цвета
Резистор 270 Ом или выше
Шаг 1 — Сборка схемы
Мы начнём со сборки схемы на макетной плате. Схема показана ниже:
Предупреждение
При подключении к контактам GPIO на вашем Raspberry Pi необходимо соблюдать осторожность, так как подключение неправильных контактов может навсегда вывести из строя ваш Pi. Пожалуйста, используйте шпаргалку по GPIO и дважды проверьте всё перед включением. Каждый контакт GPIO будет обозначен по имени и физическому расположению. Например, GPIO P17 физически расположен на Pin 11, обозначается: GPIO P17 [Pin 11]. Несоответствия связаны с тем, что имена контактов определяются по названиям каналов на микросхеме Broadcom, а не по их физическому расположению.
Вставьте светодиод так, чтобы анод (более длинная ножка) находился в одном ряду макетной платы, а катод (более короткая ножка) — в другом.
Вставьте один конец резистора в тот же ряд, что и катод светодиода, а другой конец — в другой ряд.
Подключите соединительный провод от того же ряда, что и анод светодиода (длинная ножка), к GPIO P17 [Pin 11] на порту GPIO вашего Raspberry.
Подключите другой соединительный провод от ряда, содержащего только одну ножку резистора, к GPIO GND [Pin 6] на вашем порту GPIO.
Когда всё будет готово, ваша схема должна выглядеть примерно так, как показано ниже:
По умолчанию выходные контакты на портах GPIO выключены, поэтому светодиод не загорится. Однако вы можете проверить, правильно ли собрана ваша схема, переместив провод из GPIO P17 [Pin 11] в GPIO 3.3V [Pin 1]. Если схема подключена правильно, светодиод должен загореться! Если нет — проверьте, правильно ли установлен светодиод (не перепутаны ли ножки)! Только не забудьте вернуть провод обратно на GPIO P17 [Pin 11], прежде чем продолжить.
Шаг 2 — Создание программы на Python
Мы хотим, чтобы светодиод делал что-то более интересное, чем просто включался! Начните с открытия нового проекта Python. Для этого упражнения нам понадобится библиотека GPIO для Python, которая позволяет легко настраивать и считывать/записывать входные/выходные контакты порта GPIO Pi в скрипте Python. Инструкции по установке библиотеки GPIO для Python можно найти здесь.
Когда библиотека GPIO установлена, мы готовы начать наш проект на Python! Загрузите графический интерфейс Raspbian с помощью startx и откройте программу IDLE 3, в которую мы будем вводить наш код. Поскольку мы начинаем новый проект, откройте новое окно: File>>New Window.
Помните, что Python чувствителен к регистру, а отступы имеют фундаментальное значение. Отступы, которые используются для группировки инструкций, будут добавляться автоматически по мере ввода команд, поэтому убедитесь, что вы придерживаетесь предложенной компоновки.
Первая строка нашего кода импортирует библиотеку Python, которую мы только что установили, в наш проект.
import RPi.GPIO as GPIO
Поскольку мы хотим, чтобы светодиод мигал, нам нужно добавить модуль time, чтобы Python понимал концепцию времени. Добавьте следующее:
import time
Далее нам нужно установить нумерацию контактов GPIO — либо нумерацию BOARD, либо нумерацию BCM. Нумерация BOARD относится к физической нумерации контактов на разъёмах. Нумерация BCM относится к номерам каналов на микросхеме Broadcom. Подойдёт любой вариант, но для этого упражнения я буду использовать нумерацию BOARD. Если вы запутались, используйте шпаргалку по GPIO, чтобы уточнить, какой контакт есть какой!
GPIO.setmode(GPIO.BOARD)
Теперь вам нужно определить контакты GPIO как входы или выходы. В этом упражнении GPIO P17 [Pin 11] является выходом. Сообщите библиотеке GPIO, что нужно установить GPIO P17 [Pin 11] как выход, добавив следующее:
GPIO.setup(11, GPIO.OUT)
Если вы собираетесь управлять дополнительными устройствами, вы можете добавить больше строк GPIO.setup сейчас. Чтобы включить контакт и подать 3.3В, известное как «high» (высокий уровень), используйте команду GPIO.output(11, True). Чтобы выключить контакт (0В), известное как «low» (низкий уровень), дайте инструкцию GPIO.output(11, False). Поскольку мы хотим, чтобы светодиод мигал, нам нужно использовать функцию while, чтобы зациклить программу для многократного включения и выключения светодиода. Добавьте следующее:
while True:
Далее нам нужно использовать модуль time, чтобы после включения светодиода программа ждала 1 секунду перед его выключением, и наоборот. Убедитесь, что строки имеют отступ, чтобы они были включены в цикл while (в Python отступ должен добавляться автоматически):
GPIO.output(11, True)
time.sleep(1)
GPIO.output(11, False)
time.sleep(1)
Готовая программа должна выглядеть следующим образом в Python:
Сохраните файл как LED.py. Вы не сможете запустить программу из Python, так как большинство дистрибутивов Linux ограничивают использование GPIO пользователем root. Чтобы запустить программу, откройте новое окно терминала на Pi и введите следующую команду:
sudo python LED.py
Если всё было сделано правильно, светодиод должен мигать!
Если это не сработало и светодиод не мигает — не волнуйтесь. Сначала проверьте, правильно ли подключена схема на макетной плате, затем — подключены ли соединительные провода к правильным контактам на порту GPIO. Если это всё ещё не работает, дважды проверьте, что каждая строка программы написана правильно, помня, что Python чувствителен к регистру, и обратите внимание на правильность отступов.
Чтобы выйти из запущенного скрипта Python, просто нажмите CTRL+C на клавиатуре для завершения.
Если всё работает правильно, теперь вы можете поэкспериментировать с переменной времени, чтобы изменить скорость мигания светодиода. Для этого просто измените число в скобках команды time.sleep(). Попробуйте time.sleep(0.1), чтобы светодиод мигал быстрее. Не забудьте сохранить все изменения, внесённые в программу Python, перед повторным запуском, чтобы эти изменения вступили в силу.
Этот пример является базовым, но даёт хорошее представление о фундаментальных концепциях программирования портов GPIO на вашем Raspberry Pi.