ラズベリーパイは基板上に「GPIO」と呼ばれる、ラズベリーパイ上で作成したプログラムから信号の入力・信号の出力が行えるピンが存在します。
信号の入力とは「スイッチのON/OFF」「温度計で室温の計測」といった、ラズベリーパイの外の情報を入力(インプット)してプログラム上で使用することです。
対して、信号の出力とは「LEDを点灯させる」「モータを回す」といった、ラズベリーパイで制御した結果を外に出力(アウトプット)することです。
この記事では、ラズベリーパイのプログラム(Python)を用いてGPIOピンから信号を出力して3色のLED(赤・黄・緑)を0.5秒の間隔で5回順番に点滅させる方法について解説します。
目次
1. 完成イメージ(LEDを0.5秒の間隔で点滅する)
この記事で完成するものは以下のようになります。
ラズベリーパイのGPIOピンをブレッドボードに接続して、プログラム(Python)からLEDを赤→黄→緑の順番に0.5秒間隔で5回点滅させます。(見えにくくてすいません…)
2. 使用する部品
今回使用する部品は以下の通りです。
『Raspberry Pi 3 Model B+』を使用します。※2020年3月時点で最新はRaspberry Pi 4になります。
LEDや抵抗といった各種部品や(後述する)ジャンパ線などを穴に差し込み、部品間を電気的に接続する板(ボード)です。
電子工作をする上で必須の部品です。
ブレッドボートに差し込み、電子部品の間を電気的に接続します。
↑の写真では両側が「ピン」になっており、ブレッドボートの穴に差し込んで使用します。
日常生活でも馴染みがある方も多いLEDは「Light emitting diode」の略で、発光ダイオードと呼ばれています。
電子工作で頻繁に使用するLEDは極性があり、プラスとマイナスを逆に接続しても光りません。プラス側をアノード(Anode)、マイナス側をカソード(Cathode)とも呼びます。
今回は赤・黄・緑の3色を使用します。
LEDなど電子部品は適した電圧と電流が決められており、それ以上の電流を流してしまうと壊れてしまう場合があります。
抵抗は電流の流れを抑えることで、部品に流れる電流を抑える役割を担います。
今回は220Ω(オーム)の抵抗器を使用します。
電子工作をするため、これまで解説した部品の他にもスイッチやセンサなど、色々な部品が必要になってきます。個々で購入するには手間がかかるため、最初はセット品を購入することをおススメします。
私は以下のセット品を購入しました!
また、これからラズベリーパイを購入する場合、ラズベリーパイ本体を含めたセット品を購入することをおススメします。
ラズベリーパイ本体を収めるケースや、OSをインストールするためmicroSDカードなど必要なものを個々に購入する手間を省くことができます。
3. 回路図・配線の様子
ラズベリーパイのプログラム(Python)からGPIOピンを用いて3色のLED(赤・黄・緑)を0.5秒の間隔で5回順番に点滅させるための回路を解説します。
回路図は以下のようになります。
ラズベリーパイの「GPIO 25番ポート」と赤LEDのプラス側(アノード)を接続します。(オレンジ色のジャンパ線)
ラズベリーパイの「GPIO 23番ポート」と黄LEDのプラス側(アノード)を接続します。(黄色のジャンパ線)
ラズベリーパイの「GPIO 18番ポート」と緑LEDのプラス側(アノード)を接続します。(緑色のジャンパ線)
各々のLEDのマイナス側(カソード)と抵抗(220Ω)を接続して、抵抗とGNDを接続します。(黒いジャンパ線)
配線の様子です。こんな感じになりました。
↑では、フラットケーブルでGPIOの全ピンをブレッドボードに接続しています。回路図と実際の配線は異なる部分がありますがご了承ください。
※電気的には「回路図」と同じ意味です。
4. プログラム(Python)
3色のLED(赤・黄・緑)を0.5秒の間隔で5回順番に点滅させるプログラム(Python)は以下のようになります。
#必要なモジュールをインポート
import RPi.GPIO as GPIO #GPIO用のモジュールをインポート
import time #時間制御用のモジュールをインポート
#ポート番号の定義
Led_red_pin = 25 #変数"Led_red_pin"に25を格納
Led_yellow_pin = 23 #変数"Led_yellow_pin"に23を格納
Led_green_pin = 18 #変数"Led_green_pin"に18を格納
#GPIOの設定
GPIO.setmode(GPIO.BCM) #GPIOのモードを"GPIO.BCM"に設定
GPIO.setup(Led_red_pin, GPIO.OUT) #GPIO25を出力モードに設定
GPIO.setup(Led_yellow_pin, GPIO.OUT) #GPIO23を出力モードに設定
GPIO.setup(Led_green_pin, GPIO.OUT) #GPIO18を出力モードに設定
#for文で5回繰り返す
for i in range(5):
GPIO.output(Led_red_pin, GPIO.HIGH) #GPIO25の出力をHigh(3.3V)にする
time.sleep(0.5) #0.5秒間待つ
GPIO.output(Led_red_pin, GPIO.LOW) #GPIO25の出力をLow(0V)にする
GPIO.output(Led_yellow_pin, GPIO.HIGH) #GPIO23の出力をHigh(3.3V)にする
time.sleep(0.5) #0.5秒間待つ
GPIO.output(Led_yellow_pin, GPIO.LOW) #GPIO23の出力をLow(0V)にする
GPIO.output(Led_green_pin, GPIO.HIGH) #GPIO18の出力をHigh(3.3V)にする
time.sleep(0.5) #0.5秒間待つ
GPIO.output(Led_green_pin, GPIO.LOW) #GPIO18の出力をLow(0V)にする
GPIO.cleanup() #GPIOをクリーンアップ
GPIOの各ポート(18・23・25番)の電圧をプログラム(Python)から「High(3.3V)にしてLEDを点灯」と「Low(0V)にして消灯」をfor文で5回繰り返すプログラムです。
#必要なモジュールをインポート
import RPi.GPIO as GPIO #GPIO用のモジュールをインポート
import time #時間制御用のモジュールをインポート
2行目と3行目で、LEDを0.5秒の間隔で点滅させるために必要な「モジュール」を宣言します。
#ポート番号の定義
Led_red_pin = 25 #変数"Led_red_pin"に25を格納
Led_yellow_pin = 23 #変数"Led_yellow_pin"に23を格納
Led_green_pin = 18 #変数"Led_green_pin"に18を格納
以下のようにそれぞれの変数に数値を格納します。この数値はGPIOのポート番号として扱い、後からポート番号を変更する場合はこの数値を変更します。
Led_red_pin | :数値25を格納(赤のLED用) |
Led_yellow_pin | :数値23を格納(黄のLED用) |
Led_green_pin | :数値18を格納(緑のLED用) |
#GPIOの設定
GPIO.setmode(GPIO.BCM) #GPIOのモードを"GPIO.BCM"に設定
GPIO.setup(Led_red_pin, GPIO.OUT) #GPIO25を出力モードに設定
GPIO.setup(Led_yellow_pin, GPIO.OUT) #GPIO23を出力モードに設定
GPIO.setup(Led_green_pin, GPIO.OUT) #GPIO18を出力モードに設定
GPIOの設定を行います。
GPIO.setmode(GPIO.BCM)は、GPIO.setmode()を用いてGPIOをポート番号で扱う方法に設定します。
GPIO.setup(Led_red_pin, GPIO.OUT)は、GPIO.setup()を用いてGPIO 25番ポートを出力モードに設定します。
GPIO.setup(Led_yellow_pin, GPIO.OUT)とGPIO.setup(Led_green_pin, GPIO.OUT)にて、GPIO 18・23番ポートも同様に出力モードに設定します。
#for文で5回繰り返す
for i in range(5):
GPIO.output(Led_red_pin, GPIO.HIGH) #GPIO25の出力をHigh(3.3V)にする
time.sleep(0.5) #0.5秒間待つ
GPIO.output(Led_red_pin, GPIO.LOW) #GPIO25の出力をLow(0V)にする
GPIO.output(Led_yellow_pin, GPIO.HIGH) #GPIO23の出力をHigh(3.3V)にする
time.sleep(0.5) #0.5秒間待つ
GPIO.output(Led_yellow_pin, GPIO.LOW) #GPIO23の出力をLow(0V)にする
GPIO.output(Led_green_pin, GPIO.HIGH) #GPIO18の出力をHigh(3.3V)にする
time.sleep(0.5) #0.5秒間待つ
GPIO.output(Led_green_pin, GPIO.LOW) #GPIO18の出力をLow(0V)にする
「for文」と「range()関数」を用いて繰り返し処理の回数を指定します。
for 変数 in range(繰り返す回数):
繰り返し処理を行うコード
↑の「繰り返す回数」に”5”を指定することにより処理を5回繰り返します。繰り返す回数を変更する場合はここを変更します。
GPIO.output(Led_red_pin, GPIO.HIGH)は、GPIO 25番ポートの電圧をHigh(3.3V)にします。ここで赤LEDは3.3Vが印加され点灯します。
time.sleep(0.5)は、何もせずに0.5秒間待ちます。この処理を行うために2行目でtimeモジュールをインポートしています。
GPIO.output(Led_red_pin, GPIO.LOW)は、GPIO 25番ポートの電圧をLow(0V)にします。ここで赤LEDは消灯します。
同様の処理を黄LED・緑LEDでも行っています。
for文の中でGPIO 18・23・25番ポートを、High(3.3V)にして点灯、Low(0V)にして消灯を5回繰り返します。
5. おわりに
ラズベリーパイのプログラム(Python)を用いてGPIOピンから信号を出力して3色のLED(赤・黄・緑)を0.5秒の間隔で5回順番に点滅させる方法を解説しました。
for文を用いて1ヶのLEDを点滅させる方法については以下のページで解説しておりますので、宜しければご覧ください。
【ラズパイ電子工作】LEDをチカチカ点滅させる方法(for文で回数指定)while文を使用して、LEDを無限に点滅する方法については以下のページで解説しておりますので、宜しければご覧ください。
【ラズパイ電子工作】LEDをチカチカ点滅させる方法(while文で無限ループ)まだまだラズベリーパイ初心者の私ですが、以下の参考書が大変参考にさせて頂いております。
2冊とも初学者にも易しい内容になっており、ゼロからラズベリーパイを始める方にもオススメできる参考書です。
このLEDのやり方知りたいです