今までなんだかんだやっていませんでしたが、電子工作のHello,worldであるLチカをシェルスクリプトやPythonでやってみようと思います。
用意するもの(ラズパイ以外)
・LED
・抵抗(だいたい300Ω前後のもの)
・ジャンパワイヤ(オス-メス)
・ブレッドボード
下準備
ラズパイのGPIOピンに抵抗の一端を、抵抗のもう一端にLEDのアノードを、LEDのカソードをラズパイのGND端子に繋ぎます。
ラズパイのどの端子がGPIOやGNDになっているかは回路図などで調べられます。
ちなみに僕のラズパイは3B+なので、40番ピン(GPIO21)と39番ピン(GND)を利用しました。
ラズパイ3B+の回路図(ピン部分) |
echoコマンドでLピカ
まずは一番シンプルなターミナルからシェルでechoコマンドを使ってLチカならぬLピカをさせてみます。
echo文字列 > ファイル名 のコマンドは文字列をファイルに出力するコマンドです。
まずはechoコマンドでGPIOを使うことをラズパイに伝えます。
/sys/class/gpio/exportに21と出力することでGPIO21を使いますよーとラズパイに伝えています。
$ echo 21 > /sys/class/gpio/export
このコマンドにより、/sys/class/gpio/export内にGPIO21を制御するためのgpio21という名前のディレクトリが作成されます。
次に/sys/class/gpio/gpio21/directionにGPIO21が出力(=OUT)であることを伝えます。
$ echo out >
/sys/class/gpio/gpio21/direction
/sys/class/gpio/gpio21/valueにGPIO21をHIGH(=1)にしろ、と伝えます。
$ echo 1 > /sys/class/gpio/gpio21/value
これでLEDが点灯したと思います。
LEDを消灯しましょう。/sys/class/gpio/gpio21/valueにGPIO21をLOW(=0)にしろ、と伝えます。
$ echo 0 > /sys/class/gpio/gpio21/value
LEDは消灯しましたか?
最後に/sys/class/gpio/unexport にGPIO21が使い終わったことを伝えます。
$ echo 21 > /sys/class/gpio/unexport
このコマンドにより/sys/class/gpio/export内のgpio21ディレクトリが削除されGPIO21の制御が終了します。
シェルスクリプトでLチカ
シェルスクリプトでLEDを1秒間隔で点滅させてみます。
以下の内容のファイルをテキストエディタで作成します。ファイル名はなんでもいいです。(僕はledblinkというファイル名にしました)
#!/bin/bash
echo 21 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio21/direction
for((i=0;i<10;i++))
do
echo 1 > /sys/class/gpio/gpio21/value
sleep 0.5
echo 0 > /sys/class/gpio/gpio21/value
sleep 0.5
done
echo 21 > /sys/class/gpio/unexport
作成したらsudo bash ファイル名で実行してみます。sudoでsu権限を付与しないとLEDを制御できないので忘れずに。
$ sudo bash ledblink
1秒間隔(0.5秒間隔でついたり消えたり)で10回点滅したと思います。
PythonでLチカ
次はPythonでLチカしてみようと思います。
以下の内容のファイルをテキストエディタ等で作成します。ファイル名はなんでもいいです。(僕はledblink.pyというファイル名にしました)
#!/usr/bin/env python
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(21,GPIO.OUT)
for i in range(10):
GPIO.output(21,True)
time.sleep(0.5)
GPIO.output(21,False)
time.sleep(0.5)
GPIO.cleanup()
GPIO.setmode(GPIO.BCM)では以降の制御命令はGPIOの番号で指示ことを設定します。
GPIO.BCMならGPIO番号、GPIO.BOARDとすればボードのピン番号で命令できるようになります。
GPIO.setup(21,GPIO.OUT)はシェルコマンドでいうecho 21 > /sys/class/gpio/exportと同様のことを行っています。
GPIO.output(21,True)はecho 1 > /sys/class/gpio/gpio21/value、GPIO.cleanup()はecho 21 >
/sys/class/gpio/unexportと同様のことを行っています。
作成したら実行してみましょう。
$ python ledblink.py
シェルスクリプトでLチカのときのように1秒間隔で10回点滅したと思います。
0 件のコメント:
コメントを投稿