概要
小型且つディスプレイ付きで便利そうなAtomS3を購入しました。
最終的には工場などの温度ログをmodbusTCPにて取得したいと考えています。
まずはログに必要な時刻データを取得できるようにNTPサーバーの時刻と同期させます。
環境
エディタ:VisualStudioCode(拡張機能:PlatformIO IDE)
ライブラリはPlatformIOで以下をインストール
1. M5Unified
コード
#include <Arduino.h>
#include <M5AtomDisplay.h>
#include <M5Unified.h>
#include <WiFi.h>
// WiFi credentials.
const char* WIFI_SSID = "YOUR_SSID";
const char* WIFI_PASS = "YOUR_PASS";
// Time
char ntpServer[] = "ntp.nict.jp";
const long gmtOffset_sec = 9 * 3600;
const int daylightOffset_sec = 0;
struct tm timeinfo;
String second, minute, hour, dayOfWeek, dayOfMonth, month, year;
void getTimeFromNTP(){
// NTPサーバと時刻を同期
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
while (!getLocalTime(&timeinfo)) {
delay(1000);
}
}
void getTime(String* year,String* month,String* day,String* hour,String* min,String* sec,String* wday){
char buf[10];
getLocalTime(&timeinfo);
*year = String(timeinfo.tm_year + 1900);
sprintf(buf,"%02d",timeinfo.tm_mon + 1);
*month = String(buf);
sprintf(buf,"%02d",timeinfo.tm_mday);
*day = String(buf);
sprintf(buf,"%02d",timeinfo.tm_hour);
*hour = String(buf);
sprintf(buf,"%02d",timeinfo.tm_min);
*min = String(buf);
sprintf(buf,"%02d",timeinfo.tm_sec);
*sec = String(buf);
strftime(buf,10, "%A", &timeinfo);
*wday=String(buf);
}
void setup() {
auto cfg = M5.config();
M5.begin(cfg);
M5.Display.init();
M5.Display.setRotation(2);
M5.Display.setFont(&fonts::lgfxJapanGothicP_12);
M5.Display.setTextColor(WHITE, BLACK);
M5.Display.println("NTP時刻同期");
//Connect WiFi
WiFi.begin(WIFI_SSID, WIFI_PASS);
while( WiFi.status() != WL_CONNECTED) {
M5.Display.setCursor(12,12);
M5.Display.print("* ");
delay(200);
M5.Display.setCursor(12,12);
M5.Display.print(" * ");
delay(200);
M5.Display.setCursor(12,12);
M5.Display.print(" *");
delay(200);
}
M5.Display.setCursor(0,12);
M5.Display.print("IP:");
M5.Display.print(WiFi.localIP());
// timeSet
getTimeFromNTP();
}
void loop() {
getTime(&year,&month,&dayOfMonth,&hour,&minute,&second,&dayOfWeek);
M5.Display.setCursor(0,50);
M5.Display.print(year+"/"+month+"/"+dayOfMonth);
M5.Display.setCursor(0,62);
M5.Display.print(hour+":"+minute+":"+second);
M5.Display.setCursor(0,74);
M5.Display.print(dayOfWeek);
delay(1000);
}
参考サイト