Порты GPIO Raspberry Pi выглядят следующим образом:
Одним из вариантов работы с GPIO является интерфейс Sysfs. Подробнее о Sysfs интерфейсе GPIO здесь. В этом случае для обращения к портам 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, другая quick2wire-gpio-admin.
Основная задача, решаемая этими утилитами — это предоставление возможности работы с GPIO от имени непривилегированного пользователя. При этом WiringPi GPIO utility более функциональна.
Я для работы с GPIO остановился на пакете RPIO (на момент написания последней была версия 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, доступной здесь.
Устанавливается пакет следующей командой:
$ sudo pip install RPIO
Кроме python-модулей устанавливаюся две программы: rpio-curses и rpio. С их помощью можно, например, получить текущий режим и состояние GPIO и, при желании, изменить их. Так выглядит работа с rpio-curses:
Так можно получить информацию о системе:
$ 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()
ссылка на оригинал статьи http://habrahabr.ru/post/214839/
Добавить комментарий