MicroCat.1のLTE通信でOpen-Meteoの天気予報を3色e-Paper ディスプレイに表示してみた

前回の記事(https://wohl-yz.net/archives/20251222)では、ADT7410センサーを使って周囲の温度を取得し、サーバーへ送信する処理を実装しました。

前回の実験は「LTEによるデータのアップロード」がメインでしたが、今回の目的は「LTEによるデータのダウンロード」に取り組むことです。(前回に引き続きLTEアップロードによるサーバーへの温度センサーデータ送信も継続します。)

外部の天気予報APIから取得した情報と温度センサーから取得した現在温度を e-Paper ディスプレイ に表示する「情報表示端末」へのアップグレードに挑戦します。

弊社所在地「八頭町」の天気予報と温度センサーの値をe-paperに表示

1. Open-Meteo APIの活用:商用利用でなければ登録不要な気象データ

今回のプロジェクトで採用した「Open-Meteo」は、開発者にとって非常に扱いやすい気象予報APIです。IoTデバイス、特にMicroCat.1のようなマイコン環境で外部データを取り入れる(ダウンロードする)際、Open-Meteoには以下のメリットがあります。

1.1. リクエストURLの構造

今回のコードでは、八頭町(緯度:35.4093, 経度:134.2507)を対象に、以下のパラメータでリクエストを送信しています。

WEATHER_URL = f"https://api.open-meteo.com/v1/forecast?latitude=35.4093&longitude=134.2507&hourly=temperature_2m,weathercode,precipitation_probability&forecast_days=1"

2. LTE回線経由でのデータ取得(ダウンロード)

インターネット接続には、LTE Cat.1モジュールを搭載した「MicroCat.1」を使用し、1NCEのSIMカードでネットワークに接続しました。

3. 3色e-Paper ディスプレイへの表示制御

表示部には、Waveshareの「Pico-ePaper-2.66-B」を採用しました。

4. システム構成

4.1. 全体構成図

ハードウェアの物理接続とネットワークを介したデータフローを示します。

graph TD
    subgraph Hardware_Layer ["ローカル・デバイス"]
        direction TB
        MCU["<b>MicroCat.1</b><br/>(Raspberry Pi Pico 2 互換 / RP2350)"]
        Modem["<b>SIM7672 モデム</b><br/>(LTE Cat.1)"]

        subgraph Sensors ["周辺デバイス"]
            Sensor["ADT7410<br/>(16-bit 温度センサー)"]
            EPD["Pico-ePaper-2.66-B<br/>(3色 e-Paper ディスプレイ)"]
        end
    end

    subgraph Network_Layer ["ネットワーク層 (LTE Cat.1)"]
        SIM["1NCE SIM"]
        Internet(("インターネット"))
    end

    subgraph Cloud_Layer ["外部サービス / サーバー層"]
        OpenMeteo["<b>Open-Meteo API</b><br/>(Rx: 天気予報データ)"]
        UserServer["<b>ユーザーサーバー</b><br/>(Tx: PHP / ログ保存)"]
    end

    %% 接続関係
    Sensor -- "I2C (GP4/GP5)" --> MCU
    MCU -- "SPI (GP8~GP13)" --> EPD
    MCU -- "UART/AT Commands" --> Modem
    Modem -- "Cellular" --> SIM
    SIM --- Internet
    Internet -- "HTTP GET (JSON)" --- OpenMeteo
    Internet -- "HTTP POST (JSON)" --- UserServer

    %% スタイル定義
    style Hardware_Layer fill:#f5f5f5,stroke:#333,stroke-width:2px
    style Network_Layer fill:#e1f5fe,stroke:#01579b
    style Cloud_Layer fill:#fff9c4,stroke:#fbc02d
    style MCU fill:#ffccbc,stroke:#e64a19

4.2. 処理シーケンス図

5分周期(300秒)で実行される、センサー計測、データのダウンロード、アップロード、表示更新のサイクルを示しています。

sequenceDiagram
    autonumber
    participant S as ADT7410 (Sensor)
    participant M as MicroCat.1 (MCU)
    participant L as SIM7672 (LTE Cat.1)
    participant API as Open-Meteo (Weather API)
    participant E as e-Paper Display
    participant SRV as User Server (PHP)

    Note over M: 5分周期のメインループ開始

    rect rgb(240, 240, 240)
        Note right of M: [計測]
        M->>S: I2C経由で温度データを読み取り
        S-->>M: 16-bit デジタル温度データ
    end

    rect rgb(225, 245, 254)
        Note right of M: [LTE接続 & ダウンロード (Rx)]
        M->>L: ネットワーク接続確認
        L->>API: HTTP GET (緯度経度指定)
        API-->>L: JSONデータ (天気/気温/降水確率)
        L-->>M: パース済み予報データ
    end

    rect rgb(255, 235, 238)
        Note right of M: [描画更新]
        M->>M: 10%単位に降水確率を四捨五入
        M->>M: framebufに天気アイコンを描画
        M->>E: SPI経由でVRAMデータを転送
        M->>E: 画面リフレッシュ命令
        E-->>M: 更新完了 (Busy解除)
        M->>E: epd.sleep() 発行
    end

    rect rgb(232, 245, 233)
        Note right of M: [アップロード (Tx)]
        M->>L: HTTP POST (センサー温度データ)
        L->>SRV: データ送信
        SRV-->>L: HTTP 200 OK
    end

    Note over M: 300秒間のスリープ (Deep Sleep待機)

5. 自動更新とデバイスの寿命に関する注意点

このシステムは5分(300秒)間隔で「計測・取得・更新」のサイクルを繰り返します。運用にあたっては、e-Paper ディスプレイ 特有の性質に注意が必要です。

6. まとめ

前回の「アップロード」から、今回の「ダウンロード」へとLTE通信の活用範囲を広げたことで、Wi-Fi環境がない場所でも動作する「スマート天気予報ボード」が完成しました。デバイスの寿命に配慮した更新設計や、3色表示を活かした直感的なアイコン表示により、実用的な情報端末として仕上げることができました。


7. サンプルコード

microcat1 epaper (ZIP, 21.29 KB)

8. FAQ

なぜ e-Paper ディスプレイの更新間隔を「180秒以上」にする必要があるのですか?
e-Paper(電子ペーパー)は、電圧をかけて粒子を移動させることで表示を保持する仕組みです。頻繁に画面を書き換えると、パネル内に電荷が残留したり、物理的な劣化が進んだりして、「焼き付き」や表示品質の低下を招く恐れがあります。製品寿命を長く保つため、メーカー推奨の間隔(今回のパネルでは180秒以上)を守ることが重要です。
ディスプレイドライバのファイル名を epd2in66b.py に変更したのはなぜですか?
MicroPythonの import 文では、ファイル名にハイフン(-)が含まれていると構文エラーになるためです。Waveshare公式の Pico_ePaper-2.66-B.py をそのまま扱うのではなく、アンダースコア(_)を使うか、今回のように英数字のみの名称に変更してインポートしやすくしています。
表示内容に「赤色」が含まれていますが、3色表示の制御は難しいですか?
このディスプレイは「黒・白・赤」の3色に対応しており、制御には「黒用」と「赤用」の2つのバッファ(VRAM)を使用します。ブログ内でも触れている通り、ドライバの仕様によってはビット反転(0と1の解釈が逆)が必要な場合があるため、描画時に 0x000xff で塗りつぶす処理を使い分ける工夫が必要です。
他のセンサー(気圧や湿度など)を追加して表示することは可能ですか?
はい、可能です。MicroCat.1には複数のGPIOやI2Cピンがあるため、別のセンサーを接続し、取得したデータを framebuf でテキストとして描画領域に追加すれば表示できます。ただし、画面サイズ(2.66インチ)に合わせてレイアウトを調整する必要があります。
Open-Meteo APIを選んだ最大のメリットは何ですか?
最大のメリットは「APIキーが不要」である点です。多くの気象APIはユーザー登録とトークンの発行が必要ですが、Open-MeteoはURLを叩くだけでデータを取得できるため、プログラムの初期設定が非常にシンプルになります。また、商用利用でなければ無料という点も個人開発に適しています。
自分の住んでいる地域の天気予報を取得するにはどうすればいいですか?
WEATHER_URL 内にある latitude(緯度)と longitude(経度)の値を、お住まいの地域の座標に変更するだけで対応可能です。Googleマップなどで目的の場所を右クリックすれば、これらの数値を簡単に確認できます。
1NCE以外のSIMカードでも動作しますか?
はい、LTE Cat.1に対応しているSIMであれば動作可能です。ただし、使用するSIMカードに合わせて APN(Access Point Name)の設定を変更する必要があります。今回のコードでは iot.1nce.net に設定されていますが、これを各キャリア指定の値に書き換えてください。