CPU温度に合わせてCPUファンの回転速度を制御する前に、基本中の基本ともいえる「Lチカ」に挑戦します。ただ挑戦しても面白みがないので、GUIを使い「点灯回数」「点灯時間」「消灯時間」を自由に入力できるプログラムにしたいと思います。
Lチカの電子回路 ーLEDの配置についてー
接続は簡単でブレッドボードを使用して「11番ピン」→「抵抗」→「LED」→「GND」となるように繋いでいます。抵抗はLEDとセットで販売されていたものなので、難しいことを考えることなく接続しています。
今回作ったプログラム
今回は「RPi.GPIO」というライブラリを使用しました。私の環境では最初からインストールされていました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
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」については、前回も使用していますので説明を一部省略しています。下記のリンク先で説明しています。
(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を点灯させると楽しいかもしれません。
まとめ
最後まで読んでいただき、ありがとうございました。
本記事では、プログラミングの基本であるLEDの点灯制御(Lチカ)について解説いたしました。
しかも、ちょっとした工夫で制御時間を変更できるウィンドウを作ることが出来ますので、GUIの勉強にもなりとても楽しいです。
今回使用したもの
今回使用した、ブレッドボードはこちらです。
LEDは手持ちのものを使用しましたが、セットになったものも販売されています。よく使う部品ばかりですので、初めての方は購入すると良いかもしれません。