Skip to content

otmb/CrowPanel-5.79-WeatherPlace

Repository files navigation

About

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することで省エネ?にしています。

Instration

$ 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拡張を利用しました。

VScodeでMicroPicoの操作

  • config.py.sampleを別名でコピーしてWiFi情報を設定してください。
    • $ cp config.py.sample config.py
    • edit config.py
  • CrowPanelには自動で接続できていると思います。以下は接続後の操作になります。
  • エクスプローラーを左クリックで「Upload project to Pico」を実行します。
    • この操作により、*.py ファイルは全てアップロードされます。
  • 最後にmain.pyを開いた状態で左下の「▷Run」を実行します。
    • うまくいけば画面が表示され、インストールは完了です。

開発の参考情報

CrowPanelでMicroPythonの導入の手引き

画面デザインの参考にしました

カスタムフォントの作成

  • 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 にアイコンファイルをまとめます。

  1. ImageMagickのconvertコマンドでsvgをpngに変換
$ for i in `ls *.svg`; convert -size 128x128 $i $i.png
  1. 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}")

About

CrowPanel ESP32 E-Paper HMI 5.79-inch Displayをベースにした現在の天気を表示するデジタルサイネージ

Topics

Resources

License

Stars

Watchers

Forks

Contributors

Languages