ESP32のMicroPythonでLチカする方法(2)

この記事では、インストールしたMicroPythonでESP32のLEDを点滅させる方法を解説します。

この記事で学べること

  • MicroPythonのモジュールの調べ方
  • LEDを点滅させるプログラム

ステップごとの解説

  1. MicroPythonのモジュールを調べる
    MicroPythonのモジュールに、neopixelがあるか調べます。
    REPLにて、help(‘modules’)を実行します。neopixelがリストに表示されるのでモジュールにあることがわかります。
MicroPython v1.25.0 on 2025-04-15; Generic ESP32S3 module with ESP32S3
Type "help()" for more information or .help for custom vREPL commands.

>>> help('modules')
__main__          btree             io                ssl
_asyncio          builtins          json              struct
_boot             cmath             machine           sys
_espnow           collections       machine           time
_onewire          cryptolib         math              tls
_thread           deflate           micropython       uasyncio
_webrepl          dht               mip/__init__      uctypes
aioespnow         ds18x20           neopixel          umqtt/robust
apa106            errno             network           umqtt/simple
array             esp               ntptime           upysh
asyncio/__init__  esp32             onewire           urequests
asyncio/core      espnow            os                vfs
asyncio/event     flashbdev         platform          webrepl
asyncio/funcs     framebuf          random            webrepl_setup
asyncio/lock      gc                re                websocket
asyncio/stream    hashlib           requests/__init__
binascii          heapq             select
bluetooth         inisetup          socket
Plus any modules on the filesystem
>>> 
  1. neopixelのモジュールの関数を調べる
    neopixelのモジュールの関数一覧を表示させます。
    REPLにて、import neopixelの後、dir(neopixel)を実行すると、NeoPixelという関数があることがわかります。さらに、dir(neopixel.NeoPixel)を実行すると、writeという関数があることがわかります。
MicroPython v1.25.0 on 2025-04-15; Generic ESP32S3 module with ESP32S3
Type "help()" for more information or .help for custom vREPL commands.

>>> import neopixel
>>> dir(neopixel)
['__class__', '__name__', '__dict__', '__file__', 'bitstream', 'NeoPixel', '__version__']
>>> dir(neopixel.NeoPixel)
['__class__', '__getitem__', '__init__', '__len__', '__module__', '__name__', '__qualname__', '__setitem__', 'write', '__bases__', '__dict__', 'fill', 'ORDER']
  1. NeoPixelを駆動するためのGPIOを調べる
    NeoPixel 駆動のためにGPIOを使うのですが、GPIOは下図のピンレイアウトに載っていますので、 21 を出力に設定します。
  1. neopixelモジュールをインポートして、GPIOを設定する
    main.pyに、import neopixelを記入します。次に、NeoPixel 駆動のためにGPIOを使うので、import machineを記入します。neopixelを駆動するためのGPIOは21を出力に設定します。
    NeoPixelはRGBのLEDなので、白を設定して点灯させます。
import neopixel
import machine

pin = machine.Pin(21, machine.Pin.OUT)   # NeoPixel 駆動のための GPIO 21 を出力に設定
np = neopixel.NeoPixel(pin, 8)   # 8ピクセル用の NeoPixel ドライバーを GPIO 21 で作成
np[0] = (255, 255, 255) # 第1ピクセルを白に設定
np.write() # 全ピクセルにデータ書込み
  1. main.pyを実行してLEDを点灯させる
    4の内容を、main.pyに書き込み、保存させます。左のエクスプローラにて、main.pyを選択して、右クリックから、「Run current file on Pico」をクリックすると、M5StampS3上のLEDが白で点灯します。
  1. LEDを点滅させる
    点滅させるために、timeモジュールをインポートします。3回点滅させるので、for文でループさせて、点滅間隔は、500msにします。下記の内容で保存して、左のエクスプローラにて、main.pyを選択して、右クリックから、「Run current file on Pico」をクリックすると、M5StampS3上のLEDが白で3回点滅します。
import neopixel
import machine
import time

pin = machine.Pin(21, machine.Pin.OUT)
np = neopixel.NeoPixel(pin, 8)

for _ in range(3): # 3回ループさせる
      np[0] = (255, 255, 255) # 第1ピクセルを白に設定
      np.write() # 全ピクセルにデータ書込み
      time.sleep_ms(500) # 500msecのタイマー設定
      np[0] = (0, 0, 0) # 第1ピクセルを消灯に設定
      np.write() # 全ピクセルにデータ書込み
      time.sleep_ms(500) # 500msecのタイマー設定
  1. main.pyを自動実行させる
    for文以下をmain関数にします。最後に下記を記入します。
if __name__ == "__main__":
    main()

これの意味は:
➡ 「このファイルを直接実行したときだけ main() を動かす」
➡ 「import されたときには main() を動かさない」

import neopixel
import machine
import time

pin = machine.Pin(21, machine.Pin.OUT) # NeoPixel 駆動のための GPIO 21 を出力に設定
np = neopixel.NeoPixel(pin, 8) # 8ピクセル用の NeoPixel ドライバーを GPIO 21 で作成

def main():
    for _ in range(3): # 3回ループさせる
          np[0] = (255, 255, 255) # 第1ピクセルを白に設定
          np.write() # 全ピクセルにデータ書込み
          time.sleep_ms(500) # 500msecのタイマー設定
          np[0] = (0, 0, 0) # 第1ピクセルを消灯に設定
          np.write() # 全ピクセルにデータ書込み
          time.sleep_ms(500) # 500msecのタイマー設定

if __name__ == "__main__":
    main()
  1. main.pyをESP32S3に転送する
    7の内容で保存して、左のエクスプローラにて、main.pyを選択して、右クリックから、「Upload file to Pico」をクリックします。すると、M5StampS3上のLEDが白で3回点滅します。
  1. M5StampS3をUSB電源に接続する
    M5StampS3をPCから切断して、USB電源に接続します。すると、M5StampS3上のLEDが白で3回点滅します。

まとめ

ESP32にMicroPythonをインストールすれば、シンプルなコードでLEDを点灯させたり、センサーを動かしたりできます。応用すればIoTデバイスに簡単に組み込めます。

類似投稿