python-peripheryを使ってみる

GPIOのLチカ

pythonで使えるライブラリにはsmbus、spidev、SPI-Pyなど多数のライブラリが有りますが、
対応しているボードが限られていたり、対応しているインタフェースが限られていたりしていて、
ボードやインタフェースに応じてライブラリを使 い別ける必要が有ります。
ボードを変更した時に同じライブラリがサポートされていないときは、ライブラリの変更とコードを書き換える必要が有ります。

python-peripheryは1つのライブラリでi2c、SPI、GPIO、UART、オンボードLEDを制御することができ、
またLinux標準のファイルシステムを使うので、ボードに依存しない非常に汎用性の高いライブラリです。
python-peripheryのインストールは以下の通りです。
$ sudo apt install git python3-pip python3-setuptools
$ python3 -m pip install python-periphery

python-peripheryの使い方はこ ちらに公開されて いますが、非常に簡素な内容です。
まずは、python-peripheryのGPIOクラスを使ったLチカを紹介します。
コードはこ ちらで公開しています。
起動時の引数でGPIO番号を指定します。
GPIO番号さえ分かればどんなボードでも使うことができます。

実行時にroot権限が必要になる場合が有ります。
実行時にroot権限が必要になる場合、単純にsudoコマンドを使うと以下のエラーになります。
$ sudo python3 ./gpio.py --gpio 71
Traceback (most recent call last):
  File "/home/pico/test/./gpio.py", line 3, in <module>
    from periphery import GPIO
ModuleNotFoundError: No module named 'periphery'

以下の様に起動するとカレントユーザの環境変数を使って、root権限でスクリプトを実行することができます。
$ sudo -E python3 ./gpio.py --gpio 71

python-peripheryはWiringPiと違って、デバイスファイルを直接操作します。
引数に71を指定するとGPIO#71のON/OFFを行います。
GPIO#71をLチカしているときは、以下の様に「/sys/class/gpio/gpio71」のデバイスファイルが出現します。


GPIO#71のLチカを終了すると「/sys/class/gpio/gpio71」のデバイスファイルが消滅します。


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

/sys/class/gpioのデバイスをサポートしているOSならば、どのようなOSでもLチカすることができます。
こ ちらのドキュメントによると、GPIO割り込みもサポートしているようです。
しばらくこのライブラリを紹介していきます。

続く...