Prismjs

2019年3月23日土曜日

RaspberryPiでLチカ(シェルスクリプト&Python)


今までなんだかんだやっていませんでしたが、電子工作のHello,worldであるLチカをシェルスクリプトやPythonでやってみようと思います。



用意するもの(ラズパイ以外)

LED
・抵抗(だいたい300Ω前後のもの)
・ジャンパワイヤ(オス-メス)
・ブレッドボード



下準備

ラズパイのGPIOピンに抵抗の一端を、抵抗のもう一端にLEDのアノードを、LEDのカソードをラズパイのGND端子に繋ぎます。
ラズパイのどの端子がGPIOGNDになっているかは回路図などで調べられます。
ちなみに僕のラズパイは3B+なので、40番ピン(GPIO21)と39番ピン(GND)を利用しました。
ラズパイ3B+の回路図(ピン部分)


echoコマンドでLピカ

まずは一番シンプルなターミナルからシェルでechoコマンドを使ってLチカならぬLピカをさせてみます。
echo文字列 > ファイル名 のコマンドは文字列をファイルに出力するコマンドです。
まずはechoコマンドでGPIOを使うことをラズパイに伝えます。
/sys/class/gpio/export21と出力することでGPIO21を使いますよーとラズパイに伝えています。
$ echo 21 > /sys/class/gpio/export
このコマンドにより、/sys/class/gpio/export内にGPIO21を制御するためのgpio21という名前のディレクトリが作成されます。

次に/sys/class/gpio/gpio21/directionGPIO21が出力(=OUT)であることを伝えます。
$ echo out > /sys/class/gpio/gpio21/direction

/sys/class/gpio/gpio21/valueGPIO21HIGH=1)にしろ、と伝えます。
$ echo 1 > /sys/class/gpio/gpio21/value
これでLEDが点灯したと思います。

LEDを消灯しましょう。/sys/class/gpio/gpio21/valueGPIO21LOW=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チカ

シェルスクリプトでLED1秒間隔で点滅させてみます。
以下の内容のファイルをテキストエディタで作成します。ファイル名はなんでもいいです。(僕は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 ファイル名で実行してみます。sudosu権限を付与しないとLEDを制御できないので忘れずに。
$ sudo bash ledblink

1秒間隔(0.5秒間隔でついたり消えたり)で10回点滅したと思います。

PythonLチカ

次はPythonLチカしてみようと思います。
以下の内容のファイルをテキストエディタ等で作成します。ファイル名はなんでもいいです。(僕は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/valueGPIO.cleanup()echo 21 > /sys/class/gpio/unexportと同様のことを行っています。

作成したら実行してみましょう。
$ python ledblink.py
シェルスクリプトでLチカのときのように1秒間隔で10回点滅したと思います。



0 件のコメント:

コメントを投稿