Одно из главных преимуществ Raspberry Pi — это наличие выводов общего назначения (General Purpose Iinput/Outputs). GPIO — это группа контактов, которыми можно управлять с помощью программы. Причем управление это может быть совсем простым, например, включение/выключение светодиода. Либо весьма сложным — обмен данными с периферийными устройствами по специализированным протоколам.
С помощью GPIO можно собирать данные с разных датчиков, управлять реле, двигателями, силовыми ключами. В общем, управлять реальным миром по составленной нами программе.
В этой статье я расскажу как установить на Raspberry Pi библиотеку управления GPIO для python — RPi.GPIO, и приведу несколько простых примеров работы с ней.
1. Загрузка и подготовка библиотеки RPi.GPIO
Первое что мы сделаем — скачаем архив с библиотекой с официального сайта:
ссылка для скачивания RPi.GPIO
Ссылка ведет на страницу с разными версиями библиотеки. Выбираем самый свежий архив. На момент написания статьи это был — RPi.GPIO-0.6.3.tar.gz
По-умолчанию, штатный браузер Chromium скачает библиотеку в папку /home/pi/Downloads. Зайдем в эту папку с помощью проводника:
Теперь жмем правую кнопку мыши на архиве и выбираем пункт Extract Here.
Этим самым мы просим разархивировать библиотеку в ту же папку, в которой находится сам архив. В результате рядом с архивом появится папка RPi.GPIO-0.6.3.
2. Установка дополнительного пакета для python
Перед тем, как установить библиотеку RPi.GPIO, нам потребуется дополнительный пакет python-dev. Для этого запустим терминал (черная иконка на верхней панели рабочего стола) и запустим в нем следующую команду:
sudo apt-get install python-dev
На вопрос «Do you want to continue? [Y/n]» пишем символ «Y» и жмем Enter.
В результате появится отчет об успешной установке. Выглядит он так:
3. Установка библиотеки RPi.GPIO
Теперь приступим к установке самой библиотеки для работы с GPIO. Не выходя из терминала, переходим в разархивированную ранее папку:
cd /home/pi/Downloads/RPi.GPIO-0.6.3
И запускаем команду для сборки библиотеки из исходных кодов:
python setup.py build
В результате получим примерно такой отчет:
Далее запускаем команду установки библиотеки. Нужно выполнить её с правами администратора, поэтому вначале добавляем директиву sudo:
sudo python setup.py install
Результат выполнения:
Ну вот и готово! Приступим к сборке стенда и составлению первой программы, которая будет управлять состоянием светодиода.
4. Подключение светодиода к Raspberry Pi
Разъем GPIO у Raspberry Pi имеет два типа нумерации. Первый тип — это последовательный номер контакта. Второй тип — BCM, соответствует выводам микропроцессора. Оба эти нумерации представлены на картинке.
В большинстве примеров используется тип нумерации BCM, последуем традиции. Подключаем светодиод к выводу GPIO23 по следующей схеме.
Анод светодиода (длинная ножка) соединим с выводом GPIO23 через резистор 200 Ом, а катод с землей (GND). Хорошо бы сначала вспомнить урок про макетные платы.
Теперь перейдем к написанию программы.
5. Программа для управления с помощью RPi.GPIO
В Raspbian установлены две версии python: 2 и 3. Поскольку мы установили библиотеку только для python 2, будет пользоваться именно это версией.
Открываем среду разработки Python 2 (IDLE). В меню появившегося окна выбираем New File.
Откроется окно редактора. В этом окне записываем программу, которая включит светодиод на 5 секунд, а затем погасит его.
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()
Программу желательно сохранить, например, в домашнюю папку. Делается это с помощью пункта меню File/Save As…
Наконец, запускаем программу через меню Run/Run Module или с помощью клавиши F5.
Заключение
Этот пример показывает, как легко управлять простыми исполнительными устройствами с помощью библиотеки RPi.GPIO. Вместо светодиода можно поставить, например, мощное реле и управлять включением уличного освещения, или, скажем, чайником. Однако, следует помнить, что функционал этой библиотеки весьма ограничен и для управления устройствами через интерфейсы I2C и SPI потребуются дополнительные специализированные библиотеки.
Спасибо, работает. Очень просто и доходчиво.