プログラミングの合間に

マイコンのプログラミング奮闘記です。

3つのLEDを点滅させる(1)

MicroPythonでのLチカを解説する

以下のようにブレッドボードに3つのLEDをESP32に接続した回路を作成しました。これを題材にMicroPythonのプログラミングを解説します。

f:id:sawayaka_e1:20200830141456j:plain

ESP32のGPIOの13,27,33番にLEDが接続されています。この中から13番に接続したLEDを点灯させましょう。

以下がプログラムです。

import machine
import time

pin13 = machine.Pin(13, machine.Pin.OUT)

while True:
    pin13.on()
    time.sleep_ms(500)
    pin13.off()
    time.sleep_ms(500)

これは前回のプログラムとほぼ同じと思います。
では、1行目から見ていきましょう。

import machine

このimportpythonのライブラリを呼び出す命令になります。現代のプログラミングではライブラリがとても重要です。pythonではライブラリをモジュールと呼ぶので、machineモジュールをインポートするという事になります。
2行目も同様にtimeモジュールのインポートになります。

では、このmachinetimeモジュールはどのような機能をプログラムに追加しているのでしょうか?

ESP32用のMicroPythonを使用しているので、このmachineモジュールはESP32のハードウェア固有の機能にアクセスできるようになっています。今回のプログラムもLEDを点灯させるだけならmachineモジュールだけのインポートで良かったのですが、点滅させてみたかったので、もう一つモジュールが必要になりました。それが、timeモジュールです。これは時間に関するライブラリです。今回は処理の時間待ちの機能を使っています。

では、3行目
pin13 = machine.Pin(13, machine.Pin.OUT)
の解説ですが、ここから概念的なこともありますので、継続してお話しする事もあります。今回は、ESP32のピンに電流を流しLEDを点滅させることが目的なので、13番ピンに電流を流せる準備を行なっているのが3行目と思ってください。

ここからが、抽象的な話になります。まず、pin13に何かが代入されています。このpin13インスタンスと呼ばれ、特定の機能とデータを保存します。つまり、13番ピンに電流を流す準備をして、電流を流したり、状態を調べたりの機能です。だから、pin13.on()とすると電流が流れます。つまりLEDを点灯させることができます。

while True:は制御文で無限に繰り返す処理をしています。では、何を無限に繰り返しているのかと言うと、

    pin13.on()
    time.sleep_ms(500)
    pin13.off()
    time.sleep_ms(500)

この部分は、インデントと言うのですが、行の頭に空白が挿入されています。いわゆる、字下げなのですがpythonではオフサイドルールという字下げしている部分をひとつの塊と考えます。カッコなどで塊を表さないので、タイプミスが原因のエラーになりにくく、見やすいことが利点です。

time.sleep_ms(500)は500ミリ秒間の時間稼ぎを行う関数です。 そして、pi13に対してon()off()で電流を流したり、止めたりできます。

駆け足で説明しましたが、次回はこのプログラムからどうやって3つのLEDを点滅させるのか解説します。