3つのLEDを点滅させる(1)
MicroPythonでのLチカを解説する
以下のようにブレッドボードに3つのLEDをESP32に接続した回路を作成しました。これを題材にMicroPythonのプログラミングを解説します。
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
このimport
はpythonのライブラリを呼び出す命令になります。現代のプログラミングではライブラリがとても重要です。pythonではライブラリをモジュールと呼ぶので、machine
モジュールをインポートするという事になります。
2行目も同様にtime
モジュールのインポートになります。
では、このmachine
とtime
モジュールはどのような機能をプログラムに追加しているのでしょうか?
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を点滅させるのか解説します。