Raspbian 資料一覧
2016/10/10更新
対応バージョン: Raspbian Jessie Lite - September 2016
Raspberry Pi 3のGPIOを制御するにはRPi.GPIOライブラリがよく使われるが、リモートからの制御も可能になるpigpioというライブラリもあるので導入手順を示す。
後半でRPi.GPIOライブラリを使ったコードとpigpioライブラリを使ったコードを比較する。
尚、リモートから接続する際のホストとしてUbuntu 16.04を使用するものとし、Raspberry Piとはネットワーク的に接続できる状態にあるものとする。
インストール
まずソースコード一式を入手してmake & make installする。これはRaspberry Pi、Ubuntu双方で実施する。
% wget abyz.co.uk/rpi/pigpio/pigpio.zip % unzip pigpio.zip % cd PIGPIO % make % sudo make install
以下のファイルがインストールされる。
/usr/local/lib/libpigpio.so /usr/local/lib/libpigpiod_if.so /usr/local/lib/libpigpiod_if2.so /usr/local/lib/python2.7/dist-packages/pigpio-1.33.egg-info /usr/local/lib/python2.7/dist-packages/pigpio.py /usr/local/lib/python2.7/dist-packages/pigpio.pyc /usr/local/bin/pig2vcd /usr/local/bin/pigpiod /usr/local/bin/pigs /usr/local/include/pigpio.h /usr/local/include/pigpiod_if.h /usr/local/include/pigpiod_if2.h /opt/pigpio/cgi/ (ディレクトリのみ)
サービス登録(systemd)
続いてサービスの登録を行い、pigpiodをデーモンとして動作させる。これはRaspberry Pi側のみで実施する。
サービス定義
% sudo vi /lib/systemd/system/pigpiod.service [Unit] Description=Gpio daemon [Service] ExecStart=/usr/local/bin/pigpiod Type=forking [Install] WantedBy=multi-user.target
サービス有効化 & 起動
% sudo systemctl enable pigpiod % sudo systemctl start pigpiod % sudo systemctl status pigpiod ● pigpiod.service - Gpio daemon Loaded: loaded (/lib/systemd/system/pigpiod.service; enabled) Active: active (running) since 月 2016-10-10 14:28:07 JST; 6s ago Process: 1127 ExecStart=/usr/local/bin/pigpiod (code=exited, status=0/SUCCESS) Main PID: 1129 (pigpiod) CGroup: /system.slice/pigpiod.service └─1129 /usr/local/bin/pigpiod 10月 10 14:28:07 p1 systemd[1]: Started Gpio daemon.
サービスを起動すると8888番ポートが待受ポートとして使われているのが確認できる。
% ss -nat State Recv-Q Send-Q Local Address:Port Peer Address:Port : LISTEN 0 100 *:8888 *:* :
プログラミング
以下の資料にてLチカさせた時のコードをpippioライブラリを使って書き直してみる。
関連資料・記事
従来のRPi.GPIOライブラリ使用
#!/usr/bin/env python import RPi.GPIO as GPIO from time import sleep PIN = 25 GPIO.setmode(GPIO.BCM) GPIO.setup(PIN, GPIO.OUT) try: while True: GPIO.output(PIN, GPIO.HIGH) sleep(0.5) GPIO.output(PIN, GPIO.LOW) sleep(0.5) except KeyboardInterrupt: pass GPIO.cleanup(PIN)
pigpioライブラリ使用(Raspberry Pi上で動かす場合)
#!/usr/bin/env python import pigpio from time import sleep PIN = 25 pi = pigpio.pi() pi.set_mode(PIN, pigpio.OUTPUT) try: while True: pi.write(PIN, 1) sleep(0.5) pi.write(PIN, 0) sleep(0.5) except KeyboardInterrupt: pass pi.set_mode(PIN, pigpio.INPUT) pi.stop()見て分かる通り、呼び出すメソッドが違うだけで書き方は同じ、違いは最初にpigpiodに接続する部分だけである。
Raspberry Pi上でローカル接続する場合とUbuntuからリモート接続する場合の引数が違うところに注意すればローカルでもリモートでも同じようにGPIOポートが操作できる。
ローカル接続
pi = pigpio.pi()
リモート接続
pi = pigpio.pi('<pigpiodが動作するホストのホスト名かIPアドレス>')
関連資料・記事
[Raspbian] Raspberry Pi 3の初期セットアップ(Raspbian Jessie Lite)
[Raspbian] Raspberry Pi 3のGPIOを制御するWiringPiライブラリ導入手順(gpioコマンドでLチカ)
参考サイト
Raspberry Pi (Wikipedia)
RaspberryPi技術情報 (Qiita)
Raspbian技術情報 (Qiita)
IT女子のラズベリーパイ入門奮闘記 (Device Plus)
RaspberryPi電子工作入門 (ツール・ラボ)