python-peripheryを使ってみる

GPIOのLチカ

こちらに2G-IOT用の WiringPiが公開されていますが、まともに動きません。
そこで、python-peripheryによるLチカを紹介します。
python-peripheryのインストールは以下の通りです。
$ env GIT_SSL_NO_VERIFY=true git clone https://github.com/vsergeev/python-periphery.git
$ cd python-periphery/
$ sudo python setup.py install

2G-IOTで使えるGPIOピンは以下のピンです。
ピン情報はこ ちらに公開されています。
Pin#12(GPIO37)は別の機能で使われているのでGPIOとしては使えません。
2G-IOT以外のボードでは、1つのピンを複数の機能(例えばGPIOとI2C、GPIOとUART、GPIOとSPI)で使えますが、
2G-IOTでは、これができないようなので、GPIOとして使えるピンは少ないです。
GPIO# ピン位置 GPIO#

1 2

3 4

5 6
#56 7 8

9 10

11 12

13 14

15 16 #101

17 18 #121
#4 19 20
#3 21 22
#2 23 24 #5

25 26 #6
#1 27 28 #0
#122 29 30
#123 31 32
#124 33 34
#125 35 36
#126 37 38

39 40

以下のコードでLチカが動きます。
#!/usr/bin/python
#-*- encoding: utf-8 -*-
from periphery import GPIO
import time
import signal
import sys

flag = True

def handler(signal, frame):
  global flag
  print('handler')
  flag = False


argv = sys.argv
argc = len(argv)
#print argc
#print argv
if (argc == 1):
  print 'Usage: python %s gpio#' % argv[0]
  quit()

signal.signal(signal.SIGINT, handler)
pin = int(argv[1])
gpio_out = GPIO(pin, "out")

while flag:
  gpio_out.write(False)
  time.sleep(1.0)
  gpio_out.write(True)
  time.sleep(1.0)


gpio_out.write(False)
gpio_out.close()

python-peripheryはWiringPi(WiringOp)と違って、デバイスファイルを直接操作します。
例えば、GPIO#126をLチカしているときは、以下の様に「/sys/class/gpio/gpio126」のデバイスファイルを作って
このデバイスに対する操作を行います。


GPIO#126のLチカは、ライブラリ内部で以下のコマンドを実行しています。
$ sudo sh -c "echo 126 >/sys/class/gpio/export"
$ sudo sh -c "echo out >/sys/class/gpio/gpio126/direction"
$ sudo sh -c "echo 1 > /sys/class/gpio/gpio126/value"
$ sudo sh -c "echo 0 > /sys/class/gpio/gpio126/value"

ド キュメントによるとGPIO割り込みもサポートしているようですが、2G-IOTでは動きませんでした。
しばらくこのライブラリを紹介していきます。

続く...