Программа

Теперь приступим к составлению программы, которая будет управлять включением и выключением светодиода по нужному нам алгоритму. Для примера, включим светодиод на 5 секунд, а затем выключим.

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

Raspberry Pi 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()

Изменено:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.