IOT機器「Raspberry Pi」でLEDを光らせる!(通称:Lチカ)

IoTはじめました

こんにちは、データビジネスソリューション本部DBソリューション部の鑓田です。

前回ブログ「IoT機器『Raspberry Pi(ラズベリーパイ)』使ってみた」では、Raspberry Piのセットアップまでご紹介しました。
今回は、Raspberry Piを使ってLEDを光らせる手順(通称:Lチカ)をご紹介します。

1.Raspberry PiのGPIOの説明

シングルボードコンピュータ(Raspberry Pi)には、GPIOと呼ばれる汎用I/Oポートが搭載されています。
下記画像の赤丸部分(ミドルPCを組み立てる時に配線を指す部分)です。

iot02_01.png

2.GPIOピンの役割

GPIOピンは1本1本に役割が決められています。
ここでは図を使って大まかな役割を説明します。

●Pin No:左側が奇数PinNo、右側が偶数PinNoが割り当てられています
●赤枠白字:主に電圧を供給するGPIOピン(給電)
●黒枠白字:アース(供給された電力を受流すGPIOピン)
●GPIO(数値):シングルボードコンピュータより入出力を指定するGPIOピン(後述するプログラムで利用する変数にもなります)

※GPIOのナンバーはRaspberry Piでは共通となります。
番号が飛び飛びになって少し覚えづらいのはご愛敬。

iot02_02.png

3.Lチカに必要な部品

●ジャンパワイヤー
GPIOピンからブレッドボードへ接続するためのワイヤーです(画像はジャンパワイヤーオス)。

iot02_03.png

●ブレッドボード
ジャンパワイヤーや電子部品へ電力を流すためのボードです。
+(プラス)の部分にシングルボードコンピュータから電圧を供給させ、-(マイナス)の部分からシングルボードコンピュータのGNDへ電圧を流すように接続するのが一般的です。
※+-の列を使わないで、中央部分を直接使っても問題ありません。
ブレッドボードという名前は、大昔はパンを切る時に使うまな板を代用していたことに由来します。

iot02_04.png

●発光LEDライト
今回は赤色を光らせてみます。
LEDライトの色によって、綺麗に光らせるための電圧が異なるので注意。

iot02_05.png

●抵抗器(Ω)
給電された電圧を調整するための抵抗。

iot02_06.png

4.組立て(構成図)

GPIOの入出力を使わずに単純にLEDを光らせる構成は、以下の図の通りになります。

●作業1
3.3V(PinNo.1)からブレッドボードへ接続する

●作業2
100Ωの抵抗器を経由して3.3Vの電圧を2Vへ近づける
※抵抗器は細かい数値のものはないので、近い抵抗値のもので構いません

●作業3
LEDの+(プラス)側へ電流が流れるように配線する

※注意
この向きを間違えると、電流を流した瞬間にLED内部が破裂します
必ず足が長い方へ配線するよう、ご注意ください

●作業4
LEDの-(マイナス)側からシングルボードコンピュータのGNDへ配線する

iot02_07.png

これで3.3Vの電圧から電流がLEDに流れて、発光することが確認できるはずです。
しかし、GPIOの箇所は利用していないため、プログラムでI/O制御することはできません。

プログラム制御するためには、GPIOを利用した構成が必要となります。
GPIOピンを利用した構成図は以下の通りになります。
3本のLEDを順番に光らせてみましょう!

iot02_08.png

5.Pythonで動作確認

ここまできたら、あとはプログラムを組んで動作を確認しましょう。
Raspberry PiにはPythonの開発環境がインストール済みなので、Thonny Python IDEを使います。

iot02_09.png

<Thonny Python IDE の補足>

iot02_10.png

1 | import Rpi.GPIO as GPIO     GPIOに関わるライブラリ宣言		
2 | Import  time           Pythonで時間に関わる処理のライブラリ宣言		
3 | LED=2              変数宣言、2、4、17はGPIOピンの番号を変数に格納する		
4 | LED2=4								
5 | LED3=17								
6 | wait=1								
7 | GPIO.setmode(GPIO.BCM)		  役割ピン番号指定(BCM)、これ以降はGPIO番号が認識可能となる		
						        物理ピン番号指定(BOARD)もあり、PinNoを指定したい場合はこちらを使う(お好みで使い分けてください)		
8 | GPIO.setup(LED,GPIO.OUT)    GPIOの入出力を出力と設定(今回はLEDを光らせるために出力のOUTを設定します)		
9 | GPIO.setup(LED2,GPIO.OUT)								
10| GPIO.setup(LED3,GPIO.OUT)								
11| while True:						  以下をループする		
12|     GPIO.output(LED, GPIO.HIGH)      GPIO2の出力をHIGH(点灯)に指定		
13|     time.sleep(wait)            1秒待機		
14|     GPIO.output(LED, GPIO.LOW)      GPIO2の出力をLOW(消灯)に指定		
15|     GPIO.output(LED2, GPIO.HIGH)     GPIO4の出力をHIGH(点灯)に指定		
16|     time.sleep(wait)								
17|     GPIO.output(LED2, GPIO.LOW)      GPIO4の出力をLOW(消灯)に指定		
18|     GPIO.output(LED3, GPIO.HIGH)     GPIO17の出力をHIGH(点灯)に指定		
19|     time.sleep(wait)								
20|     GPIO.output(LED3, GPIO.LOW)      GPIO17の出力をLOW(消灯)に指定		
21|     time.sleep(wait)								

Thonny Python IDE の1行デバックを行うと、3つのLEDが順番に光るように(Lチカ)、プログラムから操作できます。
今回のソースは単純なものですが、大量のLEDをLチカさせることで幻想的な表現なども作れそうな気がしてワクワクしますね。
よろしければ是非試してください。

今回はここまでとなります。
最後まで読んでいただき、ありがとうございました。