M5StickCをIoTデバイスとして利用する場合、センサで各種データを採取するのと同時に、そのデータを採取した時刻も取得したいケースがあります。
リンク
そんな訳で、今回は、M5StickCからNTPサーバーに接続して、時刻情報を取得する方法を確認したいと思います。
取得した時刻情報を使って、LCD画面に現在時刻を表示させてみます。
スケッチは以下のようになります。
#include <M5StickC.h>
#include <WiFi.h>
#include "time.h"
const char* ssid = "XXXXXXXX";
const char* password = "XXXXXXXX";
void setup() {
M5.begin();
M5.Lcd.setRotation(3);
M5.Lcd.setCursor(0, 0, 2);
M5.Lcd.printf("Connecting to %s ", ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
M5.Lcd.print(".");
}
M5.Lcd.println(" CONNECTED");
configTime(9 * 3600, 0, "ntp.nict.jp"); // Set ntp time to local
}
void loop() {
struct tm timeInfo;
getLocalTime(&timeInfo);
char now[20];
sprintf(now, "%04d/%02d/%02d %02d:%02d:%02d",
timeInfo.tm_year + 1900,
timeInfo.tm_mon + 1,
timeInfo.tm_mday,
timeInfo.tm_hour,
timeInfo.tm_min,
timeInfo.tm_sec
);
M5.Lcd.fillScreen(BLACK);
M5.Lcd.setCursor(0, 0, 2);
M5.Lcd.println(now);
delay(1000);
}
M5StickCを起動すると、最初にWi-Fiネットワークに接続します。接続が完了すると、「configTime()」でNTPサーバに接続します。
loop関数では、1秒毎に「getLocalTime()」で時刻情報を取得し、書式を整えてLCD画面に表示します。
以下のように、時刻情報が表示されています。「configTime()」でNTPサーバに接続できていれば、その後はWi-Fiネットワークに繋がっていなくても、時刻は更新されるようです。
なお、私がM5Stack、M5StickCの使い方を習得するのにあたっては、以下の書籍を参考にさせていただきました。
リンク
ごく基本的なところから、かなり複雑なスケッチや、ネットワーク接続など、比較的高度なものまで、つまづかずに読み進めていけるような構成になっており、大変わかりやすい本です。
リンク