2021年11月28日日曜日

OpenWeatherの天気予報データをLCDに表示する

0. はじめに

本書第4章では、「お天気Webサービス」の天気予報データをインターネット経由で取得し、それをLCDに表示するという演習を行いました。
しかし、「お天気Webサービス」は2020年7月でサービスを終了したらしく、その演習プログラムはそのままでは実行できなくなっています。

そこで、その代替として、OpenWeather というサイトから天気予報データを取得し、それをLCDに表示するプログラムを作成しました。
「お天気Webサービス」と比べると、「サイトにアカウントを作成し、APIキーを取得する」というひと手間が必要なところがやや面倒ですが、その点をクリアできれば、本書と (ほぼ) 同等の内容を実現できます。

OpenWeather の料金体系を見ると、無料枠から課金枠まで、様々な利用方法が提供されていることが分かります。 本ページでは、無料 (Free) の One Call API を利用します。一日1,000 呼び出し、一か月30,000呼び出しが可能であることが記されています。

以下、本ページではその利用方法を紹介します。

1. OpenWeather でのアカウントの作成とAPIキーの取得

OpenWeather の天気予報データを利用するには、まずサイトでアカウントを作成しなければなりません。その手順を簡単に解説します。
  1. OpenWeatherのアカウント作成ページで必要事項を記入ます。
    • Username: 英語サイトなので、アルファベットからなるユーザー名を入力するのが良いでしょう。アカウント作成後に変更できます。
    • email: アカウント作成時に確認メールが届きますので、正確に入力してください。
    • Password / Repeat Password: パスワードを二回入力します。
    • I am 16 years old and over (16歳以上) の条件を満たしていればチェック
    • I agree with Privacy Policy ... 使用条件などをを理解したらチェック
    • System news, Product news, Corperate news はサイトからのメールを受け取りたければチェック
    • 「私はロボットではありません」にチェック
    • 以上を確認したら「Create Account」ボタンをクリック
  2. 遷移先のページで、Company と Purposeを入力します。
    • Company は、個人ならば記入しなくて構いません
    • Purpose (使用目的) は、私の場合「Education/Science (教育と科学)」を選択しました
    • 「Save」ボタンをクリック
  3. 以上が終わると、登録したメールにOpenWeather からメールが届きます。メールの中の「Verify your email」ボタンをクリックすると、登録完了です。
さて、以上が終わったあと、OpenWeather において、下図のように「ユーザー名」→「My API keys」と辿ると、API key を取得できます。 このAPI keyをコピーしてメモ帳などで保存しておきましょう。
なお、この API key は Raspberry Pi 上で用いるので、Raspberry Pi 上のブラウザでコピーし、Raspberry Pi 上のテキストエディタ Mousepad で保存するのが良いかもしれません。
また、この API key は登録したメールアドレスにも届きますので、そちらからコピーしても良いでしょう。その中に「Within the next couple of hours, it will be activated and ready to use」とあるので、利用可能になるまで数時間かかることがあるのかもしれません。 私の場合、すぐに使えたように思うのですが、ちょっと自信がありません。

2. OpenWeatherの天気予報データを利用するプログラムのダウンロードと準備

ここからは、OpenWeatherの天気予報データを利用するプログラムの利用方法を解説します。 これらのプログラムは、本書4章のプログラムの OpenWeather バージョン、ということができます。

プログラムのダウンロードは Raspberry Pi 上で下記の2命令を実行することで行います。 命令はどこで実行しても構いませんが、本書のサンプルプログラムが存在する場所で実行すると、ファイルがまとまるので良いかもしれません。
https://raw.githubusercontent.com/neuralassembly/raspi/master/bb2-04-openweather.zip

unzip bb2-04-openweather.zip
一つ目の命令で圧縮ファイルをダウンロードし、二つ目の命令で展開しています。 展開により現れるファイルは下記の5つです。
  • bb2-04-00-checkcity.py
  • bb2-04-01-weather-ow.py
  • bb2-04-02-forcast-ow.py
  • bb2-04-04-lcd-4modes-ow.py
  • bb2-04-05-lcd-3modes-ow.py
最初の「bb2-04-00-checkcity.py」は、本書のサンプルプログラムには存在しなかったファイルです。 bb2-04-01~bb2-04-05 のファイルは本書のサンプルプログラムに同じ番号のものがありますが、 新しいファイルにはファイル名の末尾に「-ow」がついているので、区別することができます(OpenWeathterの略です)。

これらのファイルを用いるには、上記5つのファイルに冒頭で入手した API key を記入して上書き保存しなければなりません。まずその解説を行います。

これらの5つのファイルを mousepad のようなテキストエディタや、Thonny のような開発環境で開くと、どのファイルにも下記の行が見つかります(冒頭にスペースが入っている場合もあります)。
key = 'API_KEY'
具体的には、5つのファイルの下記の行番号の位置に上の行があります。
  • bb2-04-00-checkcity.py: 5行目
  • bb2-04-01-weather-ow.py: 7行目
  • bb2-04-02-forcast-ow.py: 7行目
  • bb2-04-04-lcd-4modes-ow.py: 100行目
  • bb2-04-05-lcd-3modes-ow.py: 100行目
この行の「API_KEY」の部分を、上でコピーして保存した皆さんの API key で書き換えます。 本当の API key を書くわけにはいかないので、イメージを記すと下記のようになります。
key = '................................'
書き換えたら、ファイルを上書き保存してください。この作業を、5つのファイル全てで行います。 以上でプログラム実行前の準備は完了です。

3. OpenWeatherの天気予報データを利用するプログラムの実行

ここからは、OpenWeatherの天気予報データを利用するプログラムの実行方法を解説します。

本書に存在しないファイルである「bb2-04-00-checkcity.py」の利用法の解説のみ後まわしとし、残りの4ファイル の解説を順に行います。 なお、デフォルトでは4ファイルは東京の天気を表示します。また、全てのファイルは Python3 でのみ動作します。 本書のサンプルファイルと異なり、Python2 のサポートを外しました。

bb2-04-01-weather-ow.py の利用

Thonny で開いて実行するか、下記のコマンドで実行してください。
python3 bb2-04-01-weather-ow.py
本書の図4-7のように、入手した天気予報データを全て表示するコマンドです。表示された中身を理解する必要はなく、 「天気予報データを入手できた」ということを確認できればそれで十分です。
(省略)
      "weather": [
        {
          "id": 800,
          "main": "Clear",
          "description": "晴天",
          "icon": "01d"
        }
      ],
      "clouds": 2,
      "pop": 0,
      "uvi": 3
    }
  ]
}
なお、取得されるデータは本書の図4-7の形式とは全く異なります。予報のデータは上の「"main": "Clear",」の部分を使っており、「"description": "晴天",」の部分は使っていません。 最終的に LCD に表示するうえで、"description" の部分はバリエーションが多すぎると思えたためです。

bb2-04-02-forcast-ow.py の利用

Thonny で開いて実行するか、下記のコマンドで実行してください。
python3 bb2-04-02-forcast-ow.py
本書の図4-8のように、3日間の予報のみをデータを整理して表示します。
今日, 雨, 9/17
明日, 雨, 12/18
明後日, 雨, 9/13
なお、「お天気Webサービス」と異なり、「時々」や「のち」を含む結果は現れません。 「Clear(晴れ)」、「Clouds(曇り)」、「Rain(雨)」、「Snow(雪)」、「Thunderstorm(雷)」、「Drizzle(霧)」 の6種類の天気しか表示されません。その点はこのサイトの特性としてご了承ください。

bb2-04-04-lcd-4modes-ow.py および bb2-04-05-lcd-3modes-ow.py の利用

これらのプログラムは本書図4-9の温度計およびLCDを含む回路を作成してから実行してください。実行結果は本書のプログラムと同じです。
python3 bb2-04-04-lcd-4modes-ow.py

python3 bb2-04-05-lcd-3modes-ow.py


bb2-04-00-checkcity.py の利用

さて、上で説明したプログラムは、全て東京での天気予報を表示するものでした。これを別の都市の天気予報に変更したいときに用いるプログラムが bb2-04-00-checkcity.py です。 その使い方を解説します。

ここまでのプログラムで天気予報の対象位置を指定するためには、実は緯度と経度を用いなければなりませんでした。5つのプログラム全てで、API key を指定した行の近くに下記の2行が存在します。
lat = '35.6895'
lon = '139.6917'
これは緯度35.6895、経度139.6917を表しており、実はこれが東京を意味していた、というわけです。「東京」という地名で位置を指定したいところですが、それは無料枠の One Call API ではできない、ということです。

ですから、天気予報の対象地を変えたいときは、下記の流れで行う必要があります。
  1. 対象地を決める
  2. 対象地の緯度と経度を調べる
  3. 調べた緯度と経度を5つのプログラムに書き込み、上書き保存する
このとき、「対象地の緯度と経度を調べる」ときに用いるのが bb2-04-00-checkcity.py であるというわけです。早速試してみましょう。

まず、こちらのサイトから対象地を決め、そのスペルを確認しておきましょう。マウスドラッグで位置変更ができ、マウスホイールで拡大率の変更ができます。
例えば、「Sapporo」を選ぶことにします。

次に、bb2-04-00-checkcity.py を Thonny や mousepad で開き、下記の行を見つけます。
city = 'Tokyo'
この行のTokyoの部分をSapporoに変更し、上書き保存します。
city = 'Sapporo'
そして、bb2-04-00-checkcity.py を Thonny または下記のコマンドで実行してください。
python3 bb2-04-00-checkcity.py
すると、下記のように Sapporo の緯度と経度が得られます。
Sapporo
lat = '43.0642'
lon = '141.3469'
このうち、下記の2行で bb2-04-01~bb2-04-05 のファイルの該当行を置き換えて保存すれば、それらのファイルは Sapporo の天気予報を出力するようになります。
lat = '43.0642'
lon = '141.3469'
以上、お疲れさまでした。

0 件のコメント:

コメントを投稿