Raspberry-PiにおけるGPIO関係ツールのインストール方法

まだ検証の途中なのだけど、このままだと忘れそうなので一旦公開(2014.1.24)

Raspberry-PiのGPIOを操作するためのツールについてまとめた。
Raspberry-Piには基板上に13×2ピンのコネクタがあり、GPIOを利用することができる。

http://elinux.org/RPi_Low-level_peripheralsより)
GPIOへ直接アクセスする方法以外に、公開されているツールを利用することができる。
ここでは、PWMのためにWiringPiを、サーボ制御のためにServoBlasterを用いる方法について説明する。

WiringPi

WiringPiは、https://projects.drogon.net/raspberry-pi/wiringpi/で公開されている、Raspberry-PiのGPIOを扱うためのライブラリである。
WiringPiそのものはC/C++言語などからGPIOを利用するライブラリであるが、付属しているツールによりコマンドラインからGPIOの設定や操作を行うこともできる。
(参考:http://tomowatanabe.hatenablog.com/entry/2013/01/14/181116

WiringPiのインストール

WiringPiはgitを用いてインストールする。以下がダウンロードおよびビルドのためのコマンドである。

git clone git://git.drogon.net/wiringPi
cd wiringPi
./build

(2014.10.20追記はじめ)
上記の方法によってインストールできない時は、以下のwebサイトにアクセスしてshortlogの一覧の先頭にあるsnapshotリンクを右クリックしてファイルをダウンロードする。

https://git.drogon.net/?p=wiringPi;a=summary

ダウンロードしたら、raspberry-pi上で解凍し、ビルドする。なお、「df45388」の部分はダウンロードしたバージョンによって変わるので注意する。

cd wiringPi-df45388/
./build

(2014.10.20追記おわり)
buildによってライブラリやツールがインストールされる。
GPIOを操作するツールであるgpioの動作は以下により確認できる。(バージョンなどが表示される)

gpio -v

Raspberry-PiのGPIOの状態は以下のコマンドにより調べることができる。

gpio readall

gpioの使い方

ここではWiringPiライブラリではなく、付属ツールgpioの使い方について簡単に説明する。

ピン番号について

gpioツールでは、各GPIOピンのモードを指定したり、値を設定・取得することができる。各GPIOピンの指定方法としては、WiringPiのピン番号を用いる方法と、Raspberry PiでのGPIO番号を用いる方法がある。以下の表にその対応を示す。(詳細な対応表はこちらを参照のこと)

ピン番号 0 1 2 3 4 5 6 7
GPIO番号 17 18 21/27 22 23 24 25 4

(ピン番号の2番についてはRaspberry PiのリビジョンによってGPIOの21か27になる。)
上記の対応表で、上段の値を使う場合は-gオプションは不要で、下段の値を使う場合はコマンドラインのオプションとして-gを付ける必要がある。

モード指定

gpio [-g] mode ピン番号 モード

モードには、in、out、pwm、up、down、triのいずれかを指定する。それぞれの意味は以下の通り。

モード in out pwm up down tri
意味 入力 出力 PWM出力 プルアップ プルダウン ハイインピーダンス

ディジタル出力

gpio [-g] write ピン番号 出力

出力には、0(=Low)または1(=High)を指定する。

アナログ(PWM)出力

gpio [-g] pwm ピン番号 PWM値

PWM値としては、0から1023までの値を指定する。

ディジタル入力

gpio [-g] read ピン番号

指定したGPIOピンのディジタル値を取得する。得られる値は0(=Low)または1(=High)である。

gpio readall

上記のようにすれば、全てのGPIOピンのディジタル値が表示される。

ServoBlaster

ServoBlasterは、https://github.com/richardghirst/PiBits/tree/master/ServoBlasterで公開されている、Raspberry Piを使ってサーボモータを動かすためのソフトウェアである。

ServoBlasterのインストール

ServoBlasterもgitを用いてインストールする。以下がダウンロードおよびビルドのためのコマンドである。

git clone git://github.com/richardghirst/PiBits.git
cd PiBits/ServoBlaster/user
make
sudo make install

ServoBlasterの使い方

WiringPiと異なり、SerboBlasterは特別なデバイスファイル/dev/servoblasterに文字列を書き込むことによってサーボモータを制御する。具体的には、「サーボ番号=サーボ位置」のような文字列を/dev/servoblasterに書き込む。
サーボ番号は以下の表に基づいて指定する。WiringPiの対応とは微妙に異なるので注意する。(サーボ番号の3番についてはRaspberry PiのリビジョンによってGPIOの21か27になる。)

サーボ番号 0 1 2 3 4 5 6 7
GPIO番号 4 17 18 21/27 22 23 24 25

例えば、4番の(つまり、GPIO-22に繋がれた)サーボモータを一方の端まで回転させるには以下のようにする。

echo 4=0% > /dev/servoblaster

同じサーボモータを反対の端まで回転させるには、以下のようにする。

echo 4=100% > /dev/servoblaster

サーボモータの回転角度は、パーセンテージによる指定の他、パルス幅を直接指定することもできる。この場合はパルス幅を10マイクロ秒単位で指定する。例えば、4番のサーボモータで1.2ミリ秒(=1200マイクロ秒)幅のパルスを生成する場合、以下のように指定する。

echo 4=120 > /dev/servoblaster

その他、サーボ位置の直前に+や-の符号を付けると、現在の位置からの相対量を指定することもできる。
なお、生成された波形をオシロスコープで見たところ、サーボ位置を指定すると、数秒間だけ指定したパルスが生成された後、Lowレベルになるようである。