【계속】M5StickC로 날씨 통지 시스템을 만든다(기능 추가&버그 수정&리팩토링)
3057 단어 M5stackArduinoIDEM5StickC
소개
이전에 다음과 같은 기사를 게시했습니다.
- 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의 리더블 코드이라는 책을 읽고 있는 것도 있어, 전회의 소스 코드로부터 가독성을 향상시켰습니다. 변수명이나 제어문의 기재 등을 수정 수정하고 있습니다.
Reference
이 문제에 관하여(【계속】M5StickC로 날씨 통지 시스템을 만든다(기능 추가&버그 수정&리팩토링)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/issi030/items/766ca80887d6fa71af41
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
이런 느낌입니다 (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의 리더블 코드이라는 책을 읽고 있는 것도 있어, 전회의 소스 코드로부터 가독성을 향상시켰습니다. 변수명이나 제어문의 기재 등을 수정 수정하고 있습니다.
Reference
이 문제에 관하여(【계속】M5StickC로 날씨 통지 시스템을 만든다(기능 추가&버그 수정&리팩토링)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/issi030/items/766ca80887d6fa71af41
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
DynamicJsonDocument jsonDoc(10000);//レスポンスデータのJSONオブジェクトを格納する領域を確保(レスポンスデータの想定最大サイズに合わせて大きめ)
deserializeJson(jsonDoc, payload); //HTTPのレスポンス文字列をJSONオブジェクトに変換
JsonVariant jvToday = jsonDoc["forecasts"][gDaySelector];//forecastsプロパティの0番目の要素が今日の天気に関するプロパティ
//~~中略~~
jsonDoc.clear();//JSONオブジェクトの領域をメモリから解放
Reference
이 문제에 관하여(【계속】M5StickC로 날씨 통지 시스템을 만든다(기능 추가&버그 수정&리팩토링)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/issi030/items/766ca80887d6fa71af41텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)