編集履歴一覧に戻る
misoのアイコン画像

miso が 2020年12月28日13時05分37秒 に編集

初版

タイトルの変更

+

M5Stackで作るGMT表示なNTP時計

タグの変更

+

秋葉原2021

+

ESP32

+

M5Stack

メイン画像の変更

メイン画像が設定されました

本文の変更

+

# はじめに M5StackでGMT表示なNTP時計を作ったのでご紹介。 普段からAWS上で作業することが多いのですが、多くの部分で時刻がGMT表記となっており結構混乱することが多いです。 ふと「混乱を解消してくれるステキなデバイスが欲しい」と思って作ってみました。 # 概要 - NTPで時刻同期を行いながら液晶にGMTな時刻を表示する装置 - ついでに温度と湿度も表示 - 液晶の上に置けてデザイン的にも良い感じの奴 # 材料 - M5Stack Basic - DHT12(Grove) #### GNU Lesser General Public License v2.1 ```c #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な時刻と温室度を何時でも確認できるようになりました。 ちょっとした工夫で作業効率が上がるので、あると便利が実現できるのは良いですね。