Комплектующие
В этом эксперименте для работы понадобятся следующие комплектующие:
Красный светодиод
Резистор 470 Ом 0,25 Вт
400-точечная беспаечная макетная плата
Перемычки <<папа-папа» (только для Arduino)
Перемычки «мама-папа» (только для Рі)
Компоновка макетной платы
Компоновка макетной платы для нашего проекта показана на рисунке. Она одинакова, работаете ли вы с Arduino или с Raspberry Pi, но подключение макетной платы к Arduino и к Raspberry Pi происходит по-разному.
На рисунке показано, что ток с выходного контакта Arduino или Raspberry Pi должен поступать сначала на резистор, а затем на светодиод
Независимо от того, каким образом подключен резистор, плюсовой вывод светодиода (он чуть длиннее минусового) должен быть подключен к верхнему из двух задействованных рядов макетной платы. Определить минусовой вывод светодиода вам поможет и то обстоятельство, что край светодиода, расположенный ближе к минусовому выводу, имеет плоскую кромку.
- Компоновка макетной платы
Подключение Raspberry Pi
В отличие от Arduino, контакты GPIO на Raspberry Pi никак не помечены, и сходу определить, где какой находится, трудно. Поэтому есть два варианта: либо использовать схему расположения контактов GPIO и посчитать, какой контакт вам нужен, либо работать с трафаретом для разметки контактов, накладываемым на GPIO, например, с Raspberry Leaf, как показано на рисунке.
- Подключение макетной платы для управления светодиодом с Raspberry Pi
Компоновка макетной платы и соединения ее с Raspberry Pi:
- Компоновка макетной платы для управления светодиодом с Raspberry Pi
Программа для Raspberry Pi
Для программирования Raspberry Pi не нужен отдельный компьютер - программу можно записать и запустить на самом Raspberry Рі. Итак, загрузим на Raspberry Рі программу, которая находится в файле on_off_control.py каталога python/experiments:
Код: Выделить всё
import RPI.GPTO as GPIO //1
import time //2
GPIO.setmode (GPIO.BCM) // 3
control_pin = 18 // 4
GPIO.setup (control_pin, GPIO. OUT)
try: // 5
while True: // 6
GPIO. output (control_pin, False) //7
time.sleep(5)
GPIO.output (control pin, True)
time.sleep(2)
finally:
print("Сброс")
GPIO.cleanup()
Эта программа представляет собой практически двойника программы для Arduino. Рассмотрим ее также по пунктам, воспользовавшись разметкой строк, сделанной в комментариях:
1. Чтобы получить доступ к контактам GPIO Raspberry Pi, вам понадобится библиотека RPi.GPIO на языке Python, которую написал энтузиаст Raspberry Pi Бен Кростон (Ben Croston). Так что, в первой строке кода мы эту библиотеку импортируем. Библиотека Рі.GPO предустановлена во всех последних версиях стандартного дистрибутива
Raspbian, поэтому вам не придется ее устанавливать, если только вы не работаете со старой версией
Raspbian. В случае же старой версии удобнее всего установить библиотеку, просто обновив систему, что вы, скорее всего, так и сделаете. Для этого нужно выполнить в консоли следующую команду:
$ sudo apt-get upgrade
2. Вам также потребуется импортировать библиотеку времени, поскольку именно она обеспечивает задержки при включении и выключении светодиода.
3. Строку GPIO.setmode (GPIO, ВСМ) следует включать в любую программу на Python, которую вы пишете для управления контактами GPIO, прежде чем задавать режим контактов и вообще как-либо их использовать. Команда сообщает библиотеке GPIO, что контакты будут идентифицироваться по их Broadcom- наименованиям (ВСМ), а не по положению. Библиотека RPi.GPIO поддерживает обе схемы именования, но именование по Broadcom более популярно, и именно им мы будем пользоваться в этой книге.
ПРИМЕЧАНИЕ
Обратите внимание, что при программировании под Raspberry Pi не задействуются отдельные функции
setup() и
loop(), как мы это делали при программировании под Arduino. Определения, включаемые в Arduino в функцию
setup(), просто прописываются здесь ближе к началу программы, а бесконечный цикл
while играет тут роль, которая в Arduinо обычно поручается функции
loop()
4. Переменная
сontrol_pin идентифицирует GPIO-контакт
18, как именно тот, к которому вы собираетесь подключать светодиод. Он и определяется в качестве вывода при помощи команды
GPIO.setup.
5. Переходим к функции, которая эквивалентна циклу Arduino. Она заключена в конструкции
try... finally. Суть ее в том, что если в программе возникнет какая-либо ошибка, то вы либо просто остановите программу, нажав комбинацию клавиш <Ctrl>+<C> в окне терминала, где она выполнялась, либо запустится код очистки, содержащийся в блоке
finally.
Можно обойтись без этого кода и попросту использовать цикл
while, но код очистки автоматически сбрасывает все GPIO-контакты в безопасное состояние (на вход), снижая вероятность того, что случайное короткое замыкание или ошибка монтажа на макетной плате повредит Raspberry Pi
6. В цикле
while действует условие
True. Это может показаться странным, но в Python мы именно так обеспечиваем бесконечное выполнение какого-либо кода. На самом деле, программа просто продолжит циклически выполнять команды в цикле
while, пока вы не остановите ее комбинацией клавиш
<Ctrl>+<C> либо не отключите Raspberry Pi.
7. Код внутри цикла очень похож на его аналог из Arduino. Контакт GPIO имеет значение
True(high), затем следует задержка 5 секунд, после чего GPIO-контакт получает значение
False (low), происходит еще одна 2-секундная задержка, и цикл повторяется.
Загружаем и выполняем программу
Для доступа к контактам GPIO в Linux требуются привилегии суперпользователя. Поэтому, чтобы выполнить программу, перейдите в каталог с файлом on_off_ control.ру и запустите ее следующей командой:
$ sudo python on_off_control.ру
Напомню, что, начиная команду си, вы запускаете программу от имени супер-пользователя.
Когда светодиод достаточное количество раз помигает, нажмите комбинацию клавиш <Ctrl>+<C> для завершения программы.