Inhalt
Das Wemos D1 Mini
Das Wemos D1 ist ein Microcontroller mit einem ESP8266 Chip.
Weitere Information
Das NTP-Protokoll
Das NTP (Network Time Protocol) ist ein Protokoll zur Synchronisierung von Uhren in Computersystemen. Im Internet existieren öffentlich zugängliche NTP-Server, die sich zur Zeitsynchronisation nutzen lassen.
Darstellung auf dem OLED
Zeit und Datum sollen auf einem OLED angezeigt werden.
Benötigte Bauteile
Trage unter Datei -> Einstellungen eine zusätzliche Boardverwalter-URL ein:
https://arduino.esp8266.com/stable/package_esp8266com_index.json
- Icon für den Boardverwalter anklicken oder Werkzeuge-> Board -> Boardverwalter
- nach esp8266 suchen
- Board installieren
Board auswählen
Wenn das Wemos D1 Mini nicht automatisch erkannt wurde, klicke auf „Wähle ein anderes Board und einen anderen Port“ und suche nach Wemos D1. Je nach Betriebssystem wird der USB-Port eine andere Bezeichnung haben.
Bibliotheken installieren
Informationen zur Bibliothek u8g2:
Der Schaltplan
Das Programm
Das Programm baut über DHCP eine Verbindung zum lokalen WLAN auf,
Du musst die Router-SSID und das Passwort anpassen.
Wenn die Verbindung erfolgreich hergestellt wurde, zeigt der Serielle Monitor die SSID des Routers und die IP-Adresse an.
// Bibliotheken einbinden
# include
# include
# include
# include
# include
/*
Typbezeichnung mit Bildschirmgröße in Pixeln
1 = page buffer mode
Hardware I2C
Name des OLEDs
Rotation R0 (keine)
*/
U8G2_SSD1306_128X64_NONAME_1_HW_I2C oled(U8G2_R0, U8X8_PIN_NONE);
// SSID des Routers und Passwort
char Router[] = "SSID_des_Routers";
char Passwort[] = "xxxxxxx";
// NTP starten
WiFiUDP wifiUdp;
NTP ntp(wifiUdp);
// Zeit bis zur nächsten Messung
static unsigned long GesicherteStartZeit = 0;
unsigned long Startzeit;
// 30 Sekunden Intervall, kann angepasst werden
int Intervall = 30000;
void setup()
{
Serial.begin(9600);
delay(500);
// WiFi starten DHCP
WiFi.begin(Router, Passwort);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
}
// SSID des Routers im Seriellen Monotor anzeigen
Serial.print("Verbunden mit ");
Serial.println(WiFi.SSID());
// IP anzeigen
Serial.print("IP: ");
Serial.println(WiFi.localIP());
/*
Zeitzone
CEST: Central European Summertime
Beginn europäische Sommerzeit letzter Sonntag im März 2 Uhr GMT + 2 Stunden
*/
ntp.ruleDST("CEST", Last, Sun, Mar, 2, 120);
// CET: Central European Time
// Beginn Normalzeit letzter Sonntag im Oktober 3 Uhr GMT + 1 Stunde
ntp.ruleSTD("CET", Last, Sun, Oct, 3, 60);
// ntp starten
ntp.begin();
// OLED starten
oled.begin();
// Schriftart
oled.setFont(u8g2_font_courB24_tf);
// Zeichenfarbe weiß
oled.setDrawColor(1);
// horizontale Schrift
oled.setFontDirection(0);
// Datum und Zeit beim Start anzeigen
ntp.update();
oled.clearDisplay();
oled.firstPage();
do
{
oled.setCursor(2, 15);
oled.setFont(u8g2_font_t0_22_te);
// Tag: führende 0 ergänzen
if (ntp.day() < 10) oled.print("0");
oled.print(ntp.day());
oled.print(".");
// Monat: führende 0 ergänzen
if (ntp.month() < 10) oled.print("0");
oled.print(ntp.month());
oled.print(".");
// Jahr
oled.print(ntp.year());
// horizontale Linie
oled.drawHLine(1, 22, oled.getDisplayWidth());
oled.setCursor(2, 63);
// Uhrzeit
// Stunden: führende 0 ergänzen
oled.setFont(u8g2_font_logisoso32_tf);
if (ntp.hours() < 10) oled.print("0");
oled.print(String(ntp.hours()) + ":");
// Minuten: führende 0 ergänzen
if (ntp.minutes() < 10) oled.print("0");
oled.print(String(ntp.minutes()));
}
while (oled.nextPage());
}
void loop()
{
// Startzeit setzen
Startzeit = millis();
// wenn das festgelegte Intervall erreicht ist
if (Startzeit - GesicherteStartZeit > Intervall)
{
// Zeit aktualisieren
ntp.update();
oled.clearDisplay();
// Startzeit zurücksetzen
GesicherteStartZeit = Startzeit;
// Datum und Zeit auf dem OLED anzeigen
oled.setCursor(3, 20);
oled.firstPage();
do
{
oled.setCursor(2, 15);
oled.setFont(u8g2_font_t0_22_te);
// Tag: führende 0 ergänzen
if (ntp.day() < 10) oled.print("0");
oled.print(ntp.day());
oled.print(".");
// Monat: führende 0 ergänzen
if (ntp.month() < 10) oled.print("0");
oled.print(ntp.month());
oled.print(".");
oled.print(ntp.year());
// horizontale Linie
oled.drawHLine(1, 22, oled.getDisplayWidth());
oled.setCursor(2, 63);
// Uhrzeit
// Stunden: führende 0 ergänzen
oled.setFont(u8g2_font_logisoso32_tf);
if (ntp.hours() < 10) oled.print("0");
oled.print(String(ntp.hours()) + ":");
// Minuten: führende 0 ergänzen
if (ntp.minutes() < 10) oled.print("0");
oled.print(String(ntp.minutes()));
}
while (oled.nextPage());
}
}
Funduino - Dein Onlineshop für Mikroelektronik
-
Dauerhaft bis zu 10% Rabatt für Schüler, Studenten und Lehrkräfte
-
Mehr als 3.500 Artikel sofort verfügbar!
-
Über 8 Jahre Erfahrung mit Arduino, 3D-Druck und co.