ラズベリーパイと電子ペーパーで天気予報ステーションを作る

ご利用OSについて
このプログラムはBuster世代のRaspberry Pi OSで作成されています。Bullseyeではそのまま動作する報告をいくつか頂いていますが、bookwormでは動作しません。(時間がある時に修正します)

概要

ラズベリーパイ3B+とカラー電子ペーパーを利用して、天気予報ステーションを制作します。天気予報情報はopenweathermapから取得を行っています。

Сurrent weather and forecast - OpenWeatherMap
Get current weather, hourly forecast, daily forecast for 16 days, and 3-hourly forecast 5 days for your city. Historical weather data for 40 years back for any coordinate. Helpful stats, graphics, and this day in history charts are available for your reference. Interactive maps show precipitation, c…
MEMO

ラズベリーパイは基本的にどの世代のものでも動作しますが、Raspberry Pi 3 Model B以降 もしくは Zero W/Zero 2 Wでの利用がオススメです。また、このプログラムはPIMORONIの電子ペーパー専用ですが、MITライセンスで公開していますので他のモニターを使う際は自由に改造してお使いください。

ハードウェア

今回利用するハードウェアを紹介します。

PIMORONI Inky Impression 5.7"

https://shop.pimoroni.com/products/inky-impression-5-7?variant=32298701324371
カラー電子ペーパー
現時点ではカラー電子ペーパーはまだまだ数が少なく、モノクロのものが多い状況です。この電子ペーパーでは7色の表示が可能です。
目が疲れにくい
電子ペーパーは通常のモニターと異なりバックライトが無いため、見やすいという特徴があります。
圧倒的に低消費電力
画面更新時にしか電力を消費しません。またラズベリーパイの電源をOFFにしても画面表示はそのまま維持することができます。

ラズベリーパイ

その辺に放置されていた Raspberry Pi 3B+

利用を行うためにはラズベリーパイ本体とMicroSDカードが必要になります。この天気予報表示はそれほど処理能力やメモリを必要としないため古いラズベリーパイでも十分に動作させることができます。むしろ最新のラズベリーパイを使うのは正直もったいないので古いものがある場合はそちらの利用がオススメです。

フレーム

この記事では無印良品の木製のフレームに入れてますが、かなり前に購入したもののため現行品はサイズが異なる可能性が大いにあります。

画面サイズ
MEMO

電子ペーパーの外寸は 125mm x 100mm、表示エリアは 115mm x 86mm です。

インストール方法

ラズベリーパイのターミナルで以下のコマンドを実行すると、必要なライブラリと天気予報ステーションのアプリ、画面更新スケジュールであるcronの設定が行われます。

Raspberry Pi OS Lite (Legacy)
このインストールスクリプトはBusterベースOSでの動作を前提としているためその他のバージョンでは動作しない場合があります。
curl https://raw.githubusercontent.com/kotamorishi/weather-impression/main/install.sh | bash
MEMO

インストールには Raspberry Pi 3 B+ でおよそ30分前後かかります。

I2C,SPIを有効化

MEMO

電子ペーパーとラズベリーパイは物理的にはGPIOヘッダーにささっている状態ですが、その間の通信方法はI2CとSPIという通信方法が利用されています。しかし、デフォルトで有効にされていないため、有効化する必要があります。

ラズベリーパイの管理コマンドでI2CとSPIインタフェースを有効化します。

sudo raspi-config
コマンドを実行するとこのツールが起動する
I2Cを選択し有効 <YES> を

SPIインタフェースも必要になるため、I2Cの場合と同様にSPIも有効化します

天気予報APIのキーを取得する

このソフトウェアでは天気予報情報を openwethermap から取得しているため、利用する際にはキーを取得する必要があります。サイトはすべて英語ですが、登録のみなのでそれほど難しくはありません。

Members

ユーザー登録 https://home.openweathermap.org/users/sign_up

上記リンクからユーザー登録画面にアクセスすると以下のようなフォームが表示されるので、ユーザー名やメールそしてパスワードを入力します。

下の方にあるチェックボックスはメールが届いて煩わしいので基本チェック不要と思います。

一番下の Create Account ボタンを押すと確認メールがやってくるので、"Veryfi your email" ボタンを押してユーザー登録完了です。

しばらく待つとメールでキーが届きますので、このキーを後ほどアプリ設定にて利用します。

OneCall API 3.0の有効化

では早速登録したユーザーでOpenWeatherへログインします。

MEMO

リリースした当初はバージョン2.5のAPIを利用していましたが、2022/11/10前後よりOpenWeathermapに新規ユーザー登録された場合は利用することが出来なくなってしまいました。

ログイン後、このリンクからAPIを有効にするため Subscribe していきます。

Weather API - OpenWeatherMap
Simple and fast and free weather API from OpenWeatherMap you have access to current weather data, hourly, 5- and 16-day forecasts. Historical weather data for 40 years back for any coordinate. Weather maps, UV Index, air pollution and historical data

https://openweathermap.org/api

まずは、以下のSubscribeボタンをクリック。

個人情報の入力画面が表示されるので、入力します。

MEMO

住所は結構適当に入力してもエラーにならないので、雑に入力しました・・。

左下のContinue with Stripe を押すとStripe(カード決済会社)の画面が出てきますので、クレカ情報を登録すると完了です。

この OneCall 3.0 API は 1,000回/日までは無料で利用する事が出来ます。

そして、この天気予報ステーションは1日24回しかAPIの呼び出しを行わないため、極端に多い台数で同一キーを利用しない限り課金されることはありません。

ソフトウェア

GitHub - kotamorishi/weather-impression: Weather station for PIMORONI Inky Impression(5.7″)
Weather station for PIMORONI Inky Impression(5.7″) - GitHub - kotamorishi/weather-impression: Weather station for PIMORONI Inky Impression(5.7″)

では次は、ソフトウェアのセットアップをしていきます。残念ながら今となっては過去OSの作った時点での最新版Raspberry Pi OS Busterでしか動作しません。

無情ですね。

コードがひどいね?
自分で動けばいいや程度で雑に作ってるのでやっつけ感の高いコードですがまぁ動いてるしいっか・・という気持ちで公開しています。優しい目で見てあげてください。いつでもプルリクエストは受け付けてます。

設定ファイル

この天気予報ソフトウェアはこの設定ファイルに書かれた情報を元に動作を行うようになっています。

/home/pi/weather-station/config.txt

設定ファイル

ファイルは以下のような内容となっており、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時間置きの予報表示に変更することができます。

モード0 :予報表示

1:警報表示

このモードでは警報や注意報が出ている場合にそのメッセージを表示します。

モード1 : 警報・注意報表示
MEMO

デフォルトでは英語のみ表示可能なフォントを利用しているため、フォントは適宜変更してください。

2:グラフ表示

画面下部に気温、体感温度、気圧の3つを表示します。

モード2 : グラフ表示

自動起動設定

インストール時に自動起動するように cron が設定されるため特に行う必要はありません。もし手動でインストールを行った場合は以下のcron設定を追加してください。

@reboot /usr/bin/python3 /home/pi/weather-impression/watcher.py >/dev/null 2>&1
sudo crontab -e にて追加を行った例
更新されない??
全ての設定と動作確認が完了後は再起動を行ってください。再起動しないと自動的に画面が更新されません。

※この記事は 2022/11/16日に加筆・訂正を行いました。