LoginSignup
1
0

More than 1 year has passed since last update.

AtomS3 NTPサーバー時刻の同期

Last updated at Posted at 2023-06-02

概要

小型且つディスプレイ付きで便利そうなAtomS3を購入しました。
最終的には工場などの温度ログをmodbusTCPにて取得したいと考えています。
まずはログに必要な時刻データを取得できるようにNTPサーバーの時刻と同期させます。

スクリーンショット 2023-06-02 094557.png

環境

エディタ: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);
}

参考サイト

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0