- PVSM.RU - https://www.pvsm.ru -

Использование GPIO из Python на Raspberry Pi

Делюсь своим опытом, полученным при изучении задачи вынесенной в заголовок. В статье рассматриваются два варианта работы, которые можно использовать в Python-программах, обращающихся к портами GPIO Raspberry Pi.

Порты GPIO Raspberry Pi выглядят следующим образом:

image

Одним из вариантов работы с GPIO является интерфейс Sysfs [1]. Подробнее о Sysfs интерфейсе GPIO здесь [2]. В этом случае для обращения к портам GPIO используются операции чтения и записи файлов. Для использования конкретного вывода его нужно зарезервировать и установить направление на вход или на выход. После окончания работы с портом его нужно освободить, чтобы другие процессы могли его использовать.

Резервирование порта (XX — номер нужного порта):

$ echo XX > /sys/class/gpio/export

При успешном резервировании появляется новая папка по адресу /sys/class/gpio/gpioXX/. Установка направления выполняется так:

$ echo "out" > /sys/class/gpio/gpioXX/direction

Или так:

$ echo "in" > /sys/class/gpio/gpioXX/direction

Установка высокого и низкого уровней для порта, настроенного на выход выполняется так:

$ echo 1 > /sys/class/gpio/gpioXX/value
$ echo 0 > /sys/class/gpio/gpioXX/value

Определение состояние порта, настроенного на вход делается так:

$ cat /sys/class/gpio/gpioXX/value

Освобождение порта после окончания его использования:

$ echo XX > /sys/class/gpio/unexport

Для упрощения работы с GPIO через интерфейс Sysfs мне встретились две утилиты. Одна из них WiringPi GPIO utility [3], другая quick2wire-gpio-admin [4].

Основная задача, решаемая этими утилитами — это предоставление возможности работы с GPIO от имени непривилегированного пользователя. При этом WiringPi GPIO utility более функциональна.

Я для работы с GPIO остановился на пакете RPIO [5] (на момент написания последней была версия 0.10.0). Этот пакет работает с портами GPIO напрямую, обращаясь к регистрам BCM2708 через специальное устройство /dev/mem. Что такое RPIO:

Advanced GPIO for the Raspberry Pi. Extends RPi.GPIO with PWM, GPIO interrups, TCP socket interrupts, command line tools and more

RPIO позиционируется как улучшенный и расширенный вариант другого модуля, RPi.GPIO. В документации непосредственно на RPIO подробно рассмотрены только возможности, отсутствующие в RPi.GPIO, по этому за описанием общих для этих модулей функций нужно обращаться к документации RPi.GPIO, доступной здесь [6].

Устанавливается пакет следующей командой:

$ sudo pip install RPIO

Кроме python-модулей устанавливаюся две программы: rpio-curses и rpio. С их помощью можно, например, получить текущий режим и состояние GPIO и, при желании, изменить их. Так выглядит работа с rpio-curses:

image

Так можно получить информацию о системе:

$ rpio --sysinfo
000f: Model B, Revision 2.0, RAM: 512 MB, Maker: Qisda

Пример python-программы, использующей RPIO:

import RPIO
import time

NRF_CE = 24

# set up output channel with an initial state
RPIO.setup(NRF_CE, RPIO.OUT, initial=RPIO.LOW)

for i in range(10):
    RPIO.output(NRF_CE, 1)
    time.sleep(1)
    RPIO.output(NRF_CE, 0)
    time.sleep(1)

# reset every channel that has been set up by this program,
# and unexport interrupt gpio interfaces
RPIO.cleanup()

Автор: dmitriy5181

Источник [7]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/python/56500

Ссылки в тексте:

[1] Sysfs: http://en.wikipedia.org/wiki/Sysfs

[2] здесь: https://github.com/torvalds/linux/blob/master/Documentation/gpio/sysfs.txt

[3] WiringPi GPIO utility: https://projects.drogon.net/raspberry-pi/wiringpi/the-gpio-utility/

[4] quick2wire-gpio-admin: https://github.com/quick2wire/quick2wire-gpio-admin

[5] RPIO: http://pythonhosted.org/RPIO/

[6] здесь: http://sourceforge.net/p/raspberry-gpio-python/wiki/Examples/

[7] Источник: http://habrahabr.ru/post/214839/