前回(Raspberry Piで 一緒に「Lチカ」しましょう(中編))は、ラズベリーパイのコマンドプロンプト上でLEDを点灯、消灯しました。LEDを手動で制御できたのは嬉しいのですがもうほんの少し実用的なものを作ってみます。
今回は簡単なPythonプログラムで簡易時計を作成し、LEDで時刻を示したいと思います。
(ただし、時刻を読み取る技術が必要です)
できあがりの動画はこちらになります。
本動画では22:18を表しています。
長い点滅が時/分の10の位、短い点滅が時/分の1の位を示しています。
つまり
長い点滅2回: 20時 + 短い点滅2回: 2時 = 22時
~続いて~
長い点滅1回: 10分 + 短い点滅8回: 8分 = 18分
という表示方法です。
ソースコード
それでは、ソースコードを見てみましょう。ソースコードをテキストに保存し、python3で実行してみましょう(python2.xで実行するとエラーになります)。
1.日付を取得するためにdatetimeおよびtimeライブラリのインポート
12from datetime import datetime
import time
2.GPIOを扱うためのGPIOライブラリのインポート★1
1import RPi.GPIO as GPIO
3.GPIOのモードを設定★2
12345GPIO.setmode(GPIO.BCM)
GPIO.setup(17, GPIO.OUT)
now = datetime.now() #現在の時刻を変数"now"に代入
n_hour = now.hour #変数"now"から「時」だけを抽出し"n_hour"に代入
n_min = now.minute #変数"now"から「分」だけを抽出し"n_min"に代入
4.現在時刻を標準出力に出力する
1print("現在時刻 ",n_hour,":",n_min)
5.「時」の2桁目を”hour10″に、1桁目を”hour1″に代入
12hour10 = int(n_hour/10)
hour1 = int(n_hour%10)
6.「分」の2桁目を”min10″に、1桁目を”min1″に代入
12min10 = int(n_min/10)
min1 = int(n_min%10)
7.それぞれ、何秒ずつ点灯させるか時間設定 タプルのリストを”TimeDuration”と設定する
1234TimesDuration = [(hour10,1),
(hour1,0.2),
(min10,1),
(min1,0.2)]
8.間を取るために3秒間待つ
123456789101112time.sleep(3)
for times, dur in TimesDuration:
for i in range(1, times+1):
print(times, dur, i)
GPIO.output(17, True) #GPIO 17番をON★3
print("●", end="")
time.sleep(dur)
GPIO.output(17, False)#GPIO 17番をOFF★4
print("○", end="")
print("")
time.sleep(2)
GPIO.cleanup() #GPIOの設定を初期化★5
解説
本記事は、日本サード・パーティ株式会社(JTP)にて、執筆しています。
JTPは約30年に渡り、様々なベンダーのサポートを行う企業です。 設計、構築、開発、運用、ヘルプデスク、トレーニングなど、ITのライフサイクルを通して技術サービスを提供しています。
中でも、JTP の IT教育サービスでは、クラウド、Hadoop関連技術など、OSS の最新技術 トレーニングを数多く実施しています。
JTPでは、経験豊富なエンジニア、講師陣により、多くの技術記事を公開しております。
▼JTPの情報メディア「JTP Technology Port」はこちらから!