Raspberry PiのGPIO制御ライブラリ比較

2017/02/11 pigpioに関して追記

Raspberry PiでGPIOを制御

 このブログを読んでいるような電波な人はもうトランジスタ技術(通称トラ技)3月号は熟読しているかな?

トランジスタ技術 2016年 3月号

トランジスタ技術 2016年 3月号

 ついにトラ技までも本格的にRaspberry Pi特集。Interface誌との差がいよいよわからなくなってきましたね。そんなRaspberry Pi、GPIOを手軽に制御できるのはよいのだけど、制御するやり方が色々あって、どういうときにどれを選べばよいのか、いつも迷うので一度整理してみることにしました。基本宇宙語なので、この後は興味ある方のみごらんください。

GPIO制御方法比較

 自分の知る限りでは、以下の3通りが代表的です。

  • echoで直接制御
  • RPi.GPIOライブラリを使用
  • WiringPiライブラリを使用

 GPIOのピン配置は以下参照のこと

echoで直接制御

 直接制御する方法。とりあえずテストしたいときなどは便利

使用例

 例えばGPIO14(8pin)を制御したいときの例

 以下でGPIO14を出力設定にします。

$ sudo echo "14" > /sys/class/gpio/export
$ sudo echo "out" > /sys/class/gpio/gpio14/direction 

 あとは、以下でHi出力(3.3V)

$ sudo echo "1" > /sys/class/gpio/gpio14/value

 以下はLow出力(0V)ね

$ sudo echo "0" > /sys/class/gpio/gpio14/value
メリット
  • プログラム組む必要なく、手軽にテスト可能
デメリット
  • PWM制御などちょっとインテリジェンスなことするために、全部ハードコーディング必要

RPi.GPIOライブラリ使用

 pythonのGPIO制御ライブラリ。pythonでGPIO制御するサンプルプログラムは大抵これを使っています。

使用例

 以下参照下さい

 自分は昔Raspberry Piでデジカメ作ったときにRPi.GPIO使いました


メリット
  • pythonで手軽に使える
  • 簡単に割り込み入力使ったプログラムがかける
デメリット
  • python以外で使えない
  • 正確なPWM(ハードPWM)使えない

Wiring Piライブラリ使用

 GPIO制御する代表的なライブラリ。トランジスタ技術(通称トラ技)3月号の付録でも特集されていました。

使用例

 Raspberry Piのロボットやスマホ対応のRaspberry Piデジカメ作ったときに使いました。

メリット
  • python以外でも使える(C++とか)
  • 正確なPWM(ハードPWM)使える
デメリット
  • 複雑なことができる分、モードが多くちょい難しい(ハマりやすい)
  • pythonだと割り込み入力のプログラムがかけない(自分が調べた限り、もしかけるのだったら誰か教えて!)
注意点

 何故かピンの初期化の仕方にwiringPiSetupwiringPiSetupSyswiringPiSetupGpioの3種類あって、ピン番号が変化する。本記事の最初の方に示したピン番号を使いたい場合はwiringPiSetupGpioを使う。ハマりやすい(自分だけ?)ので注意。

まとめ

 まとめると、一度テストしたいだけならechoを使用。プログラムを組むなら、RPi.GPIOかWiringPiで、プログラム言語にC++使う場合、ハードPWM使う場合はWiringPiを使用、pythonで手軽に書きたい、pythonで割り込み使いたいならRPi.GPIOを使用といったところでしょうか。
 自分はプログラム組むとき、RPi.GPIOかWiringPiで結構迷います。WiringPiで割り込み使えたらよいのにな。

 追記:最近は、RPi.GPIOとWiringPi両方の弱点をカバーしたpigpioというライブラリを使っています。詳しくは以下記事参照下さい。


参考リンク


関連記事