【계속】M5StickC로 날씨 통지 시스템을 만든다(기능 추가&버그 수정&리팩토링)

소개



이전에 다음과 같은 기사를 게시했습니다.
- M5StickC로 날씨 알림 시스템 만들기
그리고 꽤 사이가 비어 버렸습니다만, 경미한 기능 추가와, 버그 수정, 소스 코드의 리팩토링을 실시했으므로 본 기사를 투고하기로 했습니다.
소스 코드 전체는 아래 링크에서 공개하고 있습니다.
htps : // 기주 b. 코 m / 함께 8131 / Pu b c / t Ree / Ma s r / M5S Chick C_ Ue Ate Rat rt

동작



이런 느낌입니다 (GIF 이미지).


변경점



1. 최저·최고 기온의 표시



본 가젯에서 사용하고 있는 날씨 취득 API Weather Hacks 날씨 웹 서비스 (※ PC에서 액세스 필요) 하지만, 링크처의 사양에 기재가 있도록(듯이), 응답 JSON 데이터내에 temperature라고 하는 프로퍼티가 있어, 최저 기온과 최고 기온을 취득할 수 있습니다. 그래서 이러한 정보도 디스플레이에 표시할 수 있도록 했습니다.
다만, 취득 타이밍에 따라서는 기온의 값이 Null로 돌아오는 경우도 있기 때문에, 그 경우는 표시용의 내부 변수를 갱신하지 않는 사양으로 했습니다.

2. 날씨 표시 날짜 선송



날씨 취득 API로부터의 응답에는, 2일 전까지의 날씨 정보가 포함되어 있습니다. M5StickC의 A 버튼(디스플레이 옆의 큰 버튼)을 누르면 2일 전까지의 날씨를 표시할 수 있게 되었습니다.

3. 버그 수정



마지막 코드에서는 전원을 켜고 2~3일 정도 하면 날씨 취득에 실패하게 되는 버그가 있었습니다. 아마도 메모리 누수 시스템에서 부러워하는 것이라고 생각하고 사용하고있는 ArduinoJSON 라이브러리의 참조를주의 깊게 읽어 보았습니다.
h tps:// 아르즈이의 j손. 오 rg/V6/아피/dy 수준 cj성덕면 t
그리고 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의 리더블 코드이라는 책을 읽고 있는 것도 있어, 전회의 소스 코드로부터 가독성을 향상시켰습니다. 변수명이나 제어문의 기재 등을 수정 수정하고 있습니다.

좋은 웹페이지 즐겨찾기