【Raspberry Pi】電子工作のHelloWorld 「Lチカ」
Lチカ!!
新しい言語を始めるとき、とりあえず「Hello World」から始めますが、
電子工作のHelloWorldは、LEDをチカチカさせる事かなと思います。
(LCDにHelloWorldの文字列を出力するとかじゃないです! )
「豆電球を電池につなげば明かりがつく」ようなものですかね。
豆電球との違いは、LEDには極性があるという事。
プラスとマイナスの向きが逆だと点灯しません。
そして抵抗が必要だという事。
豆電球よりもデリケートなのです。
さて、ラズパイには、3.3V、5V、GND、GPIOのピンが存在します。
単純にLEDを点灯させるだけならば、
3.3Vピン - 抵抗 - LED - GND
のようにすれば、LEDは光ります。 (Lピカというらしい・・・)
これでは、単に豆電球を電池に繋いだだけのような状態ですので、
電子工作らしく点滅させます。(これがLチカ!)
3.3Vに繋いでいた線を、GPIOピンに繋ぎ変え、
プログラムでピンの出力を制御することで、LEDを点滅させます。
C++ や js (node.js)でも制御できるようですが、pythonの勉強も兼ねているため、pythonでやります。
import RPi.GPIO as GPIO
from time import sleep
LED = 2
GPIO.setmode(GPIO.BCM)
GPIO.setup(LED, GPIO.OUT)
try:
while True:
GPIO.output(LED, GPIO.HIGH)
sleep(1)
GPIO.output(LED, GPIO.LOW)
sleep(1)
except KeyboardInterrupt:
pass
GPIO.cleanup()
ソースコードはこんな感じ。pythonは2系です。
line1: import RPi.GPIO as GPIO
GPIO制御のためもモジュールを読み込み、エイリアスを付ける。
line5: GPIO.setmode(GPIO.BCM)
ピンのモード指定方法の設定。GPIO.BOARD とすると左上からの連番になるらしい。
連番の方が分かりやすいけど、BCMの方が一般的だと思う。
line6: GPIO.setup(LED, GPIO.OUT)
BCMの2番ピンを出力に設定する。 GPIO_IN とすると、ピンの状態を読むモードになる。
line10: GPIO.output(LED, GPIO.HIGH)
2番ピンに3.3Vの電圧をかける。つまりLEDが点灯する。
line10: GPIO.output(LED, GPIO.LOW)
2番ピンに0Vの電圧をかける。(表現あってる?)つまりLEDが消灯する。
以上が、1秒おきに点灯と消灯を繰り返すプログラムです。
無限に繰り返すので、終了するときは、Ctrl-cを押します。
ループをJavaでいうところの try-catch のようなもので囲い、
Ctrl-cで終了したときに、後処理を行います。
passは何もしないという意味ですが、その後GPIO.cleanup()
が呼ばれ
GPIOピンが初期化され、プログラムが終了します。
動画とか撮ってみた
まとめ
とりあえず、Lチカは無事に出来ました。
プログラムは思いのほかシンプルで良い感じです。
普段Javaを利用している身としては、pythonの動的型付けに違和感があります。(怖い)
行末のセミコロンが不要(あっても良いらしい)だったり、 ブロックをインデントで表現したりするのが、pythonの特徴ですね。(初心者の感想)
追記
プラグイン入れたらコード部分が映えるようになったけど、むしろ浮いているような・・・
静止画ではLピカとLチカの違いが分からないので動画撮ってみましたが、良い感じですね。
Discussion