Hallo zusammen,
ich bastel gerade diverse Dinge mit einem ESP8266. Ziel ist bestimmte Codes genau zu definierten Zeiten ausführen zu lassen, ohne delay oder millis.
Dazu habe ich auf einem Raspberry Pi einen NTP Server installiert und hole mir mit dem ESP8266 von dort die aktuelle Zeit. Im Beispielcode unten passiert die Zeitabfrage jede Sekunde ...
Ich frage mich allerdings, ob das Intervall von 1 Sekunden nicht zu extrem ist? "Blockiere" ich damit meinem Raspi wenn ich mit mehreren ESP8266 dort jede Sekunde vom NTP die Zeit abfrage? Auf einem öffentlichen NTP Server würde die abfragende IP wohl gebannt werden... VIelleicht hab ihr ja gute Tips für mich
C
#include <ESP8266WiFi.h>
#include <time.h>
const char* ssid = "xxxx";
const char* password = "xxxx";
int year;
byte month, day, hour, minute, second;
uint32_t altzeit;
int abfrage=5.0;
void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
Serial.println("\nConnecting to WiFi");
while (WiFi.status() != WL_CONNECTED)
{
Serial.print(".");
delay(500);
}
configTime(0, 0, "192.168.178.29"); // Pi mit NTP Server
setenv("TZ", "CET-1CEST,M3.5.0,M10.5.0/3", 1); // locale Zeit einstellen
Serial.println("\nWaiting for time");
while (!time(nullptr))
{
Serial.print(".");
}
Serial.println("");
}
void loop()
{
if(millis() - altzeit >= 1000)
{
altzeit = millis();
readtime(); // aktualisieren
if (second ==0 && minute %abfrage==0) Serial.printf("alle 5 Minuten %02u.%02u.%i_%02u:%02u:%02u\n", day,month, year, hour, minute, second);
}
}
// Datum und zeit auslesen
void readtime() {
time_t now = time(nullptr);
struct tm*timeinfo;
time(&now);
timeinfo = localtime(&now);
year = 1900 + timeinfo->tm_year;
month = 1 + timeinfo->tm_mon;
day = timeinfo->tm_mday;
hour = timeinfo->tm_hour;
minute = timeinfo->tm_min;
second = timeinfo->tm_sec;
}
Alles anzeigen