M5Stack

[M5Stack] M5Stackで時刻情報を扱う方法~NTPサーバーに接続して、正しい時刻を表示させる~

投稿日:

今回は、M5StackをNTPサーバーと接続させて、正しい時刻を、画面に表示させます。

M5Stackが正しい時刻を持つことで、画面に時刻を表示できる以外に、センサー情報をクラウド等へアップロードする際のタイムスタンプとしても利用できます。

スポンサードサーチ

この記事で解決できること

この記事を読むことで、M5Stackで以下ができるようになります。

・NTPサーバから最新の時刻情報を取得する方法。

・M5Stackで時刻カウントして、これを画面に表示する方法

前提

・M5Stack と ArduinoIDE

M5Stackは様々な種類があります。以下の記事で説明していますので、持っていない人は見てください。

スポンサードサーチ

構成

NTPサーバーとは、正しい時刻情報を取得・配信しているサーバーのことです。時刻情報をサーバーとクライアントとの間でやりとりする際に、TCP/IPネットワークを通じてNTP(Network Time Protocol)という通信プロトコロルを使用して問い合わせることにより、コンピュータの内部時計を正しく設定することができます。

https://www.idcf.jp/words/ntp.html

サンプルコード

#include <M5Stack.h>
#include <WiFi.h>
#include "time.h"

// Wi-FiのSSID
char *ssid = "************";
// Wi-Fiのパスワード
char *password = "**************";

#define JST 3600* 9

void setup_wifi(){
  
  Serial.println("Connecting to ");
  Serial.print(ssid);

  // WiFi接続性改善のため、いったん切断
  WiFi.disconnect( true, true ); //WiFi OFF, eraseAP=true
  delay(500);
  
  // WiFi開始
  WiFi.begin(ssid, password);
 
  // Wi-Fi接続待ち
  while (WiFi.status() != WL_CONNECTED){
    delay(500);
    M5.Lcd.print(".");
  }

  // WiFi接続成功メッセージの表示
  M5.Lcd.setCursor(10, 40);
  M5.Lcd.setTextSize(2);
  M5.Lcd.println("WiFi Connected.");

  // M5StackのIPアドレスを表示
  M5.Lcd.print("IP address: ");
  M5.Lcd.println(WiFi.localIP());
  
}

void printLocalTime(){
  struct tm timeinfo;

  if(!getLocalTime(&timeinfo)){
    M5.Lcd.println("Failed to obtain time");
    return;
  }
  // テキストサイズ指定
  M5.Lcd.setTextSize(2);
  // カーソル位置を設定
  M5.Lcd.setCursor(40,100);
  M5.Lcd.printf("%04d-%02d-%02d ", timeinfo.tm_year+1900, timeinfo.tm_mon, timeinfo.tm_mday);
                
  M5.Lcd.setCursor(40,140);
  M5.Lcd.printf("%02d:%02d:%02d",timeinfo.tm_hour,timeinfo.tm_min,timeinfo.tm_sec);
}

void setup(){

  // M5Stack objectの初期化
  M5.begin();
//  M5.Power.begin();
  
  // Wi-Fi処理の開始
  setup_wifi();
  
  configTime(JST, 0, "ntp.nict.jp", "ntp.jst.mfeed.ad.jp");
  
  printLocalTime();

  WiFi.disconnect(true);
  WiFi.mode(WIFI_OFF);
}

void loop(){
  delay(1000);
  printLocalTime();
}

ArduinoIDEで、上記サンプルコードをコンパイルして、M5Stackにダウンロードすると、以下の流れで動きます。

①Wi-Fi接続

②NTPサーバーにアクセス → 最新時間の取得

③1秒ごとに、最新時間を取得して、画面に表示

M5Stackの画面には、以下が表示されるはずです。

 年月日

 現在の時刻

スポンサードサーチ

まとめ

NTPサーバーから最新の時刻を取得して、M5Stackの画面に表示する方法を紹介しました。

参考

-M5Stack
-,

Copyright© ラズパイの実 , 2020 All Rights Reserved Powered by STINGER.