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

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

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

Работа через /sys/class

Одним из вариантов работы с 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
      * Определение состояние порта, настроенного на вход делается так: <code bash>cat /sys/class/gpio/gpioXX/value
  • Освобождение порта после окончания его использования:
    echo XX > /sys/class/gpio/unexport

Работа через RPIO

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

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

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

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

sudo apt-get install python-rpi.gpio python3-rpi.gpio
sudo apt-get install python-dev python3-dev
sudo apt-get install mercurial
sudo apt-get install python-pip python3-pip
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:

rpio_test.py
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()
ispolzovanie_gpio_iz_python_na_raspberry_pi.txt · Последние изменения: 2014/10/14 17:10 (внешнее изменение)
GNU Free Documentation License 1.3
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0 Яндекс.Метрика