Программа
Теперь приступим к составлению программы, которая будет управлять включением и выключением светодиода по нужному нам алгоритму. Для примера, включим светодиод на 5 секунд, а затем выключим.
Первое, что нам нужно сделать — это задать тип нумерации выводов общего назначения. Есть два типа. Первый тип — это нумерация разъема, а второй тип — нумерация выводов микропроцессора. На рисунке изображен разъем GPIO.

Слева на право начинается нумерация первого типа: 1,2. За ней не подписано, но идет по порядку: 3,4 — 5,6 — и т.д. В конце разъема — 39,40.
Сверху и снизу идет нумерация процессора (BCM). На нашей схеме мы подключили светодиод к выводу №23 согласно нумерации BCM.
В программе тип нумерации задается с помощью функции setmode:
GPIO.setmode(GPIO.BCM)
Теперь нужно задать режим работы вывода №23. Всего есть два режима: вывод (OUT) и ввод (IN). Мы хотим управлять светодиодом, значит нам нужен режим «вывод». А вот если бы мы хотели прочитать какой-то сигнал, например, с датчика, то следовало бы выбрать режим «ввод».
GPIO.setup(23, GPIO.OUT)
Чтобы подать на вывод №23 истину, используем функцию output:
GPIO.output(23, True)
Помимо этих функций, нам понадобится пауза sleep. Эта функция ставит на паузу выполнение программы. В качестве аргумента указывается количество секунд паузы.
sleep(5)
Наконец, чтобы функции работы с GPIO и sleep работали, в самом начале программы подключим две библиотеки:
from RPi import GPIO from time import sleep
Итак, вся программа целиком.
from RPi import GPIO
from time import sleep
GPIO.setmode(GPIO.BCM)
GPIO.setup(23, GPIO.OUT)
GPIO.output(23, True)
sleep(5)
GPIO.output(23, False)
GPIO.cleanup()
В конце программы рекомендуется вызвать функцию cleanup, которая сбросит все настройки GPIO, чтобы они не мешали запуску очередной программы.
Мигание светодиодом в цикле
Усовершенствуем программу таким образом, чтоб светодиод мигал непрерывно с частотой 1 Герц (то есть один раз в секунду). Для этого нам нужно будет добавить в программу оператор цикла while.
from RPi import GPIO
from time import sleep
GPIO.setmode(GPIO.BCM)
GPIO.setup(23, GPIO.OUT)
while True:
GPIO.output(23, True)
sleep(0.5)
GPIO.output(23, False)
sleep(0.5)
GPIO.cleanup()
Цикл while будет работать пока истинно условие, указанное в нем. Чтобы цикл работал без остановки, в качестве условия мы поставили True.
Составленная нами программа имеет один неприятный изъян. Если мы ее запустим, она войдет в бесконечный цикл и мы не сможем её остановить штатными средствами. А если мы её остановим нештатно, то не выполнится функция cleanup, что нежелательно.
Добавим в программу еще одну конструкцию, которая позволит нам в любой момент прервать работу цикла с помощью комбинации клавиш Ctrl+C. При этом программа завершится в нормальном режиме и выполнит функцию cleanup.
from RPi import GPIO
from time import sleep
GPIO.setmode(GPIO.BCM)
GPIO.setup(23, GPIO.OUT)
try:
while True:
GPIO.output(23, True)
sleep(0.5)
GPIO.output(23, False)
sleep(0.5)
except KeyboardInterrupt:
print 'program stop' GPIO.cleanup()