Analoge Uhr mit Wemos D1 Mini

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 sol­len auf einem OLED ange­zeigt werden.

Benötigte Bauteile

Tra­ge unter Datei -> Ein­stel­lun­gen eine zusätz­li­che Board­ver­wal­ter-URL ein:

https://arduino.esp8266.com/stable/package_esp8266com_index.json

 

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:

https://github.com/olikraus/u8g2/wiki/u8g2reference

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 <ESP8266WiFi.h>
# include <NTP.h>
# include <WiFiUdp.h>
# include <NTP.h>
# include <U8g2lib.h>

/*
  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 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.
SALE