2021/09/10
ラズパイゼロWのGPIOでLチカ(LEDをチカチカ点滅) に挑戦。プログラム言語は使わずにシェルだけで動かしてみました。
動作環境
ハードウェア | Raspberry Pi Zero W |
---|---|
OS | Raspbian Stretch with desktop:November 2018 |
上記構成に加えて、無線経由でSSHでログインできる環境と、GPIOピンヘッダの取り付けが必要です。
セットアップの参考
準備物
- ブレットボード
- 抵抗1KΩ 1本
- ジャンパワイヤ 2本
- LED 1個(赤色を準備)
物理結線
ラズパイゼロWには40本のピンがあり、そのうち26本の制御可能なGPIOピンがあります。今回は分かりやすい様に、一番端の40番のGPIO21と39番のGNDの2つを使ってみました。
40番をLEDのアノード側に、39番をLEDのカソード側に接続します。
実際の接続状況。赤いケーブルを40番、黒いケーブルを39番に接続しました。
GPIOピンは3.3V出力のため、赤色LEDのVf:2Vより高く、そのままつなぐと壊れてしまいます。抵抗を入れて電流を制限します。
LEDの制御
結線が完了したら、SSHで接続します。割り当たっているIPアドレスを予め調べておきます。OS初期値のログインユーザーは[ユーザー:pi][パスワード:raspberry]です。
ssh pi@192.168.xxx.xxx
ログイン後、GPIOピンの状態を確認してみます。
gpio readall
[Physical]が物理的なボードのピン番号、[BCM]がGPIO番号になります。物理ピン40番がGPIO21だとわかります。初めの頃この番号の不一致に戸惑いましたが、こういうものと慣れるしかないです。
今回利用するGPIO21のModeが[IN]の状態になっているのが確認できます。[IN]は情報を受け取る側のモードです。今回はLEDへ信号を出力するので、モードを[OUT] に変更します。
echo 21 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio21/direction
上記コマンドは、[echo 文字列 > ファイル]の書式で、文字列をファイルに書き込むという意味あいです。GPIOピン[21]を利用し、モードを[OUT]に設定しています。再度GPIOピンの状態を確認してみます。
gpio readall
GPIO21が[IN]から[OUT]のモードに変わったのがわかります。
次はLEDを点灯させるためのコマンドです。[value]に[1]を入れると点灯、[0]を入れると消灯です。
//点灯
echo 1 > /sys/class/gpio/gpio21/value
//消灯
echo 0 > /sys/class/gpio/gpio21/value
valueの値を確認すると、書き換わっているのが確認できます。
//valueの値確認
cat /sys/class/gpio/gpio21/value
点滅
点灯と消灯を0.5 秒間隔で交互に実行し点滅させます。無限ループなので、[Ctrl]+[c]で停止します。
while :
do
echo 1 > /sys/class/gpio/gpio21/value
sleep 0.5
echo 0 > /sys/class/gpio/gpio21/value
sleep 0.5
done
1.5秒点灯、0.5秒消灯の変則的な点滅を5回繰り返します。画面上の表示とLEDの点灯がリンクします。
for i in `seq 1 5`
do
echo "$i 回目の点灯です。"
echo 1 > /sys/class/gpio/gpio21/value
sleep 1.5
echo 0 > /sys/class/gpio/gpio21/value
echo "消灯です。"
sleep 0.5
done
接続のタイミングで点灯するピンとしないピンの違い
他の方が書いたLチカのサイトを見てて、気になった記載がありました。それは[value]に1を入れなくても、ケーブルをLEDに接続したタイミングで点灯するというものです。自分の環境で試してみたところ、確かに接続したタイミングでLEDが点灯するGPIOピンが存在しました。
今回試したGPIO21は接続したタイミングでは点灯しなかったので、点灯するピンとしないピンの何が違うのか確認してみた結果、以下の通りでした。LEDを接続したタイミングで点灯するGPIOピンは、[gpio readall]コマンドで、Vの値が最初から1になっていました。0になっているピンは接続しても点灯しません。
覚えておくと便利
GPIOピンの確認は、[gpio readall] コマンドのほかに、以下のがあります。
pinout
物理ピンとGPIOピンの情報が確認できます。