---
slug: "e-ink-weather-display"
title: "電子ペーパー 天気予報ガジェット"
description: "洗濯をする時に、降雨予報が見れたら良いと思っていたため、降雨量モニターガジェットを作ってみました。"
url: "https://www.ytyng.com/bio/e-ink-weather-display"
achieved_at: "2023-02-04"
updated: "2024-04-29T12:19:50.238Z"
category: "電子工作"
image_url: "https://media.ytyng.com/20240429/59c4d3d746e84b92a78dfcbde9ce094b.jpg"
lang: "ja"
---

# 電子ペーパー 天気予報ガジェット

# モチベーション

[Raspberry Pi Pico の電子ペーパーモジュール](https://www.amazon.co.jp/gp/product/B092STLKM2/) が面白そうだったので買いました。

洗濯をする時に、降雨予報が見れたら良いと思っていたため、降雨量モニターとして使うことにしました。

# サーバーサイドの設計

天気予報のAPIは、[Open Metro](https://open-meteo.com/) が無料で提供しているのでそれを使います。

別途サーバーを用意して、ガジェットは一定時間ごとにサーバーにリクエストを送ります。

リクエストを受け取ったサーバーは Open Metro にリクエストし、その結果を元に白黒2値のPNG画像を作って、ガジェットにレスポンスします。

ガジェットは、その2値のPNG画像をただ表示するだけにします。

複雑な処理をサーバーサイドに寄せることで、開発を容易にして動作の安定化も図ります。




# ガジェットの設計

## 初期 USB給電タイプ
最初は、USB給電で動く降雨量モニターを作ってみました。

![画像](https://media.ytyng.com/20240429/f82c704696664d2396d632b57da73bea.jpg)

![画像](https://media.ytyng.com/20240429/7c604b9a79ee4ec396d890f97c96ae23.jpg)

![画像](https://media.ytyng.com/20240429/03d88afe2a3f4ed383d95e8e5ef0ed25.jpg)

マイクロコントローラーは常に起動しており、5分おきにサーバーにリクエストするようにしてみました。

ただこれだとケーブルが必要なため、電子ペーパーの良さを活かせていません。

## バッテリー駆動に変更

バッテリー駆動に変更してみました。

[AliExpress](https://ja.aliexpress.com) で、[1,000mAh のリチウムポリマー(Li-Po)バッテリー](https://ja.aliexpress.com/item/1005005796841686.html) と、[充電ボードモジュール](https://ja.aliexpress.com/item/1005005626384507.html) を買って、充電システムを組みます。

充電ボードモジュールの B+ B- にリポバッテリーを接続し、OUT+ OUT- にマイクロコントローラーの VSYS と GND を接続すればOKです。それだけで充電バッテリー駆動ができるようになります。


<div class="stl-viewer my-3" src="https://media.ytyng.com/20240429/03b82fabf078460595679bbb963308e0.stl"></div>

![画像](https://media.ytyng.com/20240429/107f72acc42441aabff36c3ecc4755f2.jpg)

↑バッテリーを搭載したため少し大きくなった。なおこの時は豪雨のため、グラフが振り切っている。

## Deep Sleep で電源消費を抑える

マイクロコントローラーを起動しっぱなしにすると、電池を早く消耗してしまうので、待機時は Deep Sleep をして電源の消費を抑えます。

コードとしてはだいたいこんな感じです。

```python
# Disconnect Wi-fi
wlan.disconnect()
wlan.active(False)
# Deactivate Wi-fi
machine.Pin(23, machine.Pin.OUT).low()
machine.deepsleep(settings.DEEP_SLEEP_SECONDS * 1000)
```

[Deepsleep のコード](https://github.com/ytyng/rpi-pico-w-monitor-pull/blob/main/main.py#L37)

### 解説

[ディープスリープでRaspberry Pi Pico Wを低電力化する - MSR合同会社](https://msr-r.net/raspi-picow-deepsleep/])

### 成果
サーバーにリクエストし、結果を電子ペーパーに反映後、30分間ディープスリープするようにしたところ、10日以上電池が持つようになりました。2週間は持たないです。

実用上は問題無いレベルになっています。

電子ペーパー + バッテリー駆動 + ディープスリープ の構成は、いろいろと使えそうなので今後も応用していきたい。

# ソースコード

[ytyng/rpi-pico-w-monitor-pull](https://github.com/ytyng/rpi-pico-w-monitor-pull/tree/main)

README には OLED の写真が載っていますが、電子ペーパーでも使えます。

# 気づき
実際に自分でバッテリーを扱うデバイスを作ってみると、世の中の市販されている小型バッテリー製品(ワイヤレスイヤフォン等)ってすごく良い効率が出るように設計されてるんだなと改めて思いました。プロの仕事はすごい。
