Raspberry PiでGPIO制御
Raspberry PiのGPIOをライブラリを使って制御します。またライブラリを使うことでJavaScriptからでもGPIOの制御ができるようになります。まずはGPIOを叩いてみるところと、ハマるポイントを書いておきます。
Raspberry PiのGPIOの情報
ここがまとまってるような。 今回はsu無しで制御したいのと、JavaScript経由でアクセスしたかったので、Cなどのライブラリ経由ではなく、WirinigPiというコマンドレベルのライブラリを使います。これをインストールするだけでもコンソールからGPIO制御可能なので、簡単な動作確認にも便利です。
Wiring Piのインストール
この通りにやれば問題ありません。
$ git clone git://git.drogon.net/wiringPi
で、
$ cd wiringPi $ ./build
とすればインストール完了です。
$ man gpio
で使い方の説明が参照できます。
GPIOの取得
まずはGPIOの状態を取得してみましょう。
$ gpio readall +----------+------+--------+-------+ | wiringPi | GPIO | Name | Value | +----------+------+--------+-------+ | 0 | 17 | GPIO 0 | Low | | 1 | 18 | GPIO 1 | Low | | 2 | 27 | GPIO 2 | Low | | 3 | 22 | GPIO 3 | Low | | 4 | 23 | GPIO 4 | Low | | 5 | 24 | GPIO 5 | Low | | 6 | 25 | GPIO 6 | Low | | 7 | 4 | GPIO 7 | Low | | 8 | 2 | SDA | High | | 9 | 3 | SCL | High | | 10 | 8 | CE0 | Low | | 11 | 7 | CE1 | Low | | 12 | 10 | MOSI | Low | | 13 | 9 | MISO | Low | | 14 | 11 | SCLK | Low | | 15 | 14 | TxD | High | | 16 | 15 | RxD | High | +----------+------+--------+-------+ | 17 | 28 | GPIO 8 | Low | | 18 | 29 | GPIO 9 | Low | | 19 | 30 | GPIO10 | Low | | 20 | 31 | GPIO11 | Low | +----------+------+--------+-------+
こんな感じで各GPIOの状態が取得出来ます。 ここで、"GPIO"と"Name"の関係がわかりにくく、ハマるポイントでした。
先の参考ページの配置図ですが、これとの対比が取れてない・・・と思ったら、Raspberry Piのピン名とCPUのBroadcomのピン名があってこれが混乱する元になっている模様です。 出展 #ちなみに右図の12pin GPIO1はGPIO18の間違い
というわけで"Name"は左図との対比(GPIO8-11は無し)となってます。GPIOの制御は"GPIO"番号で行うため基本的には右図でいいのですが、混乱する元になりますね。
GPIOを制御
では、実際にGPIOに出力してみます。
| 6 | 25 | GPIO 6 | Low |
この、GPIO6 : 25にLEDを接続して1を書き込みます。
$ gpio -g mode 25 out $ gpio -g write 25 1
これでLEDが点灯します。ここで再度
$ gpio readall +----------+------+--------+-------+ | wiringPi | GPIO | Name | Value | +----------+------+--------+-------+ | 0 | 17 | GPIO 0 | Low | | 1 | 18 | GPIO 1 | Low | | 2 | 27 | GPIO 2 | Low | | 3 | 22 | GPIO 3 | Low | | 4 | 23 | GPIO 4 | Low | | 5 | 24 | GPIO 5 | Low | | 6 | 25 | GPIO 6 | High | | 7 | 4 | GPIO 7 | Low | | 8 | 2 | SDA | High | | 9 | 3 | SCL | High | | 10 | 8 | CE0 | Low | | 11 | 7 | CE1 | Low | | 12 | 10 | MOSI | Low | | 13 | 9 | MISO | Low | | 14 | 11 | SCLK | Low | | 15 | 14 | TxD | High | | 16 | 15 | RxD | High | +----------+------+--------+-------+ | 17 | 28 | GPIO 8 | Low | | 18 | 29 | GPIO 9 | Low | | 19 | 30 | GPIO10 | Low | | 20 | 31 | GPIO11 | Low | +----------+------+--------+-------+
GPIO6:25が"High"になっています。消灯させる場合は
$ gpio -g write 25 0
ブレッドボードで確認しましたがこんな感じに点灯します。
回路はざっくりこんなんで
追記:50Ωでは小さいんじゃない?と言う指摘を頂きました。確かに100Ωくらいの方が安全だと思います(^^;