Her er kode for å lese NTP (OBS Uten noen WiFi som selvfølgelig trengs)
Sitat#include <time.h>//Time#define MY_NTP_SERVER "pool.ntp.org"#define MY_TZ "CET-1CEST,M3.5.0,M10.5.0/3" // TZ = TimeZone hentet herfra: https://ftp.fau.de/aminet/util/time/tzinfo.txttime_t now; // this is the epoch (Unixtid: Antall sekunder siden UTC 00:00:00 1/1-1970)tm timeNow;time_t last;tm timeLast;// ****************************void setup() {// Setup Serial MonitorSerial.begin(115200);// NTPconfigTime(0, 0, MY_NTP_SERVER); // 0, 0 because we will use TZ in the next linesetenv("TZ", MY_TZ, 1); // Set environment variable with your time zonetzset();}// ****************************void loop(){time(&now); // read the current timelocaltime_r(&now, &timeNow); // update the structure with the current timeif (timeNow.tm_year==70) { // Tid ikke klar ennådelay(1000); // Kun for debug lesbarhet i Serial monitorSerial.println("Venter på Tid");} else {if (timeNow.tm_sec!= timeLast.tm_sec) { // Har det gått et sekund siden sist?Serial.print("Year:");Serial.print(timeNow.tm_year);Serial.print(" Hour:");Serial.print(timeNow.tm_hour);Serial.print(" Min:");Serial.print(timeNow.tm_min);Serial.print(" Sec:");Serial.print(timeNow.tm_sec);Serial.println();timeLast=timeNow;}}}
Med NTP (Network Time Protocol) kan vi lese eksakt tid fra Internet.
Da trenger vi selvfølgelig en Internet forbindelse. Det enklese er å bruke WiFiManager men siden dette er en guideserie primært for MQTT bruker vi like godt den isteden.
Det er liten vits i å kalle NTP bibliokeket før vi har fått WiFi forbindelse så jeg bruker
if (MQTTclient.isWifiConnected()) {
for å sjekke dette.
NTP Biblioteket kaller selv opp NTP serveren hvert 60 minutt og i starten kan det ta litt tid før vi får første tidsavlesning. Før tid er klar vil biblioteket returnere tid = 0 som er 00:00:00 1/1-1970
Året som returneres er år - 1900.
(Du skal altså legge til 1900 på det tallet du får)
For å få riktig tidssone og sommer/vintertid sier vi ifra om dette til biblioteket.
Kodene er hentet herfra: https://ftp.fau.de/aminet/util/time/tzinfo.txt
Kodene er hentet herfra: https://ftp.fau.de/aminet/util/time/tzinfo.txt
Her er komplett kode med MQTT som leser klokka og skriver den til Serial Monitor:
Jeg bruker onboard LED til å vise om jeg har WiFi connect.
Sitat#define ONBOARD_LED 2#include <EspMQTTClient.h>#include <time.h>//Time#define MY_NTP_SERVER "pool.ntp.org"#define MY_TZ "CET-1CEST,M3.5.0,M10.5.0/3" // TZ = TimeZone hentet herfra: https://ftp.fau.de/aminet/util/time/tzinfo.txttime_t now; // this is the epoch (Unixtid: Antall sekunder siden UTC 00:00:00 1/1-1970)tm timeNow;time_t last;tm timeLast;//MQTTEspMQTTClient MQTTclient("ThePromisedLAN", // SSID"Hallelujah!", // WiFi Password"192.168.1.2", // MQTT Broker server ip"", // MQTTUsername Can be omitted if not needed"", // MQTTPassword Can be omitted if not needed"NPTTestClient", // Client name that uniquely identify your device1883 // The MQTT port, default to 1883. this line can be omitted);// ****************************void setup() {// Setup Serial MonitorSerial.begin(115200);// Set pin mode for test LED som viser WiFi Status denne gangenpinMode(ONBOARD_LED,OUTPUT);digitalWrite(ONBOARD_LED,HIGH);// MQTTclient.setKeepAlive();MQTTclient.setKeepAlive(60);// NTPconfigTime(0, 0, MY_NTP_SERVER); // 0, 0 because we will use TZ in the next linesetenv("TZ", MY_TZ, 1); // Set environment variable with your time zonetzset();}// ****************************void loop(){MQTTclient.loop();if (MQTTclient.isWifiConnected()) {digitalWrite(ONBOARD_LED,LOW);time(&now); // read the current timelocaltime_r(&now, &timeNow); // update the structure with the current timeif (timeNow.tm_year==70) { // Tid ikke klar ennådelay(1000); // Kun for debug lesbarhet i Serial monitorSerial.println("Venter på Tid");} else {if (timeNow.tm_sec!= timeLast.tm_sec) { // Har det gått et sekund siden sist?Serial.print("Year:");Serial.print(timeNow.tm_year);Serial.print(" Hour:");Serial.print(timeNow.tm_hour);Serial.print(" Min:");Serial.print(timeNow.tm_min);Serial.print(" Sec:");Serial.print(timeNow.tm_sec);Serial.println();timeLast=timeNow;}}} else {digitalWrite(ONBOARD_LED,HIGH); //Venter på WiFi COnnect}}void onConnectionEstablished(){Serial.println("onConnectionEstablished");MQTTclient.publish("NPTTestClient/status", "started");}
Anbefalte kommentarer
Bli med i samtalen
Du kan publisere innhold nå og registrere deg senere. Hvis du har en konto, logg inn nå for å poste med kontoen din.