知識ゼロから始めるラズパイ -GUIでLEDの点灯制御-

CPU温度に合わせてCPUファンの回転速度を制御する前に、基本中の基本ともいえる「Lチカ」に挑戦します。ただ挑戦しても面白みがないので、GUIを使い「点灯回数」「点灯時間」「消灯時間」を自由に入力できるプログラムにしたいと思います。

目次

Lチカの電子回路 ーLEDの配置についてー

接続は簡単でブレッドボードを使用して「11番ピン」→「抵抗」→「LED」→「GND」となるように繋いでいます。抵抗はLEDとセットで販売されていたものなので、難しいことを考えることなく接続しています。

LED点灯回路

今回作ったプログラム

今回は「RPi.GPIO」というライブラリを使用しました。私の環境では最初からインストールされていました。

import RPi.GPIO as GPIO
import tkinter as tk
import time

def LED_shine():

    GPIO.setmode(GPIO.BCM) # PIN番号にするときは(GPIO.BOARD)

    pin = 17 # BCMの番号
    GPIO.setup(pin, GPIO.OUT) #入力にする場合は(GPIO.IN)

    rg = text1.get()
    rg = int(rg)
    on = text2.get()
    on = int(on)/1000
    of = text3.get()
    of = int(of)/1000

    for i in range(rg):
        GPIO.output(pin, GPIO.HIGH) # LED on
        time.sleep(on)
        GPIO.output(pin, GPIO.LOW) # LED off
        time.sleep(of)
    
    GPIO.cleanup()

win = tk.Tk()
win.geometry("300x180")
win.title("LEDの点灯制御")

label1 = tk.Label(win,text="ループ回数")
label1.place(x=30,y=10)
text1 = tk.Entry(width=10)
text1.insert(0,10)
text1.place(x=150,y=10)

label2 = tk.Label(win,text="点灯時間(ms)")
label2.place(x=30,y=50)
text2 = tk.Entry(width=10)
text2.insert(0,500)
text2.place(x=150,y=50)

label3 = tk.Label(win,text="消灯時間(ms)")
label3.place(x=30,y=90)
text3 = tk.Entry(width=10)
text3.insert(0,500)
text3.place(x=150,y=90)

but1 = tk.Button(win,text="スタート",command = LED_shine)
but1.place(x=100,y=130)

win.mainloop()

プログラムの説明

「tkinter」については、前回も使用していますので説明を一部省略しています。下記のリンク先で説明しています。

ComoAki Site
知識ゼロから始めるラズパイ -CPU温度の監視をGUIで- ラズベリーパイ(Raspberry PI 4B)のCPU温度の監視することのできるGUIアプリをPythonで作成してみました。プログラミングは慣れていないので、非効率な記述となっていた...
(1行目)import RPi.GPIO as GPIO

「RPi.GPIO」をインポートして、「GPIO」という名前に省略しています。

(5行目)def LED_shine():

「LED_shine」という名前の関数を作成します。あとでtkinterで作成するボタンを押したときに、この関数が動作する仕組みです。

(7~10行目)
  • GPIO.setmode(GPIO.BCM) は、GPIOの番号をBCMで指定する記述です。ピン番号を使用する場合はBCMのところをBOARDに変更します。
  • pin = 17  変数「pin」に数字の「17」を格納
  • GPIO.setup(pin, GPIO.OUT) は、BCM番号17番を電気を出力させる記述です。逆に、入力の場合はINを使うようです。

ラズベリーパイのピン配列

説明書によると、ラズパイのピン配列はこのようになっています。今回はBCM17番(ピン番号11番)を使用しました。

(12~17行目)

GUIのウインドウに入力された文字列をgetして、int型にしています。入力は(ms:1ミリ秒)としているので、1000で割り戻しています。「rg」にループ回数、「on」に点灯時間、「of」に消灯時間を格納させています。

(19~23行目)

先ほど取得した、ループ回数、点灯時間、消灯時間どおりにLEDを点灯させる記述です。

(25行目)GPIO.cleanup()

GPIOを終了させる記述です。そしてここまでが、関数LED_shineの記述です。

(31~47行目)
  • label1 = tk.Label(win,text=”ループ回数”) :文字のラベル
  • label1.place(x=30,y=10) :label1の配置場所の指定
  • text1 = tk.Entry(width=10) :文字入力ボックスの作成
  • text1.insert(0,10) :文字入力ボックスへの初期値を「10」にしています。insertは無しでもプログラムは動作しますが、何度も入力するのが面倒なので記述しました。
  • text1.place(x=150,y=10) :text1を配置します。
(49~50行目)

but1 = tk.Button(win,text=”スタート”,command = LED_shine)
but1.place(x=100,y=130)

この2行で、「スタート」というボタンを配置し、ボタンを押すと関数「LED_shine」を動かす記述です。

完成

Pythonを実行すると、このようなウィンドウが出現します。「ループ回数」「点灯時間」「消灯時間」を入力してスタートボタンを押すと、LEDが点灯します。

プログラム実行後表示されるウインドウ

使用するLEDは1つだけの簡単なプログラムですが、ほかのピンも使用して色々な色のLEDを点灯させると楽しいかもしれません。

ComoAki Site
知識ゼロから始めるラズパイ -CPU温度によるファン制御- RaspberryPIに小型のCPUファンをつけたところ、常に全力で回転する仕様のためノイズに悩まされていました。そこで、ラズパイのCPU温度を取得して、温度に合わせた回転とす...

 

まとめ

最後まで読んでいただき、ありがとうございました。

本記事では、プログラミングの基本であるLEDの点灯制御(Lチカ)について解説いたしました。

しかも、ちょっとした工夫で制御時間を変更できるウィンドウを作ることが出来ますので、GUIの勉強にもなりとても楽しいです。

今回使用したもの

今回使用した、ブレッドボードはこちらです。

[amazon asin=”B00DSKCS68″ kw=”サンハヤト ブレッドボード”]

LEDは手持ちのものを使用しましたが、セットになったものも販売されています。よく使う部品ばかりですので、初めての方は購入すると良いかもしれません。

[amazon asin=”B08BF58FWX” kw=”発光ダイオード セット”]

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次