misoのアイコン画像
miso 2020年12月28日作成 (2020年12月28日更新)
製作品 製作品 閲覧数 1571
miso 2020年12月28日作成 (2020年12月28日更新) 製作品 製作品 閲覧数 1571

M5Stackで作るGMT表示なNTP時計

M5Stackで作るGMT表示なNTP時計

はじめに

M5StackでGMT表示なNTP時計を作ったのでご紹介。
elchikaへの投稿も今回初です。

なんで作ったの?

普段からAWS上で作業することが多いのですが、多くの部分で時刻がGMT表記となっております😰

混乱することが多いです・・・それに伴う単純な作業ミスを連発😢
ふと「混乱を解消してくれるステキなデバイスが欲しい」と思って作ってみました😁

概要

  • NTPで時刻同期を行いながら液晶にGMTな時刻を表示する装置
  • ついでに温度と湿度も表示
  • 液晶の上に置けてデザイン的にも良い感じの奴

材料

  • M5Stack Basic
  • DHT12(Grove)
  • 3Dプリンターで自分で作った良い感じのケース

作る工程は接続とケースに入れるだけなので割愛😉

GNU Lesser General Public License v2.1

#include <M5Stack.h>
#include "DHT12.h"
#include <Wire.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include <WiFiClientSecure.h>

#pragma GCC diagnostic ignored "-Wdeprecated-declarations"

// Wifi
const char* ssid     = "GUEST";
const char* password = "VivaM5Stack";

// Time
const long  gmt_offset = 3600 * 0;  // GMT
const int   daylight   = 3600 * 0;  // No daylight time
const char* ntp_server = "pool.ntp.org";
struct tm td;

// DHT
DHT12 dht12;

void setup() {
  M5.begin();
  Wire.begin();
  Serial.begin(115200);
  WiFi.disconnect(true);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    Serial.println("Error: WiFi");
    delay(1000);
  }
  configTime(gmt_offset, daylight, ntp_server);
  while (!getLocalTime(&td)) {
    Serial.println("Error: NTP");
    delay(1000);
  }
  Serial.printf("Free Heap Size = %d\r\n", esp_get_free_heap_size());
  Serial.printf("System Free Heap Size = %d\r\n", system_get_free_heap_size());
  M5.Lcd.fillScreen(BLACK);
  playBeep(2000,100);
}

void loop() {
  while (!getLocalTime(&td)) {
    Serial.println("Error: NTP");
    delay(1000);
  }
  M5.Lcd.setTextColor(WHITE);
  M5.Lcd.setTextSize(2);
  char now[26];
  strftime(now, sizeof(now), "%Y-%m-%dT", &td);
  M5.Lcd.fillRect(65,50,100,20, BLACK);
  M5.Lcd.setCursor(65, 50);
  M5.Lcd.println(now);
  strftime(now, sizeof(now), "%H:%M:%S+GMT", &td);
  M5.Lcd.fillRect(65,70,100,20, BLACK);
  M5.Lcd.setCursor(65, 70);
  M5.Lcd.println(now);
  int temperature = int(dht12.readTemperature());
  int humidity = int(dht12.readHumidity());
  M5.Lcd.setTextSize(4);
  M5.Lcd.fillRect(200,100,100,100, BLACK);
  M5.Lcd.setCursor(65, 100);
  M5.Lcd.print("TEMP: ");
  M5.Lcd.printf("%d\n", temperature);
  M5.Lcd.setCursor(65, 140);
  M5.Lcd.print("HUMI: ");
  M5.Lcd.printf("%d\n", humidity);
  delay(1000);
}

おわりに

これでGMTな時刻と温室度を何時でも確認できるようになりました!😋
ちょっとした工夫で作業効率が上がります。

あると便利が実現できる電子工作って素晴らしいですね!

misoのアイコン画像
寝るのが趣味
ログインしてコメントを投稿する