WLAN-Verbindung und NTP-Zeitabfrage (Arduino)
Dieses Beispiel zeigt, wie das Lernboard eine Verbindung zu einem WLAN-Netzwerk herstellt und die aktuelle Zeit von einem NTP-Server (Network Time Protocol) abruft.
#Funktionsübersicht
- Verbindung mit einem WLAN-Netzwerk herstellen
- Systemzeit über einen NTP-Server synchronisieren
- Aktuelle Zeit alle 5 Sekunden auf der Konsole ausgeben
#Voraussetzungen
- Arduino IDE mit ESP32-Board-Unterstützung
- Board: "ESP32C6 Dev Module"
- Zugang zu einem WLAN-Netzwerk
- Internetzugang für NTP-Abfrage
#Code
/**
* Lernboard Beispiel: WLAN-Verbindung und NTP-Zeitabfrage
* ========================================================
* Dieses Beispiel zeigt:
* - Verbindung mit einem WLAN-Netzwerk
* - Synchronisation der Zeit über NTP
* - Zyklische Ausgabe der aktuellen Zeit
*/
#include <WiFi.h>
#include <time.h>
// WLAN-Zugangsdaten anpassen
const char* WLAN_SSID = "DEIN_WLAN_NAME";
const char* WLAN_PASSWORD = "DEIN_WLAN_PASSWORT";
// NTP-Konfiguration
const char* NTP_SERVER = "pool.ntp.org";
const long GMT_OFFSET_SEC = 3600; // UTC+1 für MEZ
const int DAYLIGHT_OFFSET_SEC = 3600; // +1 Stunde für Sommerzeit
// Intervall für Zeitausgabe (in Millisekunden)
const unsigned long PRINT_INTERVAL = 5000;
unsigned long lastPrintTime = 0;
void setup setup() {
Serial.begin(115200);
delay(1000);
Serial.println("========================================");
Serial.println("Lernboard - WLAN & NTP Beispiel");
Serial.println("========================================");
Serial.println();
// WLAN verbinden
if (!connectWLAN()) {
Serial.println("Programm gestoppt.");
while (true) {
delay(1000);
}
}
// Zeit synchronisieren
syncTime();
Serial.println();
Serial.println("Zeitausgabe alle 5 Sekunden:");
Serial.println("----------------------------------------");
}
void loop loop() {
unsigned long currentTime = millis();
// Zeit alle 5 Sekunden ausgeben
if (currentTime - lastPrintTime >= PRINT_INTERVAL) {
lastPrintTime = currentTime;
printLocalTime();
}
// WLAN-Verbindung prüfen und ggf. neu verbinden
if (WiFi.status() != WL_CONNECTED) {
Serial.println("WLAN-Verbindung verloren. Verbinde neu...");
connectWLAN();
}
}
/**
* Stellt eine Verbindung zum WLAN her.
* @return true bei Erfolg, false bei Fehler
*/
bool connectWLAN connectWLAN() {
Serial.print("Verbinde mit WLAN '");
Serial.print(WLAN_SSID);
Serial.println("'...");
WiFi.mode(WIFI_STA);
WiFi.begin(WLAN_SSID, WLAN_PASSWORD);
// Warte auf Verbindung (max. 20 Sekunden)
int timeout = 20;
while (WiFi.status() != WL_CONNECTED && timeout > 0) {
Serial.print(".");
delay(1000);
timeout--;
}
if (WiFi.status() == WL_CONNECTED) {
Serial.println();
Serial.println("Verbunden!");
Serial.print("IP-Adresse: ");
Serial.println(WiFi.localIP());
return true;
} else {
Serial.println();
Serial.println("Verbindung fehlgeschlagen!");
return false;
}
}
/**
* Synchronisiert die Zeit mit einem NTP-Server.
*/
void syncTime syncTime() {
Serial.print("Synchronisiere Zeit mit ");
Serial.print(NTP_SERVER);
Serial.println("...");
configTime(GMT_OFFSET_SEC, DAYLIGHT_OFFSET_SEC, NTP_SERVER);
// Warte auf gültige Zeit
struct tm timeinfo;
int retry = 0;
while (!getLocalTime(&timeinfo) && retry < 10) {
Serial.print(".");
delay(500);
retry++;
}
if (retry < 10) {
Serial.println();
Serial.println("Zeit erfolgreich synchronisiert!");
} else {
Serial.println();
Serial.println("NTP-Synchronisation fehlgeschlagen!");
}
}
/**
* Gibt die aktuelle lokale Zeit auf der Konsole aus.
*/
void printLocalTime printLocalTime() {
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) {
Serial.println("Fehler beim Lesen der Zeit!");
return;
}
// Format: DD.MM.YYYY HH:MM:SS
char timeString[25];
strftime(timeString, sizeof(timeString), "%d.%m.%Y %H:%M:%S", &timeinfo);
Serial.print("Aktuelle Zeit: ");
Serial.println(timeString);
}
#Anpassungen
Vor dem Hochladen müssen die WLAN-Zugangsdaten angepasst werden:
const char* WLAN_SSID = "DEIN_WLAN_NAME";
const char* WLAN_PASSWORD = "DEIN_WLAN_PASSWORT";
#Zeitzone einstellen
Für verschiedene Zeitzonen können die Offset-Werte angepasst werden:
// Mitteleuropäische Zeit (MEZ, Winter)
const long GMT_OFFSET_SEC = 3600; // UTC+1
const int DAYLIGHT_OFFSET_SEC = 0; // Keine Sommerzeit
// Mitteleuropäische Sommerzeit (MESZ)
const long GMT_OFFSET_SEC = 3600; // UTC+1
const int DAYLIGHT_OFFSET_SEC = 3600; // +1 Stunde Sommerzeit
#Konsolenausgabe
Nach dem Start erscheint folgende Ausgabe im Seriellen Monitor (115200 Baud):
========================================
Lernboard - WLAN & NTP Beispiel
========================================
Verbinde mit WLAN 'MeinNetz'...
....
Verbunden!
IP-Adresse: 192.168.1.42
Synchronisiere Zeit mit pool.ntp.org...
...
Zeit erfolgreich synchronisiert!
Zeitausgabe alle 5 Sekunden:
----------------------------------------
Aktuelle Zeit: 27.12.2025 15:30:15
Aktuelle Zeit: 27.12.2025 15:30:20
Aktuelle Zeit: 27.12.2025 15:30:25
#Arduino IDE Einstellungen
| Einstellung | Wert |
|---|---|
| Board | ESP32C6 Dev Module |
| USB CDC On Boot | Enabled |
| Upload Speed | 921600 |
| Flash Size | 4MB |
#Hinweise
- Lokale Zeit: Im Gegensatz zur MicroPython-Version wird hier bereits die lokale Zeit (mit Zeitzone) ausgegeben.
- Auto-Reconnect: Das Programm versucht automatisch, die WLAN-Verbindung wiederherzustellen.
- Nicht-blockierend: Die
loop()verwendetmillis()stattdelay(), sodass andere Aufgaben parallel laufen können.
#Erweiterungsmöglichkeiten
- Automatische Sommer-/Winterzeit-Umschaltung
- Zeit auf einem Display anzeigen
- Zeitgesteuerte Aktionen (z.B. LEDs zu bestimmten Uhrzeiten)