CrowPanel ESP32 E-Paper HMI 5.79-inch Displayをベースに、お天気情報のデジタルサイネージを作成しました。
CrowPanel-ESP32-5.79-E-paperのお天気を取得する処理にはOpenWeatherMapが使われています。
しかしながら、OpenWeatherMapの利用にはクレジットカード登録が必須でしたので、
Open-MeteoAPIとMicroPythonで実装を試してみました。
Open-Meteo APIはAPIキーは不要です。非商用利用であれば無料で利用が可能です。
そのほかはAPIの実行のたびにWiFiをON/OFFすることで省エネ?にしています。
$ curl -LO https://micropython.org/resources/firmware/ESP32_GENERIC_S3-SPIRAM_OCT-20250415-v1.25.0.bin
$ pip install esptool
$ esptool.py erase_flash
$ esptool.py --baud 460800 write_flash 0 ESP32_GENERIC_S3-SPIRAM_OCT-20250415-v1.25.0.bin環境はVSCodeにMicroPico拡張を利用しました。
- config.py.sampleを別名でコピーしてWiFi情報を設定してください。
$ cp config.py.sample config.py- edit config.py
- CrowPanelには自動で接続できていると思います。以下は接続後の操作になります。
- エクスプローラーを左クリックで「Upload project to Pico」を実行します。
- この操作により、*.py ファイルは全てアップロードされます。
- 最後にmain.pyを開いた状態で左下の「▷Run」を実行します。
- うまくいけば画面が表示され、インストールは完了です。
- Elecrow 5.79" screen library for Micropython
- Elecrow CrowPanel 5.79" E-Paper display
- MicroPython-ESP32-S3
- fonts.googleからさわらびフォントをダウンロード
- 必要となるキャラクターのフォントを作成
$ curl -LO https://raw.githubusercontent.com/peterhinch/micropython-font-to-py/c24761448e6ef1c40716b9b2b629e6fa37b2c9d2/font_to_py.py
$ python font_to_py.py -c " 0123456789.C°℃:%%" SawarabiGothic-Regular.ttf 32 SawarabiGothicRegularNumeric32.py
ImageMagickのconvertコマンドでsvgをpngに変換した後、icons.py にアイコンファイルをまとめます。
- ImageMagickのconvertコマンドでsvgをpngに変換
$ for i in `ls *.svg`; convert -size 128x128 $i $i.png- icons.py にアイコンファイルをまとめる処理
CrowPanel用のモノクロ画像の作成にはTimHanewich/MicroPython-SSD130のコードを利用しました。
下記からダウンロードします。
$ curl -LO https://raw.githubusercontent.com/TimHanewich/MicroPython-SSD1306/refs/heads/master/src/convert.py下記の処理を実行します。
import convert
import os
import glob
flist = glob.glob("weather/*.png")
buffer_list = []
for fname in flist:
name = os.path.basename(fname)
name, _, _ = name.split(".")
converted = convert.image_to_buffer(fname)
buffer = converted[0]
data = "'{}': {}".format(name, buffer)
buffer_list.append(data)
with open("icons.py", "w") as f:
f.write("weather_icons = {\n " + ",\n ".join(buffer_list) + "\n}")