この記事では、ePaper に天気予報が表示される仕組みを作る方法を紹介します。
天気予報は自分の住んでいる地域に個別で設定ができます。
また、コードもそのまま貼ってるので、ほぼコピペで動かせると思います。
ただし、天気予報の精度はそこまで高くないので、その辺はご了承ください。
この記事で作る天気予報の表示はこんな感じです。
天気予報に加え、日付と曜日、一言コメントが表示されます。

ePaper にはこのような写真が表示されます↓
台風直撃で雨模様ばかりですが、、、
用意するもの#
- ラズパイ zero WH
- ePaper (waveshare)
- ラズパイのケース(必須ではない)
- クレジットカード(無料だが使うAPI 使用時に登録が必要)
その他、ラズパイのためのSDカード、電源ケーブル、Wi-Fi 環境が必要です。
準備ができたら早速作って行きましょう!
ハードウェア設定#
まずはハードウェアの設定をします。
具体的にはOS のインストール、ネットワークとSPIインターフェースの設定
を行います。
ラズパイにePaper を設置#
ラズパイの40ピンを使ってePaper を接続させます。
またケースに入れると、基盤守る&スダンドになるのでおすすめです。

OS のインストールとIP 固定#
今回はePaper に映し出すため専用なので、デスクトップ環境は不要で、Raspberry Pi OS Lite (32-bit) を入れました。
OSを入れるときはラズパイイメージャーを使って、sshも有効にしておきます。このOS は「Raspberry Pi OS (Other)」から選べます。

起動や再起動には5~10分かかります。
起動後はIP を固定しておくと今後便利です。
IP固定 nmtui
sudo nmtui↓
wlan0を選択(Wi-Fiじゃない場合は使ってるネットワークを選ぶ)↓
IPv4 CONFIGURATION の項目が <Automatic> になっているので<Manual>へ↓
固定したいIPとルーターのIPアドレスを設定
↓
完了したら最初の画面の
Quitを押下↓
再起動
SPI を有効にする#
ePaperの制御にはSPIインターフェースの有効化が必須なので、有効化します。
sudo raspi-config を実行
↓
Interface Options → I4 SPI をYes に
↓
reboot再起動後、ls /dev/spidev0.* で /dev/spidev0.0や /dev/spidev0.1が見れればOKです。
開発準備#
色々インストールするのですが、まずは天気予報ステーションのためのディレクトリを作り、移動し、そこで作業を進めます。
mkdir weather_station
cd weather_stationePaper に表示したい天気予報の写真を以下からダウンロードするか、自作します。
用意する写真は以下の通りです。
cloudy.jpg rainy.jpg snow.jpg thunder.jpg
cloudy_sun.jpg rainy_sunny.jpg sunny.jpg unknown.jpg依存パッケージとライブラリ、ドライバの導入#
つづいてPython の依存パッケージとライブラリを入れます。
今回、ePaper に映す写真の生成にはPillow を用いました。
sudo apt update
sudo apt install -y python3-pil python3-requests python3-spidev python3-rpi.gpio gitさらに、Waveshare ドライバを配置します。
Github からクローンするとe-Paperというディレクトリができてるはずです。ただし、e-Paper/RaspberryPi_JetsonNano/python/lib/waveshare_epd というディレクトリのみ必要なので、同ディレクトリを作業用のディレクトリにコピペしたあとは消しても大丈夫です。(大丈夫じゃなかったらまたクローンしてください笑)
git clone https://github.com/waveshare/e-Paper.git
cp -r e-Paper/RaspberryPi_JetsonNano/python/lib/waveshare_epd .
rm -rf e-Paperweather_station は以下のような構造になると思います。
あとはPython スクリプトを書いていきます。
weather_station/
|-- images
| +-- weather
| |-- cloudy.jpg
| |-- cloudy_sun.jpg
| |-- rainy.jpg
| |-- rainy_sunny.jpg
| |-- snow.jpg
| |-- sunny.jpg
| |-- thunder.jpg
| +-- unknown.jpg
|-- main.py # <-- 後で作る
+-- waveshare_epd
|-- xxx
|-- xxxOpen Weather API でキーと緯度・経度の取得#
API キーの取得#
Python スクリプトを書きたいところなのですが、API キーがないとなにもできないので、OpenWeather のサイトからAPI キーを取得していきます。
とはいえ、既に説明をしてくれてる記事があるので、それを参考にしてもらえればと思います。
緯度・経度を知る方法#
これらは意外と簡単に取得できて、Google Map を開いて、設定したい場所(最寄りの駅とかが良いかも)を検索します。
そうするとURLが変わり、「@」から「,」までがそれぞれ緯度・経度の順で表記されています。
https://www.google.co.jp/maps/place/%E6%9D%B1%E4%BA%AC%E9%A7%85/@35.68098,139.7644821,17z/data=!3m1!4b1!4m6!3m5!1s0x60188bfbee1467bb:0x410f8b6e7e3ee34f!8m2!3d35.68098!4d139.767057!16s%2Fg%2F11c1t9zp11?entry=ttu&g_ep=EgoyMDI2MDkxNi4wIKXMDSoASAFQAw%3D%3DPython スクリプトの作成#
スクリプトは以下のようにしました。コメントアウトされたここを変更と書かれたところを自身のAPI キーや緯度経度に直すことで動作します。
このスクリプトでは3時間毎で12時間分の天気予報が表示されます。
仕組みは、まず、Weather API で天気予報を取得し、気温、降水確率、天気に応じたアイコンを表示します。
※このとき、「曇のち晴れ」と「晴れのち曇」は同じようにアイコンで表記されます。あしからず、
このスクリプトのこだわりは、写真はメモリにのみ展開され、SD カードには書込みを行わないことです。SD カードは耐久性に不安があるのでなるべく書込みをしたくないです。なので、メモリにのみ写真は展開されます。
| |
一言コメントはphrasesの中身から毎回ランダムで選ばれた言葉が表示されます。好きな言葉を入れてください。
また、特定の曜日の午前中は、燃えるごみ交換、とかそういうコメントが出るようにしてます。ここもご自身のルーティンに変えてください。
crontab 設定#
このスクリプトは定期的に繰り返したいのでcrontab -eから以下のように6時から21時まで3時間ごとに動作するようにしました。
本当は6-21/3と表記しても同じなのですが、なんかうまく動かなかったので以下のように書きました。
再起動後にも正常動作しているかの確認として動作させるようにしていますが、OS 起動後、プログラムが実行するまでにWi-Fi の立ち上がってなかったりするから、再起動後は3分後くらい待ってから動作させます。
0 6,9,12,15,18,21 * * * /usr/bin/python3 /home/user/weather_station/main.py
@reboot sleep 180 && /usr/bin/python3 /home/user/weather_station/main.py動作したら完成です。やったね
