注目キーワード

【Arduino】ディスプレイ付きマイコン「M5StickC Plus」インターネットから天気情報を取得し表示する!(OpenWeather)

すけろく
前回の記事でJSON形式データは取り扱うことができた。
これでインターネットにあるサービスを活用できるな。
げんろく
そうだな。
今回は天気情報を提供しているサイトからJSON形式データを
取得してM5StickC Plusの画面に表示してみよう。
前回の記事では、次の画像のように、Arduino IDEを使い、M5StickC Plusのディスプレイにインターネットのサイトから取得したJSON形式データを表示します。
天気予報データは、さまざまなサイトで公開されています。
今回は「OpenWeather」というサイトのAPIを使ってJSON形式データを取得します。
「OpenWeather」を初めて使われる方のために初期登録の仕方も含めご紹介しますので、ぜひご活用ください!

 

今回使用するマイコンはこちら!

created by Rinker
M5Stack
¥4,791 (2024/04/26 13:41:59時点 Amazon調べ-詳細)
画面付きで小型のマイコンです。旧版のM5StickCから、ディスプレイサイズ、バッテリ容量が変更になっています。ブザーも実装されました。通信(WiFi/Bluetooth)機能、6軸加速度センサーも搭載されています。
Aruduino で開発できます。

旧版との違いを意識してまとめて行きます。

これからはじめる方にお勧めの参考図書はこちら!

created by Rinker
¥3,089 (2024/04/25 23:11:34時点 Amazon調べ-詳細)
created by Rinker
¥2,310 (2024/04/26 18:30:27時点 Amazon調べ-詳細)
created by Rinker
技術評論社
¥3,278 (2024/04/25 23:11:35時点 Amazon調べ-詳細)
created by Rinker
¥2,420 (2024/04/25 23:39:03時点 Amazon調べ-詳細)

「OpenWeather」って何?

OpenWeatherは、気象データの操作をより簡単にする、認知度の高い気象製品を提供しています。

メリットとしては、次のように紹介されています。

私たちは24時間体制で何百万もの開発者と協力しており、これらのメリットは、複雑なエンタープライズシステムに至るまで、ほとんどのアプリケーションに適していると考えています。

すぐに使える気象製品のスペクトル

短期および長期の予測、歴史および観察

地球上の任意の場所

透明性のある価格設定とライセンス

当社の気象製品は、業界標準に準拠し、さまざまな種類のエンタープライズシステムと互換性のある高速で信頼性の高いAPIを介してアクセスできます。当社のすべての製品は、あらゆる場所に不可欠な気候変数を含んでいます。それに加えて、気象条件の影響を受ける産業に役立ついくつかの特別な製品があります。それらの中には、道路リスクと全国気象警報があります。

ー引用ー(https://openweathermap.org/guide)

簡単に言うと、「さまざまなシステムで利用できるように気象情報を提供するAPIを提供していますよ~」という感じです。

 

「API」とは、「Application Programming Interface」の頭文字です。簡単に言うと、「アプリケーションをプログラミングするためのインターフェース」です。インターフェイスとは、コンピュータ用語でいうと、「何か」と「何か」をつなぐものという意味を持ちます。ですので、プログラムとアプリケーション(ソフトウェア)をつなぐものを意味します。

今回使うOpenWeatherのAPIは、プログラムからOpenWeatherサービスに問い合わせを行いデータ取得をするインターフェイスとなります。

 

 

OpenWeatherを使う

では、「OpenWeather」を使ってみましょう。

以下にOpenWeatherのサイトへのリンクを張っておきます。こちらからアクセスしてください。

OpenWeatherのサイトはこちら

アクセスすると次のような画面が表示されます。

APIキーを取得する

APIを利用するためには、APIキーというものを発行する必要があります。

ここで取得したAPIキーをプログラムからOpenWeatherへアクセスする際に使います。
APIキーを発行するためにはアカウントの作成が必要です。
2022年5月時点で、OpenWeatherの利用プランは5つ(Free、Startup、Developer、Professional、Enterprise)あります。
プランは、月にどのくらいOpenWeatherのサービスにアクセスするかと取得できる気象情報の条件(例えば何日後まで予報を取得できるか)によって変わります。
今回は個人利用を想定して「Free」プランを使用します。アカウントを作成すると初めは「Free」プランに設定されるようです。

アカウントの作成

  1. サイトの右上にある「Sign In」をクリックして、サインイン画面上で「Create an Account」をクリックします。
  2. UserName、Emailアドレス、パスワードを入力し、年齢確認などチェックしたら「Create Account」をクリックします。
  3. 設定したEmailアドレスにメールが来るので有効化します。

APIキーの取得

  1. 「Sign In」をクリックして、作成したユーザーでログインします。
  2. 「API Keys」をクリックすると画面にKeyが表示されますので、赤線の部分をコピーします。

 

東京の天気を取得してみる

取得したAPIキーを使用して、東京の現在の天気を取得してみます。

東京の緯度(lat:35.6828387)と経度(lon:139.7594549)を指定して天気を取得します。

現在の天気を取得するためのAPIコマンドを作ります。

https://api.openweathermap.org/data/2.5/weather?lat=35.6828387&lon=139.7594549&units=metric&lang=ja&appid={API Key}

ブラウザ(ChromeやEdgeなど)を開き、先ほど作ったAPIコマンドをURL入力部分に入力し、Enterキーを押します。

以下のようなJSON形式データが返ってくれば成功です。
(天気なので、毎回データは変わります)

 

取得したJSON形式データを見てみる

データの特徴

  • 次の赤字:気象条件によりデータがない場合がある
  • 時刻はUTC基準の時刻になる
  • 温度はデフォルトではケルビン(0K=-273.15℃)で計算する
    ※リクエストに&units=metricを追加することで摂氏(℃)で取得することが可能
    (例:294.47Kの場合、294.47-273.15=21.32℃)
  • リクエストに&lang=jaを追加することで、天気説明などが日本語化される

※マイコン側で確保するメモリは、気象条件や地点によるデータ値の変動と、赤字部分の要素増減を含めて考慮する必要があります。

データの詳細説明

要素名 説明
coord “lon”:139.7595,
“lat”:35.6828
経度
緯度
weather  “id”:803,
“main”:”Clouds”,
“description”:”曇りがち”,
“icon”:”04d”
気象条件ID
気象パラメータのグループ(雨、雪、極端など)
指定言語による説明
天気アイコンのID
base “stations” 内部パラメータ
main  “temp”:14.95,
“feels_like”:14.8,
“temp_min”:13.84,
“temp_max”:15.98,
“pressure”:1019,
“humidity”:47
“sea_level”:
“grnd_level”:
温度(単位:摂氏℃)
体感温度(単位:摂氏℃)
温度:最低(単位:摂氏℃)
温度:最高(単位:摂氏℃)
大気圧(単位:hPa)
湿度(%)
海面の大気圧(単位:hPa)
地上の大気圧(単位:hPa)
visibility 10000 視界(最大10㎞)
wind “speed”:3.09,
“deg”:140
”wind.gust”:
風速(単位:m/s)
風向(度)
突風(単位m/s)
clouds “all”:75 曇り(単位%)
rain “rain.1h”
“rain.3h”
降雨量(過去1時間当たり)(単位㎜)
降雨量(過去3時間当たり)(単位㎜)
snow “snow.1h”
“snow.3h”
降雪量(過去1時間当たり)(単位㎜)
降雪量(過去3時間当たり)(単位㎜)
dt 1652243110 データ計算時刻:UNIX(UTC)
sys “type”:1,
“id”:8077,
“message”:
“country”:”JP”,
“sunrise”:1652211585,
“sunset”:1652261701
内部パラメータ
内部パラメータ
内部パラメータ
国コード(JPは日本)
日の出時刻:UNIX(UTC)
日の入り時刻:UNIX(UTC)
timezone 32400, UTCから秒単位でシフトする
※日本時間(+9時間)を秒に直すと32400s
id 1861060 都市ID
name “日本” 国名か都市名
cod 200 内部パラメータ

 

JSONを扱う際のメモリサイズを計算する

取得したJSON形式データを扱うためのメモリサイズを計算します。

計算には、過去記事でご紹介したArduinoのAssistantを使います。

ArduinoJson

The ArduinoJson Assistant is an online tool that computes th…

メモリの計算方法は、次の記事で紹介しています。

関連記事

すけろく Pythonなどでは、JSONでデータを扱っていたが、 Arduino IDEで扱うことはできるのか? げんろく それなら「ArduinoJSON」ライブラリがあるぞ! 取り扱うデータで使[…]

 

計算した結果、1024が妥当な感じですが、今回は倍の「2048」を、Arduino IDEで指定し、メモリを確保します。

 

 

M5StickC Plusで現在の天気を表示してみよう

それでは、実際にプログラミングしてみましょう。

前述した、OpenWeatherにhttpsリクエストを発行し、JSON形式のデータを取得、JSONデータから天気情報を取得して、M5StickC Plusのディスプレイに表示させてみます。

Wi-Fi接続用のSSIDとパスワードをM5StickC Plusに設定する

Wi-Fi環境への接続が必要になります。今回のプログラムでは、事前にM5StickC Plusに記憶させた情報を使用しています。

Wi-Fi接続情報の保存と読み出し方法は、次の記事で紹介しています。

関連記事

この記事では、Arduino IDEを使ってコンピュータをWi-Fiルータに接続する方法について紹介します。 Wi-Fi接続する方法は、2つあります。2回目の今回はマイコンにアクセスポイント情報(SSID、パスワード)を記憶させることでプ[…]

 

OpenWeatherのルート証明書を取得する

OpenWeatherへのリクエストはhttpsなのでルート証明書をプログラム内に含める必要があります。

ルート証明書の取得方法は、次の記事で紹介しています。

関連記事

すけろく 普段、何気なくブラウザでインターネットサイトを 見ているが、URLの最初のHttpsとはなんだ? げんろく httpsはHttpの通信を暗号化して行うものだ。 ちょっと違いを押さえてみるか[…]

 

ライブラリを追加する

今回使うライブラリ「ArduinoJSON」をインストールします。

※プログラムを実行した際の「ArduinoJSON」のバージョンは「6.19.4」です。

ライブラリのインストールは、次の記事で紹介しています。

関連記事

本記事は、Arduino IDE 1.8.xバージョンのライブラリ管理方法を紹介した記事です。 Arduino IDEは、より新しいバージョン「2.0.x」が発表されています。     機能がよりリッチになった「Ardu[…]

 

現在の天気情報表示プログラム

Arduino IDEを起動して、「ファイル」メニューから「新規ファイル」を選択し、表示されるスケッチに以下のように記述します。

※「OpenWeatherのAPIキー」、「OpenWeatherのルート証明書」は、ご自分の環境に合わせて値を修正してください。(スケッチ例では、「”Please correct it to the value that suits your environment.”」と記載しています。)

 Arduino IDE スケッチ例

 

 M5StickC Plusへの書き込み

  1. 「ファイル」メニューから「名前を付けて保存」で任意の名前を付けて保存します。
  2. 「ツール」メニューから「ボード」情報を確認し、M5StickC Plusであるか確認します。
    この際、「シリアルポート」にマイコンを接続したCOMポートが指定されているかも確認します。
  3. 「ツール」メニューから「Patition Scheme」を「”No OTA(Large APP)”」にします。
    ※ここを変更しないと、スケッチが大きいというエラーになります。
  4. 「ツール」メニューから「シリアルモニタ」を選択してシリアルモニタを起動します。
  5. 「スケッチ」メニューから「マイコンボードに書き込む」を選択します。

 

 プログラム実行結果

M5StickC Plusのディスプレイに以下のとおり表示されれば成功です。

 

さて、これでインターネットから天気情報を取得してディスプレイに表示することができました。

今後は、取得したデータをいろいろディスプレイで表現してみようか、検討中です。

今回の記事は以上になります。

最後までご覧いただきありがとうございました。

 

 

今回使用するマイコンはこちら!

created by Rinker
M5Stack
¥4,791 (2024/04/26 13:41:59時点 Amazon調べ-詳細)
画面付きで小型のマイコンです。旧版のM5StickCから、ディスプレイサイズ、バッテリ容量が変更になっています。ブザーも実装されました。通信(WiFi/Bluetooth)機能、6軸加速度センサーも搭載されています。
Aruduino で開発できます。

旧版との違いを意識してまとめて行きます。

これからはじめる方にお勧めの参考図書はこちら!

created by Rinker
¥3,089 (2024/04/25 23:11:34時点 Amazon調べ-詳細)
created by Rinker
¥2,310 (2024/04/26 18:30:27時点 Amazon調べ-詳細)
created by Rinker
技術評論社
¥3,278 (2024/04/25 23:11:35時点 Amazon調べ-詳細)
created by Rinker
¥2,420 (2024/04/25 23:39:03時点 Amazon調べ-詳細)

M5StickC Plus の他の記事はこちらからどうぞ!

すけろく んーどうしたものか。 げんろく どうした? 深刻な顔をして。 すけろく M5Stackにプログラムを書き込んだら 起動しなくなってな。 電源ON/OFFでも無理なのだ。 げんろく 書き込んだプログラムか、バッテリーの 過放電か。工場出荷時に戻してみてはどうだ? この記事では、M5Stackにプログラムを書き込んだ結果、うまく動作しなくなった場合の対処方法を記載します。 ご紹介するのは「工 […]

すけろく 以前、Bluetooth Serialを使って データをPCに送信したが、何か良い使い方はないかな。 げんろく 最近、土壌水分センサーとやらを手に入れた。 これで計測した水分量をPCに送信してみるか? すけろく それは良いな。 今後、使い道が広がっていきそうな予感がする。 この記事では、ディスプレイ付きマイコン「M5StickC Plus」に搭載されている「Bluetooth」を使って、 […]

すけろく 前回の記事で6軸IMUのデータをPCでグラフ化したが、 うまく傾き検知ができているようだ。 げんろく そうだな。 微細な傾きも検知できているようだ。 すけろく 傾き検知の機能を使って何かできないかな? げんろく なら、机を離れる時にノートなどの見守りを してくれる「デスク見守り君」を作るぞ! 今回の記事では、ディスプレイ付きマイコン「M5StickC Plus」を使って、「デスク見守り君 […]

すけろく これまで、M5StickC PlusでWi-Fi接続を使ったデータの やり取りは見てきたが、Bluetoothはまだだな。 げんろく 確かに。 Bluetoothについてはまだだった。 すけろく 近距離ならBluetooth通信も有効だ。 何か作れないかの。 げんろく では、今回はBluetoothを使った通信の一つ、 Bluetooth Serialについて触れてみよう。 この記事では […]

すけろく M5StickC Plusには、筐体の動きや傾きを検知する センサーが標準で搭載されているらしいな。 げんろく 6軸IMUのことか。 加速度、角速度を測るセンサーだ。 計算で姿勢角度も分かる。 すけろく んんっ!? 難しい単語が出てきたな。。 げんろく よし。 物体の動きを計測する要素について M5StickC Plusを使って試してみるぞ! この記事では、ディスプレイ付きマイコン「M5 […]

すけろく 前回作ったお天気表示プログラムは なかなか、評判が良いな。 げんろく うれしいな。 ただ、お天気情報は起動時のみ取得というところが 課題だ。 げんろく 今回は、1時間に1回お天気情報を後進するように してみよう。 この記事では、Arduino IDEを使ってM5StickC Plusのディスプレイに、お天気情報を1時間に1回更新表示する方法を紹介します。 画面描画は主に、Adafruit […]

すけろく 汎用ライブラリの「AdafruitGFX」にビットマップ画像を ディスプレイ表示するものがあるそうな。 げんろく いかにも。機能は実装されている。 ちょうど、アイコンをアニメーションさせたいと 思っておったわ。 すけろく うむ。 面白そうだな。やってみるか! げんろく わかった。 今回は、単色のアイコンを使って天気情報を 視覚的に伝える画面を作ってみよう。 この記事では、Arduino […]

すけろく 標準ライブラリでの画面描画はできた。 しかし、M5StickC Plus向けのライブラリなので 汎用性がないな。 げんろく たしかに。 M5Stackや他のAruduino機器でも使えるものが必要だな。 すけろく そのようなものがあるのか? げんろく よし。今回は、汎用的に使えるライブラリを紹介しよう。 Adafruit社が公開している「Adafruit_GFX」だ。 この記事では、Ar […]

すけろく 前回の記事でJSON形式データは取り扱うことができた。 これでインターネットにあるサービスを活用できるな。 げんろく そうだな。 今回は天気情報を提供しているサイトからJSON形式データを 取得してM5StickC Plusの画面に表示してみよう。 前回の記事では、次の画像のように、Arduino IDEを使い、M5StickC Plusのディスプレイにインターネットのサイトから取得した […]

すけろく 普段、何気なくブラウザでインターネットサイトを 見ているが、URLの最初のHttpsとはなんだ? げんろく httpsはHttpの通信を暗号化して行うものだ。 ちょっと違いを押さえてみるか。 すけろく あと、Arduino IDEでプログラムを作る際の 注意点なんかも頼む。 げんろく わかった。 プログラムに組み込む方法も見てみよう。 皆さんが普段パソコン(PC)やスマホ、タブレットのブ […]

すけろく Pythonなどでは、JSONでデータを扱っていたが、 Arduino IDEで扱うことはできるのか? げんろく それなら「ArduinoJSON」ライブラリがあるぞ! 取り扱うデータで使用するメモリサイズの 計算ツールもあるから便利だ。 この記事では、Arduino IDEを使ってM5StickC PlusのプログラムでJSON形式を取り扱う方法を紹介します。 今回使用するライブラリは […]

すけろく M5StickC Plusに英語を表示することは 画面制御の記事で行えたが、日本語は表示できないのか? げんろく いや、方法はあるぞ。 eFontライブラリをM5StickC Plusで実行できるように 修正して提供してくれているものを使うのだ。 すけろく ぜひ、やってみたいの~ この記事では、Arduino IDEを使ってM5StickC Plusのディスプレイに日本語を表示させるため […]

すけろく M5StickC Plusも時刻同期までできた。 うまくいっておるな。 げんろく ああ、「M5StickC」向けに作成したプログラムが 微修正で実行できるからありがたい。 すけろく そういえば、画面が大きくなったな。 値段も大きくなっているが。。。 げんろく 今回は新しいM5StickC Plusの 画面制御まわりを見てみるか。 この記事では、Arduino IDEを使ってM5Stick […]

  すけろく 前回はWiFi接続することができた。 次は時刻同期がしたいな。 げんろく たしかに。時刻同期は基本だからな。 以前M5StickCでやったプログラムをベースに 実装してみよう。   この記事では、M5StickC PlusをアクセスWi-Fiアクセスポイントに接続し、インターネットの時刻サービス(NTPサーバー)と時刻を同期する方法について紹介します。 今回使用す […]

すけろく M5StickC Plusの大まかな違いは分かった。 WiFi接続をしてみるか。 げんろく そうだな。 M5StickCと同じように使えるのか確認してみよう。 この記事では、M5StickC Plusに実装されているWiFi機能を使って、Wi-Fiルータに接続する方法について紹介します。 今回使用するマイコンはこちら! 画面付きで小型のマイコンです。旧版のM5StickCから、ディスプレ […]

すけろく なんか、M5StickCが「在庫なし」になっている。 げんろく ああ、新しい「M5StickC Plus」が出たからな。 旧版は在庫限りになっているのだろう。 すけろく うむ。画面が大きくなったな。 値段も大きくなっておる。 げんろく そうだな。 M5StickC PlusでLチカでもしてみるか。 今回の記事では、「M5StickC Plus」を開発環境であるArduino IDEを使っ […]