読者です 読者をやめる 読者になる 読者になる

知的好奇心 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>

//  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