ラズベリーパイと電子ペーパーで天気予報ステーションを作る
ラズベリーパイとPIMORONIのカラー電子ペーパーで天気予報ステーションを作る方法です。
概要
ラズベリーパイ3B+とカラー電子ペーパーを利用して、天気予報ステーションを制作します。天気予報情報はopenweathermapから取得を行っています。
ラズベリーパイは基本的にどの世代のものでも動作しますが、Raspberry Pi 3 Model B以降 もしくは Zero W/Zero 2 Wでの利用がオススメです。また、このプログラムはPIMORONIの電子ペーパー専用ですが、MITライセンスで公開していますので他のモニターを使う際は自由に改造してお使いください。
ハードウェア
今回利用するハードウェアを紹介します。
PIMORONI Inky Impression 5.7"
ラズベリーパイ
利用を行うためにはラズベリーパイ本体とMicroSDカードが必要になります。この天気予報表示はそれほど処理能力やメモリを必要としないため古いラズベリーパイでも十分に動作させることができます。むしろ最新のラズベリーパイを使うのは正直もったいないので古いものがある場合はそちらの利用がオススメです。
フレーム
この記事では無印良品の木製のフレームに入れてますが、かなり前に購入したもののため現行品はサイズが異なる可能性が大いにあります。
電子ペーパーの外寸は 125mm x 100mm、表示エリアは 115mm x 86mm です。
インストール方法
ラズベリーパイのターミナルで以下のコマンドを実行すると、必要なライブラリと天気予報ステーションのアプリ、画面更新スケジュールであるcronの設定が行われます。
curl https://raw.githubusercontent.com/kotamorishi/weather-impression/main/install.sh | bash
インストールには Raspberry Pi 3 B+ でおよそ30分前後かかります。
I2C,SPIを有効化
電子ペーパーとラズベリーパイは物理的にはGPIOヘッダーにささっている状態ですが、その間の通信方法はI2CとSPIという通信方法が利用されています。しかし、デフォルトで有効にされていないため、有効化する必要があります。
ラズベリーパイの管理コマンドでI2CとSPIインタフェースを有効化します。
sudo raspi-config
SPIインタフェースも必要になるため、I2Cの場合と同様にSPIも有効化します。
天気予報APIのキーを取得する
このソフトウェアでは天気予報情報を openwethermap から取得しているため、利用する際にはキーを取得する必要があります。サイトはすべて英語ですが、登録のみなのでそれほど難しくはありません。
上記リンクからユーザー登録画面にアクセスすると以下のようなフォームが表示されるので、ユーザー名やメールそしてパスワードを入力します。
下の方にあるチェックボックスはメールが届いて煩わしいので基本チェック不要と思います。
一番下の Create Account ボタンを押すと確認メールがやってくるので、"Veryfi your email" ボタンを押してユーザー登録完了です。
しばらく待つとメールでキーが届きますので、このキーを後ほどアプリ設定にて利用します。
OneCall API 3.0の有効化
では早速登録したユーザーでOpenWeatherへログインします。
リリースした当初はバージョン2.5のAPIを利用していましたが、2022/11/10前後よりOpenWeathermapに新規ユーザー登録された場合は利用することが出来なくなってしまいました。
ログイン後、このリンクからAPIを有効にするため Subscribe していきます。
まずは、以下のSubscribeボタンをクリック。
個人情報の入力画面が表示されるので、入力します。
住所は結構適当に入力してもエラーにならないので、雑に入力しました・・。
左下のContinue with Stripe を押すとStripe(カード決済会社)の画面が出てきますので、クレカ情報を登録すると完了です。
この OneCall 3.0 API は 1,000回/日までは無料で利用する事が出来ます。
そして、この天気予報ステーションは1日24回しかAPIの呼び出しを行わないため、極端に多い台数で同一キーを利用しない限り課金されることはありません。
ソフトウェア
では次は、ソフトウェアのセットアップをしていきます。残念ながら今となっては過去OSの作った時点での最新版Raspberry Pi OS Busterでしか動作しません。
無情ですね。
設定ファイル
この天気予報ソフトウェアはこの設定ファイルに書かれた情報を元に動作を行うようになっています。
ファイルは以下のような内容となっており、1行に一つの設定が書かれています。初期値として適当な設定が書かれていますので、お住いの地域や単位等を設定します。
項目名=値
[openweathermap]
# 以下の緯度と経度で天気予報の地域を設定します。東京の場合は緯度35.6895 そして経度が139.6917です。
# 緯度
LAT=43.6532
# 経度
LON=-79.3832
# openweathermap のキーを設定します
API_KEY=COPY_AND_PASTE_YOUR_API_KEY_HERE
# モード設定(0:予報表示/1:アラート表示/2:グラフ表示)
mode=0
# 予報インターバル(1時間単位で1~4)
FORECAST_INTERVAL=1
# 気温の表示単位(metric/imperial)
TEMP_UNIT=metric
# フォントカラー
# 以下の温度以下になると青色で温度を表示します
cold_temp=5
# 以下の温度以上になると赤色で温度を表示します
hot_temp=27
モードについて
表示にはいくつかのモードがあり、電子ペーパー左側についているボタンでも変更する事ができます。
0:予報表示
最も基本的なモード0の予報表示では、画面下部に4つの予報を表示しています。
以下のサンプルでは1時間おきに4時間後までの表示を行っていますが、設定ファイル中のFORECAST_INTERVALの値を変更することで2時間おきや3時間置きの予報表示に変更することができます。
1:警報表示
このモードでは警報や注意報が出ている場合にそのメッセージを表示します。
デフォルトでは英語のみ表示可能なフォントを利用しているため、フォントは適宜変更してください。
2:グラフ表示
画面下部に気温、体感温度、気圧の3つを表示します。
自動起動設定
インストール時に自動起動するように cron が設定されるため特に行う必要はありません。もし手動でインストールを行った場合は以下のcron設定を追加してください。
@reboot /usr/bin/python3 /home/pi/weather-impression/watcher.py >/dev/null 2>&1
※この記事は 2022/11/16日に加筆・訂正を行いました。