ESP32のMiroPythonと4×4シリアルLEDで焚き火ランプ(リメイク)

2022年の夏から2023年の春にかけて「ハンドクラフトの素材としての電子工作 “超” 入門」講習会を企画実施していました。木工などのクラフトを簡単にテーブルランプにできる照明ユニットを作る講習会ですが、このブログにはまったく記録に残していませんでした。今回はMicroPythonを使ってリメイクすることにしました。

照明ユニットは下の写真のケースにESP32 MH-ET Live Mini Kitに4×4シリアルフルカラーLEDをつけてユニットを作ります。

ESP32 MH-ET Live Mini Kitと4×4シリアルLED

木工などのクラフトの下に置くと簡単にテーブルランプにできます。Arduino IDEで書いたプログラムで、写真は焚き火をモチーフにしたものですが、WiFiアクセスポイントからカラーセットを変更する機能もついていました。

18面体のランプ

今回はWaveshare RP2040-Zeroと8x8LEDで作ったプログラムをベースにリメイクすることにしました。MicroPythonでESP32を使うときにはThonny IDEを使ってESP32用のMicroPythonをインストールします。特に難しいこともなく終了しますが、ESP32用のneopixelライブラリはMicroPythonファームウェアに含まれているのでそれを使います。PicoやWaveshare RP2040-Zeroで使っているライブラリとは違うので、関数名NeopixelをNeoPixelに変更したり、Brightnessの機能を自分で作らないといけません。

また、4×4マトリクスは0行目は右、1行目は左、2行目は右、3行目は左とジグザグなLED番号なので変更しました。

パーリンノイズはMicroPython用のライブラリ “perlin.py” が公開されています。このライブラリをダウンロードしてマイコンのメモリに保存します。

 

 

 

 

 

MiroPythonと8×8シリアルLEDで焚き火ランプ

焚き火の炎は予測不能な変化があって飽きることなく見ていられますね。予測不能でも完全な乱数とは違って、滑らかな変化の中に期待を裏切る変化が混じる点が飽きさせないのだろうと思います。8×8シリアルLEDが比較的安価に手に入るようになったのでMicroPythonで焚き火風な卓上ランプを作ることにしました。

落ち葉の焚き火

動画

使用するマイコンボードはRaspberry Pi Picoと同じRP2040マイコンを使っているWaveshare RP2040-zeroです。後継のRP2350マイコンが出てきたので探せばさらに安価に入手できるようになりました。

パーリンノイズは、コンピュータグラフィックスで炎や煙や雲を表現するのによく使われていると、wikipediaに書かれていて、MicroPython用のライブラリ “perlin.py” が公開されています。このライブラリをダウンロードしてマイコンのメモリに保存します。

シリアルLED用のライブラリ “neopixel.py”もダウンロードしてマイコンのメモリに保存します。

作成したプログラムではパーリンノイズで8×8のLEDの場所の温度が2次元的に変化するのですが、 (1)温度が上がるにつれて赤→黄→白に変化する256色のカラーパレット(heat_color)と、(2)8×8 LEDの中心ほど熱くなる(led_base)、(3)時間的にも明るさが変化する(intensity)という細工を入れています。

なお、今回使用した8×8 LEDは左上が0番で右上が7番、一行下が8番から15番というようにシンプルに配線されていて、X列Y行のLED番号は(Y x 8) + X で指定できます。LEDの信号ピンは29pinです。