Skip to content

Technik Blog

Programmieren | Arduino | ESP32 | MicroPython | Python | Raspberry Pi | Raspberry Pi Pico

Menu
  • Smarthome
  • Arduino
  • ESP32 & Co.
  • Raspberry Pi & Pico
  • Solo Mining
  • Über mich
  • Deutsch
  • English
Menu

Arduino UNO R4: LED Matrix Uhr mit NTP-Zeitsynchronisation

Posted on 9. Februar 202410. März 2024 by Stefan Draeger

In diesem Beitrag möchte ich dir zeigen, wie du am neuen Arduino UNO R4 WiFi eine Laufschrift auf der LED Matrix erzeugst. Als Beispiel möchte ich hier eine Uhrzeit anzeigen, welche ich von einem NTP Server empfange.

Arduino UNO R4: LED Matrix Uhr mit NTP-Zeitsynchronisation
Arduino UNO R4: LED Matrix Uhr mit NTP-Zeitsynchronisation

Mit diesem Beitrag möchte ich an den bereits veröffentlichten Beitrag Leicht gemacht: Laufschrift auf dem Arduino UNO R4 programmieren anknüpfen. Zu diesem Beitrag habe ich einen Kommentar erhalten, in welchem darauf hingewiesen wurde, dass es eine sehr einfache Lösung dafür gibt.

Inhaltsverzeichnis

  • Benötigte Ressourcen für dieses Projekt
  • Programmieren einer Laufschrift in der Arduino IDE am Arduino UNO R4 WiFi
    • Beispiel – auslesen eines Zeitstempels vom NTP-Server und anzeigen auf der LED Matrix
      • Schritt 1 – Aufbau der WiFi Verbindung zum Heimnetzwerk
      • Schritt 2 – Auslesen eines Zeitstempels von einem NTP Server
      • Schritt 3 – Ausgeben der Zeit auf der LED Matrix

Benötigte Ressourcen für dieses Projekt

Wenn du dieses kleine Projekt nachbauen möchtest, dann benötigst du lediglich einen Arduino UNO R4 WiFi inkl. Datenkabel.

Arduino UNO R4 WiFi
Arduino UNO R4 WiFi
Arduino UNO R4 WiFi
Arduino UNO R4 WiFi

Diesen Mikrocontroller bekommst du, nachdem nun etwas mehr Zeit seit dem Release vergangen ist, recht günstig auf diversen Plattformen.

LinkPreisVersandkosten
https://www.reichelt.de/26,50 €5,95 €
https://botland.de/27,90 €4,95 €
https://store.arduino.cc/25 €10 €
https://www.ebay.de/*ab 23 €–

Hinweis von mir: Die mit einem Sternchen (*) markierten Links sind Affiliate-Links. Wenn du über diese Links einkaufst, erhalte ich eine kleine Provision, die dazu beiträgt, diesen Blog zu unterstützen. Der Preis für dich bleibt dabei unverändert. Vielen Dank für deine Unterstützung!

Programmieren einer Laufschrift in der Arduino IDE am Arduino UNO R4 WiFi

Kommen wir zunächst zu einem einfachen Beispiel und geben einen Text auf der LED Matrix des Arduino UNO R4 WiFi aus.

Für das erzeugen eines Text als Scrolltext benötigen wir die Bibliothek Arduino Graphics.

Die Bibliothek findest du mit dem Suchbegriff „Arduino Graphics“ im Bibliotheksverwalter.

In meinem Fall liegt derzeit die Version 1.1.0 vor.

//einbinden der Bibliotheken zum
//ansteuern der LED Matrix auf dem
//Arduino UNO R4 WiFi
#include "ArduinoGraphics.h"
#include "Arduino_LED_Matrix.h"

//erzeugen eines ArduinoLEDMatrix Objektes
ArduinoLEDMatrix matrix;

void setup() {
  //beginn der kommunikation mit der LED Matrix
  matrix.begin();
}

void loop() {
  //beginn des zeichnens
  matrix.beginDraw();
  //alle LEDs deaktivieren
  matrix.stroke(0xFFFFFFFF);
  //Geschwindigkeit des Scrolltextes setzen
  //je niedriger der Wert desto schneller läuft der Text
  matrix.textScrollSpeed(50);

  //der Text welcher ausgegeben werden soll
  const char text[] = "    Hallo Welt!    ";
  //Schriftgröße setzen, 
  //verfügbare Werte sind:
  // - Font_4x6
  // - Font_5x7
  matrix.textFont(Font_4x6);
  //koordinate für den Text
  //je nach Schriftgröße kann man damit den Text
  //in der Matrix zentrieren
  matrix.beginText(0, 1, 0xFFFFFF);
  //Ausgeben des Textes
  matrix.println(text);
  //definieren von wo gescrollt werden soll
  matrix.endText(SCROLL_LEFT);
  //beenden des zeichnens
  matrix.endDraw();
}
Programm – einfacher Text als Laufschrift auf der LED Matrix des Arduino UNO R4 WiFiHerunterladen

Beispiel – auslesen eines Zeitstempels vom NTP-Server und anzeigen auf der LED Matrix

Der Arduino UNO R4 WiFi verfügt, wie der Name es erahnen lässt, über ein zusätzliches WiFi Modul. In diesem Fall ist es ein ESP32-S3-MINI. Über dieses WiFi Modul können wir jetzt mit dem Internet kommunizieren und so auch einen Zeitstempel (Datum & Uhrzeit) von einem NTP Server lesen.

Ein NTP Server ist ein Dienst, über welchen wir eine sehr genaue Zeit erhalten können. Jedoch gibt es hier auch immer ein delay beim Lesen, jedoch wird dieses über das Protokoll sehr minimiert, sodass die Zeit immer sehr genau ankommt.

Schritt 1 – Aufbau der WiFi Verbindung zum Heimnetzwerk

Zunächst müssen wir eine Verbindung zum lokalen Heimnetzwerk aufbauen. Ich habe mir hier das Beispiel ConnectwithWPA.ino vom GitHub Repository arduino / ArduinoCore-renesas gezogen und auf das Minimum gekürzt.

#include <WiFiS3.h>

char ssid[] = "";
char pass[] = "";
int status = WL_IDLE_STATUS;

void setup() {
  Serial.begin(9600);

  Serial.println("Verbindungsaufbau zu: " + String(ssid));
  int connectionCounter = 0;
  while (status != WL_CONNECTED) {
    Serial.print(".");
    status = WiFi.begin(ssid, pass);
    delay(250);
    if ((connectionCounter % 10) == 0) {
      Serial.println();
    }
    connectionCounter++;
  }

  IPAddress ip = WiFi.localIP();
  Serial.print("verbunden mit der IP Adresse: " + ip.toString());
}

void loop() {
}

Wenn der Mikrocontroller startet, dann wird zunächst die Verbindung aufgebaut. Während des Aufbaus wird ein Punkt geschrieben, somit kann man nachvollziehen wie oft nun schon ein Aufbau probiert wurde.

Bei Erfolg wird dann die IP-Adresse ausgegeben.

Schritt 2 – Auslesen eines Zeitstempels von einem NTP Server

Damit wir mit einem NTP Server kommunizieren können und somit den Zeitstempel erhalten, müssen wir eine zusätzliche Bibliothek installieren

Ich habe sehr gute Erfahrung mit der Bibliothek NTPClient von Fabrice Weinberg gesammelt und dir auch bereits am Beispiel ESP8266 – NTP Protokoll für das lesen eines genauen Zeitstempels gezeigt wie man die Daten auslesen und im seriellen Monitor anzeigen lassen kann.

Wenn du das kleine Beispiel ausführst, dann kann es besonders am Anfang vorkommen, dass kein vollständiger / gültiger Zeitstempel empfangen wird (1). Hier hilft es eine kleine Abfrage einzubauen, ob der Wert größer als 1707219755 ist. (Wir können ja schließlich nicht in die Zeit zurückreisen.)

#include <WiFiS3.h>
#include <NTPClient.h>
#include <WiFiUdp.h>

char ssid[] = "";
char pass[] = "";
int status = WL_IDLE_STATUS;  // the WiFi radio's status

WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org");

//Wochentage, im englischen beginnt die Woche mit dem Sonntag
char* wochentage[7] = { "So", "Mo", "Di", "Mi", "Do", "Fr", "Sa" };

void setup() {
  Serial.begin(9600);

  Serial.println("Verbindungsaufbau zu: " + String(ssid));
  int connectionCounter = 0;
  while (status != WL_CONNECTED) {
    Serial.print(".");
    status = WiFi.begin(ssid, pass);
    delay(250);
    if ((connectionCounter % 10) == 0) {
      Serial.println();
    }
    connectionCounter++;
  }

  IPAddress ip = WiFi.localIP();
  Serial.println("verbunden mit der IP Adresse: " + ip.toString());

  timeClient.begin();
  //Offset in Sekunden zur GMT +/- 0 Zeitzone
  //Für Deutschland muss man 1h = 3600 Sekunden nehmen,
  //je nach Sommer- /Winterzeit muss jedoch diese
  //Zeit wieder abgezogen werden.
  timeClient.setTimeOffset(3600);
}

void loop() {
  timeClient.update();

  //Zeitstempel auf der Sekunde genau
  //(Nicht zuverwechseln mit dem UNIX Timestamp welcher auf die Millisekunde genau ist.)
  unsigned long epochTime = timeClient.getEpochTime();
  //Ein gültiger & aktueller Zeitstempel ist größer als 1707219755
  if (epochTime < 1707219755) {
    delay(25);
    return;
  }
  
  Serial.print("Epoch Time: ");
  Serial.println(epochTime);

  //Ausgabe des formatierten Zeitstempels
  String formattedTime = timeClient.getFormattedTime();
  Serial.print("formatierter Zeitstempel: ");
  Serial.println(formattedTime);

  //einzelne Werte der Uhrzeit lesen
  int aktuellerTag = timeClient.getDay();
  int aktuelleStunde = timeClient.getHours();
  int aktuelleMinute = timeClient.getMinutes();
  int aktuelleSekunde = timeClient.getSeconds();
  char timestamp[20];
  sprintf(timestamp, "Heute ist %s, %2d:%2d:%2d", wochentage[aktuellerTag], aktuelleStunde, aktuelleMinute, aktuelleSekunde);
  Serial.println(timestamp);
  delay(500);
}

Schritt 3 – Ausgeben der Zeit auf der LED Matrix

Zum Schluss wollen wir nun die Zeit auf der LED Matrix ausgeben. Dazu nehmen wir uns zusätzlich das kleine Codebeispiel vom Anfang und binden dieses ein.

#include <WiFiS3.h>
#include "ArduinoGraphics.h"
#include "Arduino_LED_Matrix.h"
#include <NTPClient.h>
#include <WiFiUdp.h>

char ssid[] = "";
char pass[] = "";
int status = WL_IDLE_STATUS;  // the WiFi radio's status

WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org");

//erzeugen eines ArduinoLEDMatrix Objektes
ArduinoLEDMatrix matrix;

//Wochentage, im englischen beginnt die Woche mit dem Sonntag
char* wochentage[7] = { "So", "Mo", "Di", "Mi", "Do", "Fr", "Sa" };

void setup() {
  Serial.begin(9600);

  Serial.println("Verbindungsaufbau zu: " + String(ssid));
  int connectionCounter = 0;
  while (status != WL_CONNECTED) {
    Serial.print(".");
    status = WiFi.begin(ssid, pass);
    delay(250);
    if ((connectionCounter % 10) == 0) {
      Serial.println();
    }
    connectionCounter++;
  }

  IPAddress ip = WiFi.localIP();
  Serial.println("verbunden mit der IP Adresse: " + ip.toString());

  timeClient.begin();
  //Offset in Sekunden zur GMT +/- 0 Zeitzone
  //Für Deutschland muss man 1h = 3600 Sekunden nehmen,
  //je nach Sommer- /Winterzeit muss jedoch diese
  //Zeit wieder abgezogen werden.
  timeClient.setTimeOffset(3600);

  matrix.begin();
}

void loop() {
  timeClient.update();
  //Zeitstempel auf der Sekunde genau
  //(Nicht zuverwechseln mit dem UNIX Timestamp welcher auf die Millisekunde genau ist.)
  unsigned long epochTime = timeClient.getEpochTime();
  //Ein gültiger & aktueller Zeitstempel ist größer als 1707219755
  while (epochTime < 1707219755) {
    epochTime = timeClient.getEpochTime();
    delay(25);
  }
  
  //Wochentag auslesen
  int aktuellerTag = timeClient.getDay();
  //auslesen der Stunde
  int aktuelleStunde = timeClient.getHours();
  //auslesen der Minuten
  int aktuelleMinute = timeClient.getMinutes();
  //Aufbau der formatierten Ausgabe auf der LED Matrix
  //Es wurden die Sekunden entfernt.
  char timestamp[19];
  snprintf(timestamp, 20, "%s, %2d:%2d   ", wochentage[aktuellerTag], aktuelleStunde, aktuelleMinute);
  
  matrix.beginDraw();
  matrix.stroke(0xFFFFFFFF);
  matrix.textScrollSpeed(75);
  matrix.textFont(Font_5x7);
  matrix.beginText(0, 1, 0xFFFFFF);
  matrix.println(timestamp);
  matrix.endText(SCROLL_LEFT);
  matrix.endDraw();

  delay(500);
}

1 thought on “Arduino UNO R4: LED Matrix Uhr mit NTP-Zeitsynchronisation”

  1. Pingback: Arduino Programmierung: Ausgabe formatierter Strings / Zeichenketten - Technik Blog

Schreibe einen Kommentar Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Fragen oder Feedback?

Du hast eine Idee, brauchst Hilfe oder möchtest Feedback loswerden?
Support-Ticket erstellen

Newsletter abonnieren

Bleib auf dem Laufenden: Erhalte regelmäßig Updates zu neuen Projekten, Tutorials und Tipps rund um Arduino, ESP32 und mehr – direkt in dein Postfach.

Jetzt Newsletter abonnieren

Unterstütze meinen Blog

Wenn dir meine Inhalte gefallen, freue ich mich über deine Unterstützung auf Tipeee.
So hilfst du mit, den Blog am Leben zu halten und neue Beiträge zu ermöglichen.

draeger-it.blog auf Tipeee unterstützen

Vielen Dank für deinen Support!
– Stefan Draeger

Kategorien

Tools

  • Unix-Zeitstempel-Rechner
  • ASCII Tabelle
  • Spannung, Strom, Widerstand und Leistung berechnen
  • Widerstandsrechner
  • 8×8 LED Matrix Tool
  • 8×16 LED Matrix Modul von Keyestudio
  • 16×16 LED Matrix – Generator

Links

Blogverzeichnis Bloggerei.de TopBlogs.de das Original - Blogverzeichnis | Blog Top Liste Blogverzeichnis trusted-blogs.com

Stefan Draeger
Königsberger Str. 13
38364 Schöningen

Tel.: 01778501273
E-Mail: info@draeger-it.blog

Folge mir auf

  • Impressum
  • Datenschutzerklärung
  • Disclaimer
  • Cookie-Richtlinie (EU)
©2025 Technik Blog | Built using WordPress and Responsive Blogily theme by Superb
Cookie-Zustimmung verwalten
Wir verwenden Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wir tun dies, um das Surferlebnis zu verbessern und um personalisierte Werbung anzuzeigen. Wenn Sie diesen Technologien zustimmen, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn Sie Ihre Zustimmung nicht erteilen oder zurückziehen, können bestimmte Funktionen beeinträchtigt werden.
Funktional Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt. Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
Optionen verwalten Dienste verwalten Verwalten von {vendor_count}-Lieferanten Lese mehr über diese Zwecke
Einstellungen anzeigen
{title} {title} {title}