知的好奇心 for IoT

IoT関連の知的好奇心を探求するブログです

ESP8266(ESP-WROOM-02)でNTPを使って定期的にヒープサイズを出力する

WIO NODEの謎のリセット問題を調べるために作ったスケッチを公開します。

このスケッチを動かすためには、ESP8266のライブラリの他にNTPClientTimeライブラリをインストールする必要があります。

Arduino IDEのスケッチメニューから[ライブラリをインクルード]-[ライブラリを管理...]を選び、ntpで検索をして2つのライブラリをインストールしてください。

ライブラリマネージャー (NTPClientとTimeライブラリをインストール)

f:id:IntellectualCuriosity:20170311235518p:plain

スケッチ

#include <ESP8266WiFi.h>
#include <NTPClient.h>
#include <WiFiUdp.h>
#include <Time.h>
// WindowsArduinoを使用しているときは<Time.h>の代わりに<TimeLib.h>をインクルードしてください。 // WiFiSSIDとパスワードをセット const char *WIFI_SSID = "<SSID>"; const char *WIFI_PASSWORD = "<PASSWORD>"; // NTP用 WiFiUDP ntpUDP; const char *NTP_SERVER = "ntp.nict.jp"; // 情報通信研究機構(NICT)の公開NTPサーバー const int TIME_OFFSET = 9 * 60 * 60; // UTC+9h (JST) NTPClient timeClient(ntpUDP, NTP_SERVER, TIME_OFFSET); const unsigned long NTP_INTERVAL_TIME = 24 * 60 * 60 * 1000; // 時刻を合わせる周期 24h unsigned long ntp_interval; void setup() { Serial.begin(74880); Serial.println("\r\nReset Reason: " + ESP.getResetReason()); // 前回のリセットの理由を出力 Serial.println(String("Free Heap Size: ") + ESP.getFreeHeap()); // フリーヒープサイズを出力 // WiFiを接続する WiFi.begin(WIFI_SSID, WIFI_PASSWORD); Serial.print("Waiting for Wi-Fi connection"); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println("\r\nConnected!"); // NTP関連の初期化 timeClient.begin(); timeClient.update(); setTime(timeClient.getEpochTime()); printLog("Program Start!"); ntp_interval = millis(); } void loop() { // ここにメインのプログラムを書く // 定期的に時刻を合わせフリーヒープサイズを出力 if (millis() - ntp_interval > NTP_INTERVAL_TIME) { timeClient.update(); printLog(String("Free Heap Size: ") + ESP.getFreeHeap()); ntp_interval = millis(); } } // ログ出力 void printLog(String st) { char dt[21]; sprintf(dt, "%04d/%02d/%02d %02d:%02d:%02d ", year(), month(), day(), hour(), minute(), second()); Serial.println(String(dt) + st); }

実行例 (外部リセットをかけた後)

シリアルモニタの速度を74880にすると文字化けせずに表示されます

 ets Jan  8 2013,rst cause:2, boot mode:(3,6)

load 0x4010f000, len 1384, room 16 
tail 8
chksum 0x2d
csum 0x2d
v09f0c112
~ld

Reset Reason: External System
Free Heap Size: 46888
Waiting for Wi-Fi connection.....
Connected!
2017/03/12 01:09:33 Program Start!
2017/03/13 01:09:33 Free Heap Size: 46496