Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
ispolzovanie_gpio_iz_python_na_raspberry_pi [2014/10/14 16:59]
ansealk создано
ispolzovanie_gpio_iz_python_na_raspberry_pi [2014/10/14 17:10] (текущий)
Строка 1: Строка 1:
 +====== Использование GPIO из Python на Raspberry Pi ======
 +
 +В статье рассматриваются два варианта работы,​ которые можно использовать в Python-программах,​ обращающихся к портами GPIO Raspberry Pi.
 +
 +Порты GPIO Raspberry Pi выглядят следующим образом:​
 +
 +{{:​raspberrypi:​cb22d01a5de84cbaaad999919a8a04bf.jpg?​nolink|}}
 +
 +
 +===== Работа через /sys/class =====
 +Одним из вариантов работы с GPIO является интерфейс Sysfs. Подробнее о Sysfs интерфейсе GPIO [[https://​github.com/​torvalds/​linux/​blob/​master/​Documentation/​gpio/​sysfs.txt|здесь]]. В этом случае для обращения к портам GPIO используются операции чтения и записи файлов. Для использования конкретного вывода его нужно зарезервировать и установить направление на вход или на выход. После окончания работы с портом его нужно освободить,​ чтобы другие процессы могли его использовать.
 +  * Резервирование порта (XX — номер нужного порта):​ <code bash>​echo XX > /​sys/​class/​gpio/​export</​code>​ При успешном резервировании появляется новая папка по адресу **/​sys/​class/​gpio/​gpioXX/​**. ​
 +  * Установка направления выполняется так:<​code bash>​echo "​out"​ > /​sys/​class/​gpio/​gpioXX/​direction</​code>​ Или так: <code bash>​echo "​in"​ > /​sys/​class/​gpio/​gpioXX/​direction</​code>​
 +  * Установка высокого и низкого уровней для порта, настроенного на выход выполняется так:<​code bash>
 +echo 1 > /​sys/​class/​gpio/​gpioXX/​value
 +echo 0 > /​sys/​class/​gpio/​gpioXX/​value
 +  * Определение состояние порта, настроенного на вход делается так: <code bash>cat /​sys/​class/​gpio/​gpioXX/​value</​code>​
 +  * Освобождение порта после окончания его использования:​ <code bahs>​echo XX > /​sys/​class/​gpio/​unexport</​code>​
 +
 +===== Работа через RPIO =====
 +
 +Для упрощения работы с GPIO через интерфейс Sysfs мне встретились две утилиты. Одна из них [[https://​projects.drogon.net/​raspberry-pi/​wiringpi/​the-gpio-utility/​|WiringPi GPIO utility]], другая [[https://​github.com/​quick2wire/​quick2wire-gpio-admin|quick2wire-gpio-admin]].
 +
 +Основная задача,​ решаемая этими утилитами — это предоставление возможности работы с GPIO от имени непривилегированного пользователя. При этом WiringPi GPIO utility более функциональна.
 +
 +Я для работы с GPIO остановился на пакете RPIO. Этот пакет работает с портами GPIO напрямую,​ обращаясь к регистрам BCM2708 через специальное устройство /dev/mem. RPIO позиционируется как улучшенный и расширенный вариант другого модуля,​ RPi.GPIO. В документации непосредственно на RPIO подробно рассмотрены только возможности,​ отсутствующие в RPi.GPIO, по этому за описанием общих для этих модулей функций нужно обращаться к документации RPi.GPIO, доступной [[http://​sourceforge.net/​p/​raspberry-gpio-python/​wiki/​Examples/​|здесь]].
 +
 +Устанавливается пакет следующим образом: ​
 +<code bash>
 +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
 +</​code>​
 +
 +Кроме python-модулей устанавливаюся две программы:​ **rpio-curses** и **rpio**. С их помощью можно, например,​ получить текущий режим и состояние GPIO и, при желании,​ изменить их. Так выглядит работа с rpio-curses:​
 +
 +{{:​raspberrypi:​28249707af113fe4eeeea54cd880d35a.jpg?​nolink|}}
 +
 +Так можно получить информацию о системе:​
 +
 +  $rpio --sysinfo
 +  000f: Model B, Revision 2.0, RAM: 512 MB, Maker: Qisda
 +
 +
 +
 +Пример python-программы,​ использующей RPIO:
 +<file python 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()
 +</​file>​
 +
 +
  
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 Яндекс.Метрика