エンジニア『まつ』 の戦いの記録

エンジニア『まつ』 の戦いの記録を発信する。

Raspberry Pi 3 で始める電子工作 (4) 〜 GPIOの制御でLチカ

この記事では LピカとLチカを行います。その中で Raspberry Pi の GPIO の制御方法を検証します。

Lピカ

LEDがピカーっと光ることを Lピカ と呼ぶようです。

一通り電子工作に必要な物を集めてきたので、Lチカを始めたいと思います。
回路図は、他のページを参考にしたほうがよ早いと思うので、ここでは省略します。
(他のサイトによるある、綺麗な回路図はどうやって作ればよいのだろう・・・)

matu-developer.hatenablog.com

こちらで購入した LED と 220Ωの抵抗 をブレッドボードに差し込んで、ジャンパーワイヤー(メス - オス)を繋げるだけです。ただし、+(プラス)とー(マイナス:GND)の向きに注意が必要です。

抵抗には極性(+、ー)はないので向きは関係ないですが、LED には向きがあります。
LED の線が長い方が+、短い方がーです。

GPIOの1番のピンから出た先を、抵抗(220Ω)に繋げて、そこからLEDの(+)側に繋げて、LED(ー)側をGPIOのGNDのピン(20番など)に繋げると完成です。

GPIOの1番のピンは、常に 3.3V の電圧が出力されているため繋げた瞬間から光り出します。
f:id:matu-developer:20160915091048j:plain

ジャンパーワイヤは+側を赤い色のケーブル、ー側(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