2017/02/11 pigpioに関して追記
Raspberry PiでGPIOを制御
このブログを読んでいるような電波な人はもうトランジスタ技術(通称トラ技)3月号は熟読しているかな?

- 出版社/メーカー: CQ出版
- 発売日: 2016/02/10
- メディア: 雑誌
- この商品を含むブログを見る
ついにトラ技までも本格的に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だと割り込み入力のプログラムがかけない(自分が調べた限り、もしかけるのだったら誰か教えて!)
注意点
何故かピンの初期化の仕方にwiringPiSetup
wiringPiSetupSys
wiringPiSetupGpio
の3種類あって、ピン番号が変化する。本記事の最初の方に示したピン番号を使いたい場合はwiringPiSetupGpio
を使う。ハマりやすい(自分だけ?)ので注意。
まとめ
まとめると、一度テストしたいだけならechoを使用。プログラムを組むなら、RPi.GPIOかWiringPiで、プログラム言語にC++使う場合、ハードPWM使う場合はWiringPiを使用、pythonで手軽に書きたい、pythonで割り込み使いたいならRPi.GPIOを使用といったところでしょうか。
自分はプログラム組むとき、RPi.GPIOかWiringPiで結構迷います。WiringPiで割り込み使えたらよいのにな。
追記:最近は、RPi.GPIOとWiringPi両方の弱点をカバーしたpigpioというライブラリを使っています。詳しくは以下記事参照下さい。
参考リンク