Help us understand the problem. What is going on with this article?

【続】M5StickCで天気通知システムを作る(機能追加&バグ修正&リファクタリング)

はじめに

以前、以下のような記事を投稿しました。
- M5StickCで天気通知システムを作る
それからかなり間が空いてしまったのですが、軽微な機能追加と、バグ修正、ソースコードのリファクタリングを行ったので本記事を投稿することにしました。
ソースコード全体は下記リンクで公開しています。
https://github.com/issi8131/public/tree/master/M5StickC_WeatherAlert

動作

こんな感じです(GIF画像)。
bbbbb.gif

変更点

1. 最低・最高気温の表示

 本ガジェットで使用している天気取得APIWeather Hacks お天気Webサービス(※PCからアクセスが必要)ですが、リンク先の仕様に記載があるように、レスポンスJSONデータ内にtemperatureというプロパティがあり、最低気温と最高気温が取得できます。そこで、これらの情報もディスプレイに表示できるようにしました。
ただし、取得タイミングによっては気温の値がNullで返ってくることもあるため、その場合は表示用の内部変数を更新しない仕様としました。

2. 天気表示の日付先送り

 天気取得APIからのレスポンスには、2日先までの天気情報が含まれています。M5StickCのAボタン(ディスプレイ横のデカいボタン)を押すと、2日先までの天気を表示できるようにしました。

3. バグ修正

 前回のコードでは、電源を入れて2~3日ほどすると天気取得に失敗するようになるバグがありました。おそらくメモリリーク系でやらかしているのでは、と考え、使用しているArduinoJSONライブラリのリファレンスを注意して読んでみました。
https://arduinojson.org/v6/api/dynamicjsondocument
そして、DynamicJsonDocumentオブジェクト(APIからのレスポンスJSONを格納する領域をヒープ領域に確保する)を利用している部分で、都度メモリ解放するよう修正したところ安定動作するようになりました。

DynamicJsonDocument jsonDoc(10000);//レスポンスデータのJSONオブジェクトを格納する領域を確保(レスポンスデータの想定最大サイズに合わせて大きめ)
deserializeJson(jsonDoc, payload); //HTTPのレスポンス文字列をJSONオブジェクトに変換
JsonVariant jvToday = jsonDoc["forecasts"][gDaySelector];//forecastsプロパティの0番目の要素が今日の天気に関するプロパティ
//~~中略~~
jsonDoc.clear();//JSONオブジェクトの領域をメモリから解放

4. コードリファクタリング

 最近、O'Reillyのリーダブルコードという本を読んでいることもあり、前回のソースコードから読みやすさを向上させました。変数名や制御文の記載等を修正修正しています。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした