なかなか、評判が良いな。
ただ、お天気情報は起動時のみ取得というところが
課題だ。
してみよう。
この記事では、Arduino IDEを使ってM5StickC Plusのディスプレイに、お天気情報を1時間に1回更新表示する方法を紹介します。
画面描画は主に、Adafruit社から提供されているArduino IDE向けのライブラリ「Adafruit GFX Library」を使用します。
Arduino IDE共通で使用できるので、いろんなArduino対応機器で同じソースを使いたい場合に有効です。
※ただし、表示させるディスプレイによって必要な設定が異なるのでそのあたりはチューニングが必要です。今回はM5StickC Plusで実行することを前提としています。
今回は、前回の次の記事で紹介したプログラムを元に、天気情報を起動時1回から、毎時間更新に変更したプログラムに修正したものを紹介します。
プログラムの基本的な部分については次の記事をご覧ください。
「Adafruit GFX Library」の基本的な使い方はこちら
すけろく 標準ライブラリでの画面描画はできた。 しかし、M5StickC Plus向けのライブラリなので 汎用性がないな。 げんろく たしかに。 M5Stackや他のAruduino機器でも使える[…]
今回使用するマイコンはこちら!
画面付きで小型のマイコンです。旧版のM5StickCから、ディスプレイサイズ、バッテリ容量が変更になっています。ブザーも実装されました。通信(WiFi/Bluetooth)機能、6軸加速度センサーも搭載されています。
Aruduino で開発できます。Amazonで確認
これからはじめる方にお勧めの参考図書はこちら!
アイデアをカタチにする! M5Stack入門&実践ガイド | M5Stack&M5StickCではじめるIoT入門 | みんなのM5Stack入門 | ESP32&Arduino 電子工作 プログラミング入門 | みんなのArduino入門 |
確認する | 確認する | 確認する | 確認する | 確認する |
前回の記事に引き続き、天気をわかりやすく伝えるために、アイコンをアニメーションさせますよ!
表示される天気情報やアイコンを1時間に1回更新するように改造します。
完成した際のイメージはこんな感じです。
皆さんも挑戦してみてくださいね!
天気情報表示プログラム(毎時更新版)を作る
それでは、実際にプログラミングしてみましょう。
これまで他の記事で紹介した、「Adafruit GFX Library」を使って、「M5StickC Plus」のディスプレイに天気情報を表示させ、1時間ごとに情報を更新します。
OpenWeatherからの天気情報取得を「M5StickC Plus」起動時および、毎時1回に取得します。
毎時更新は、時刻表示の「時」単位の値が更新された際にOpenWeatherサービスからデータを取得する関数を実行します。
そのため、時刻表示関数内を主に修正しています。
OpenWeatherのサブスクリプション条件によって、課金対象となる可能性があるので注意してください。
ライブラリを追加する
今回使うライブラリ「Adafruit ST7735 and ST7789 Library」と「Adafruit GFX Library」をインストールします。
※当ブログでプログラムした際のバージョンは以下の通りです。
- 「Adafruit ST7735 and ST7789 Library」:「1.9.3」
- 「Adafruit GFX Library」:「1.11.1」
ライブラリのインストールは、次の記事で紹介しています。
Arduino IDE」では、使用する機能やセンサー、ボードを使用するプログラムで使用できる有効なライブラリが公開されています。ライブラリを使用すると、効率的かつ品質を確保したプログラミングが可能です。 ここでは、Ardu[…]
時刻同期のためのWi-Fi接続設定
今回のプログラムではWi-Fi接続や時刻同期が必要です。Wi-Fiアクセスポイントへの接続方法や、時刻同期については次の記事で紹介している内容を使って行います。詳細は記事を参照してくださいね!
Wi-Fi接続の方法は、次の記事で紹介しています。
すけろく なんか、M5StickCが「在庫なし」になっている。 げんろく ああ、新しい「M5StickC Plus」が出たからな。 旧版は在庫限りになっているのだろう。 すけろく[…]
すけろく M5StickC Plusの大まかな違いは分かった。 WiFi接続をしてみるか。 げんろく そうだな。 M5StickCと同じように使えるのか確認してみよう。 この記事では、M5[…]
すけろく 前回はWiFi接続することができた。 次は時刻同期がしたいな。 げんろく たしかに。時刻同期は基本だからな。 以前M5StickCでやったプログラムをベースに 実装してみ[…]
OpenWeatherからJSONデータを取得する方法
今回のプログラムでは、天気情報の取得も必要になります。データ取得にはHTTP通信が必要になります。
OpenWeatherからの情報取得方法や、HTTP通信時の証明書を記載する方法については、次の記事で紹介しています。詳細は、記事を参照してください。
JSONデータの取得やHTTP通信の方法は、次の記事で紹介しています。
すけろく 普段、何気なくブラウザでインターネットサイトを 見ているが、URLの最初のHttpsとはなんだ? げんろく httpsはHttpの通信を暗号化して行うものだ。 ちょっと違いを押さえてみるか[…]
すけろく 前回の記事でJSON形式データは取り扱うことができた。 これでインターネットにあるサービスを活用できるな。 げんろく そうだな。 今回は天気情報を提供しているサイトからJSON形式データを[…]
AdafruitGFXを使った天気表示プログラム
Arduino IDEを起動して、「ファイル」メニューから「新規ファイル」を選択し、表示されるスケッチに以下のように記述します。
Arduino IDE スケッチ例
(1)メインプログラム
①Wi-Fi接続のSSID、パスワード(Wi-Fi設定を「M5StickC Plus」へ保存済みの場合は編集不要)
②OpenWeatherのAPIキーと緯度、経度
③OpenWeatherのルート証明書(スケッチ例では、「”Please correct it to the value that suits your environment.”」と記載しています)
(2)アイコン画像定義ファイル
M5StickC Plusへの書き込み
- 「ファイル」メニューから「名前を付けて保存」で任意の名前を付けて保存します。
- 「ツール」メニューから「ボード」情報を確認し、M5StickC Plusであるか確認します。
この際、「シリアルポート」にマイコンを接続したCOMポートが指定されているかも確認します。 - 「ツール」メニューから「Patition Scheme」を「”No OTA(Large APP)”」にします。
※ここを変更しないと、スケッチが大きいというエラーになります。 - 「ツール」メニューから「シリアルモニタ」を選択してシリアルモニタを起動します。
- 「スケッチ」メニューから「マイコンボードに書き込む」を選択します。
プログラム実行結果
M5StickC Plusのディスプレイに以下のとおり表示されれば成功です。
※アイコン画像は、ご自身で設定したものになっています。
また、シリアルモニタには次のように表示されます。
Connecting to ”Wi-Fi接続先のSSID” .... WiFi connected IP address: 192.xxx.xxx.xxx NTP : ntp.jst.mfeed.ad.jp RTC 2022-06-02 11:01:51 https://api.openweathermap.org/data/2.5/weather?lat=35.6828&lon=139.759&units=metric&lang=ja&appid=API-Key [HTTPS] begin... [HTTPS] GET... [HTTPS] GET... code: 200 {"coord":{"lon":139.759,"lat":35.6828},"weather":[{"id":803,"main":"Clouds","description":"曇りがち","icon":"04d"}],"base":"stations","main":{"temp":18.27,"feels_like":18.03,"temp_min":17.1,"temp_max":18.88,"pressure":1012,"humidity":72},"visibility":10000,"wind":{"speed":4.63,"deg":50},"clouds":{"all":75},"dt":1654654467,"sys":{"type":2,"id":268395,"country":"JP","sunrise":1654629905,"sunset":1654682101},"timezone":32400,"id":1861060,"name":"日本","cod":200}. Get OpenWeather json data 11:23:01 https://api.openweathermap.org/data/2.5/weather?lat=35.6828&lon=139.759&units=metric&lang=ja&appid=API-Key [HTTPS] begin... [HTTPS] GET... [HTTPS] GET... code: 200 {"coord":{"lon":139.759,"lat":35.6828},"weather":[{"id":803,"main":"Clouds","description":"曇りがち","icon":"04d"}],"base":"stations","main":{"temp":18.27,"feels_like":18.03,"temp_min":17.1,"temp_max":18.88,"pressure":1012,"humidity":72},"visibility":10000,"wind":{"speed":4.63,"deg":50},"clouds":{"all":75},"dt":1654654467,"sys":{"type":2,"id":268395,"country":"JP","sunrise":1654629905,"sunset":1654682101},"timezone":32400,"id":1861060,"name":"日本","cod":200}
編集後記
いかがだったでしょうか。
1時間に1回の更新にできたので、ほぼリアルタイムのお天気を知ることができるようになりました!
今回の記事は以上になります。
最後までご覧いただきありがとうございました。
今回使用したマイコンはこちら!
画面付きで小型のマイコンです。旧版のM5StickCから、ディスプレイサイズ、バッテリ容量が変更になっています。ブザーも実装されました。通信(WiFi/Bluetooth)機能、6軸加速度センサーも搭載されています。
Aruduino で開発できます。Amazonで確認
これからはじめる方にお勧めの参考図書はこちら!