Skip to main content

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() verwendet millis() statt delay(), 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)