Raspberry Piで 一緒に「Lチカ」しましょう(後編)

Raspberry Piで 一緒に「Lチカ」しましょう(後編)

前回(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ライブラリのインポート
    from datetime import datetime
    import time
  2. GPIOを扱うためのGPIOライブラリのインポート★1
    import RPi.GPIO as GPIO
  3. GPIOのモードを設定★2
    GPIO.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. 現在時刻を標準出力に出力する
    print("現在時刻 ",n_hour,":",n_min)
  5. 「時」の2桁目を”hour10″に、1桁目を”hour1″に代入
    hour10 = int(n_hour/10)
    hour1 = int(n_hour%10)
  6. 「分」の2桁目を”min10″に、1桁目を”min1″に代入
    min10 = int(n_min/10)
    min1 = int(n_min%10)
  7. それぞれ、何秒ずつ点灯させるか時間設定 タプルのリストを”TimeDuration”と設定する
    TimesDuration = [(hour10,1),
                    (hour1,0.2),
                    (min10,1),
                    (min1,0.2)]
  8. 間を取るために3秒間待つ
    time.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

解説

Pythonの基本的な構文まではページの都合上、触れることはできませんが、GPIOに特化した部分を解説していきます。PythonからGPIOを制御するポイントとなるのは上記の★印の★1から★5になります。

それでは、それぞれ解説していきます。

★1. GPIOライブラリのインポート

import RPi.GPIO as GPIO

GPIOを扱うためには必須の行になります。また、RPi.GPIOと呼び出すと可読性が下がるため、「GPIO」と省略して扱えるようにしています。

★2. GPIOのモードを設定

GPIO.setmode(GPIO.BCM)
GPIO.setup(17, GPIO.OUT)a

★1で呼び出したライブラリを早速使っています。

前回のコマンドプロンプトで指定した時と同様にBCM17を出力としてGPIO.setup()で指定します。GPIO.setup()の中で17と指定していますが、この番号が物理的なピンの番号なのか、内部的なBCMの番号なのかを明確にする必要があります。BCMでの指定である旨をGPIO.setmode()で記述しています。

★3. GPIO 17番をON

GPIO.output(17, True)

電圧をかけて、LEDを点灯させます。

★4. GPIO 17番をOFF

GPIO.output(17, False)

解除してLEDを消灯させます。
※★3, ★4を繰り返すことで点滅させることができます。

★5. GPIOの設定を初期化

GPIO.cleanup()

GPIOの設定を初期化します。使い終わったら、リセットするという作法です。

まとめ

いかがでしたでしょうか。PythonにもGPIOのライブラリが用意されているので簡単にGPIOを制御できることが分かりましたね。
今回は最も基本的なLEDの制御でしたが、LCDを接続して時刻を表示させたり、工夫次第で温度計、人感センサーを組み合わせたり、さらにPCと同様にネットワーク/インターネットに接続してデータを送受信することも可能です。

最終的にはみなさんのアイデア次第なのです。

よいラズパイライフを送りましょう。

記事は、予告なく変更または削除される場合があります。
記載された情報は、執筆・公開された時点のものであり、予告なく変更されている場合があります。
また、社名、製品名、サービス名などは、各社の商標または登録商標の場合があります。