Raspberry Pi 3 で始める電子工作 (4) 〜 GPIOの制御でLチカ
この記事では LピカとLチカを行います。その中で Raspberry Pi の GPIO の制御方法を検証します。
Lピカ
LEDがピカーっと光ることを Lピカ と呼ぶようです。
一通り電子工作に必要な物を集めてきたので、Lチカを始めたいと思います。
回路図は、他のページを参考にしたほうがよ早いと思うので、ここでは省略します。
(他のサイトによるある、綺麗な回路図はどうやって作ればよいのだろう・・・)
こちらで購入した LED と 220Ωの抵抗 をブレッドボードに差し込んで、ジャンパーワイヤー(メス - オス)を繋げるだけです。ただし、+(プラス)とー(マイナス:GND)の向きに注意が必要です。
抵抗には極性(+、ー)はないので向きは関係ないですが、LED には向きがあります。
LED の線が長い方が+、短い方がーです。
GPIOの1番のピンから出た先を、抵抗(220Ω)に繋げて、そこからLEDの(+)側に繋げて、LED(ー)側をGPIOのGNDのピン(20番など)に繋げると完成です。
GPIOの1番のピンは、常に 3.3V の電圧が出力されているため繋げた瞬間から光り出します。
ジャンパーワイヤは+側を赤い色のケーブル、ー側(GND)を黒い色のケーブルを利用すると間違わなくてよいです。
Lチカ
次にこの LED をチカチカさせたいのですが、一定のリズムで、GPIOのピンに 3.3V の電圧で、ON / OFF を繰り返すことで、チカチカとなるのですが、ここからはプログラムを利用する必要があるようです。先ほどの GPIOの 1番のピンを GPIOの 24番のピンに差し替えます。そしてこの GPIO の 24番ピンに対してプログラムで ON / OFF の制御を行います。
GPIO のピンを制御する方法
GPIO のピンを制御する方法は 色々あるのですが、Raspberry Pi の初期状態で利用可能なのは以下の方法がありました。
Python の RPi.GPIO ライブラリを利用する方法
多くの記事などで Python を利用した GPIO の制御方法が乗っていますが、私は最終目標の WiFi Raspberry ラジコンでは Node.js を利用する予定としていたので、検証は省略しました。他の記事に詳しくあると思います。
GPIOコマンド
Raspberry Pi は gpio というコマンドが利用できるようになっています。
以下の shell プログラムを作成して、実行してみました。1秒おきにチカチカできました。
コマンドであれば Node.js から "child_process" の execSync を利用して実装できそうです。
#!/bin/sh gpio -g mode 24 out gpio -g write 24 1 sleep 1s gpio -g write 24 0 sleep 1s gpio -g write 24 1 sleep 1s gpio -g write 24 0 sleep 1s gpio -g write 24 1 sleep 1s gpio -g write 24 0 sleep 1s
以下で GPIO24 ポートを出力用に利用する宣言をします。
gpio -g mode 24 out
以下で GPIO24 ポートに 3.3V を 出力します。0 でオフとなります
gpio -g write 24 1
-g が ポート番号を gpioxx の xx の数字でポートを指定するためのオプションです。
ファイルを利用した制御
GPIO のデバイスの仮想ファイルを変更することで、GPIO の各ポートの ON / OFF の制御ができます。
以下の shell プログラムを作成して、実行してみました。こちらも1秒おきにチカチカできました。
Node.js でファイルを制御できるので、こちらでも Node.js から制御可能です。
#!/bin/sh echo 24 > /sys/class/gpio/export sleep 1s echo out > /sys/class/gpio/gpio24/direction sleep 1s echo 1 > /sys/class/gpio/gpio24/value sleep 1s echo 0 > /sys/class/gpio/gpio24/value sleep 1s echo 1 > /sys/class/gpio/gpio24/value sleep 1s echo 0 > /sys/class/gpio/gpio24/value sleep 1s echo 1 > /sys/class/gpio/gpio24/value sleep 1s echo 0 > /sys/class/gpio/gpio24/value sleep 1s echo 24 > /sys/class/gpio/unexport
/sys/class/gpio/export に 24 を書き込むことで、GPIO24 ポートの利用開始を宣言します。
/sys/class/gpio/gpio24/direction に out を書き込むことで出力用に利用することになります。
/sys/class/gpio/gpio24/value のファイルに 1 or 0 を書き込むことで制御できます。
/sys/class/gpio/unexport に 24 を書き込むことで後片付けを行ってくれます。
export に書き込んだ後や direction に書き込んだ後で少し sleep を入れないと、制御が間に合ってなくて Permission denied などのエラーが出ます。
こちら見てね!
matu-developer.hatenablog.com