Wenn Sie ein tageszeitabhängiges IoT-Projekt erstellen, möchten Sie, dass es die richtige Zeit anzeigt, ohne dass manuelle Anpassungen erforderlich sind. Es scheint, als wäre dies mit dem ESP32 einfach zu bewerkstelligen, da es über ein integriertes WLAN verfügt und eine Verbindung zum Internet herstellen kann.

Es gibt zwar viele Online-Beispiele, die zeigen, wie man den ESP32 so konfiguriert, dass er sich mit dem Internet verbindet und die Uhrzeit mit einer Uhrzeit synchronisiert Server erfordern die meisten von Ihnen, dass Sie zweimal im Jahr manuell auf Sommerzeit umstellen, was für jede Elektronik des 21. Jahrhunderts ziemlich lächerlich erscheint Gerät.

Hier stellen wir Ihnen eine Lösung vor, die es dem ESP32 ermöglicht, das ganze Jahr über die korrekte Uhrzeit für jeden Ort der Welt anzuzeigen. Aber zuerst werfen wir einen Blick auf das Beispiel SimpleTime in der Arduino IDE und sehen, was es tut und wie wir es verbessern können.

Das SimpleTime-Beispiel

Wenn Sie die Arduino IDE mit dem ESP32 verwenden, werden Sie feststellen, dass ein Beispiel aufgerufen wird

instagram viewer
SimpleTime das sieht so aus:

Sie können auf dieses Beispiel zugreifen, indem Sie die Arduino IDE für die Verwendung eines ESP32-Boards konfigurieren, von der Werkzeug Menü, z. B. durch Auswahl von ESP32-Entwicklungsmodul. Sobald Sie dies getan haben, können Sie über die auf das SimpleTime-Beispiel zugreifen Werkzeug Menü unter Beispiele,ESP32,Zeit, und Einfache Zeit.

Man könnte erwarten, dass dieses offizielle Beispiel die beste Vorgehensweise demonstriert, aber es gibt ein großes Problem in diesem Beispiel. Um die Zeitzone und die Sommerzeit zu konfigurieren, müssen Sie die folgenden zwei Zeilen ändern:

const long gmtOffset_sec = 3600;
const int tageslichtOffset_sec = 3600;

Einstellen der Zeitzone mit gmtOffset_sec ist unpraktisch, da Sie den GMT-Offset für Ihren bestimmten Standort finden müssen. Sie können dies tun, indem Sie die konsultieren Greenwich Mean Time-Website. Glücklicherweise müssen Sie dies nur einmal tun. Der TageslichtOffset_Sek stellt jedoch ein größeres Problem dar, da Sie es zweimal im Jahr anpassen müssen. Dies kann erfordern, dass Sie Ihr Projekt zweimal im Jahr herunterfahren und an die Arduino IDE anschließen, was es für ein IoT-Projekt, das Sie einrichten und vergessen möchten, völlig ungeeignet macht.

Auf der Suche nach einem besseren Ansatz

Was wäre also ein besserer Weg, um die Zeitzone und die Sommerzeit zu konfigurieren? Um diese Frage zu beantworten, schauen Sie nicht weiter als wie Ihr Windows-PC mit der Situation umgeht:

Beachten Sie, dass wir, anstatt Zeitverschiebungen von GMT angeben zu müssen, Windows unsere Zeitzone und unseren Standort mitteilen – in unserem Fall Bergzeit (USA & Kanada)– und aktivieren Sie dann das Kontrollkästchen Stellen Sie die Uhr automatisch auf die Sommerzeit ein. Von diesem Zeitpunkt an erledigt Windows das ganze Jahr über automatisch für uns. Das ist die Art von Komfort, die wir von unserem ESP32 erwarten.

Verwandt: So passen Sie die Taskleistenuhr unter Windows an

Erstellen einer Standortdatenbank für den ESP32

Das Gleiche auf dem ESP32 zu tun, erfordert etwas Beinarbeit. wir haben mit a angefangen Blogeintrag darin wurde beschrieben, wie die Zeitzone mithilfe der Umgebungsvariable TZ eingerichtet wird. Für unseren Standort war es zufällig so MST7MDT, M3.2.0, M11.1.0, demzufolge Zeitzonentabelle. Dies löste zwar das Problem der manuellen Umstellung auf Sommerzeit, aber wir wollten Der Vorgang wird einfacher, ohne dass für jeden eine Reihe von Zahlen und Buchstaben nachgeschlagen werden muss Lage.

Wir haben die Daten von der Website in eine Datenbank konvertiert, die Sie direkt in Ihren Arduino-Skizzen verwenden können. Folgen dieser Link um direkt eine ZIP-Datei mit dem Arduino-Sketch herunterzuladen.

Die Datenbank selbst wird in der Datei gespeichert time_zone.h. Unter Verwendung der Datenbank sieht der Code für SimpleTime wie folgt aus:

Wir haben die Änderungen am SimpleTime-Beispiel gelb hervorgehoben. Diese Zeile ermöglicht es der Skizze, die Datenbank zu verwenden:

#include "time_zones.h"

Diese Zeile konfiguriert Ihren Standort:

const char* location = "Amerika/Denver";

Es gibt 461 mögliche Standorte. Sie können die verfügbaren Standorte finden, indem Sie einen Blick auf die werfen time_zone.h Datei oder indem Sie sich die Zeitzonenliste ansehen Diese Internetseite.

Schließlich weist die folgende Zeile den ESP32 an, die Zeit mit einem Internetserver unter Verwendung des Network Time Protocol (NTP) zu synchronisieren:

configTimeWithTz (getTzByLocation (Standort), ntpServer);

Der jeweilige Internet-Zeitserver kann mit der folgenden Zeile konfiguriert werden, obwohl die Standardeinstellung für Sie gut funktionieren sollte:

const char* ntpServer = "pool.ntp.org";

Sie sollten auch sicherstellen, dass Sie die Informationen für Ihren drahtlosen Zugangspunkt in den folgenden zwei Zeilen hinzufügen:

const char* ssid = "YOUR_SSID";
const char* password = "YOUR_PASS";

Ersetzen IHRE_SSID mit dem Namen Ihres drahtlosen Netzwerks und DEIN PASS mit dem Passwort, mit dem die Verbindung hergestellt wurde.

Verwandt: Möglichkeiten zur sicheren Konfiguration eines drahtlosen Routers als öffentlichen Zugangspunkt

Beenden

Sobald Sie die Konfigurationsschritte abgeschlossen haben, laden Sie die Skizze auf den ESP32 hoch und er verwendet das ganze Jahr über die richtige Zeit ohne Eingriff!

Während dieser Code Ihnen einen guten Ausgangspunkt bietet, gibt es benutzerfreundlichere Möglichkeiten, dasselbe zu erreichen. Beispielsweise möchten Sie dem Benutzer möglicherweise erlauben, alles von einer Webseite aus zu konfigurieren, anstatt dies zur Kompilierzeit tun zu lassen. Dies ist ein bisschen mehr Arbeit, da Sie die folgenden Dinge in Ihrem Arduino-Sketch tun müssten:

  1. Konfigurieren Sie den ESP32 als drahtlosen Zugangspunkt für die Erstkonfiguration
  2. Starten Sie einen Webserver, um dem Benutzer eine Konfigurationsseite anzuzeigen
  3. Erstellen Sie ein HTML-Formular, damit der Benutzer die Informationen zum drahtlosen Netzwerk eingeben und seinen Standort auswählen kann
  4. Erstellen Sie den Code, um die Auswahl des Benutzers zu verarbeiten, und speichern Sie ihn im nichtflüchtigen Speicher
  5. Beim Einschalten der Platine:
    • Lesen Sie die Konfiguration aus dem nichtflüchtigen Speicher
    • Stellen Sie eine Verbindung zum drahtlosen Netzwerk her und synchronisieren Sie die Uhrzeit

Ein Projekt, das diese Schritte demonstriert, ist das ESP32 Dali-Uhr. Es war dieses Projekt, das uns dazu veranlasste, einen besseren Weg zur Zeitsynchronisierung auf dem ESP32 zu finden.

Bildkredit: Marcio Teixeira/Flickr

Besuche die Quellcode für die ESP32 Dali Clock, um zu sehen, wie eine voll funktionsfähige Webkonfigurationsseite angezeigt wird. Die Konfigurationsseite zeigt ein Pulldown-Menü, mit dem der Benutzer seinen Standort und seine Zeitzone auswählen kann ermöglicht es dem Benutzer auch, die Zeit manuell mit einem Zeit- und Kalender-Widget für einen nicht verbundenen Benutzer einzustellen Alternative!

Standortbasierte Netzwerkzeitsynchronisierung auf dem ESP32

Sie haben jetzt alle Informationen, die Sie benötigen, um die Uhr Ihres ESP32 automatisch auf die richtige Zeit einzustellen und sie auch an die Sommerzeit anzupassen. Dies ist perfekt für IoT-Projekte, die Sie nicht manuell anpassen möchten.

7 interessante Projekte, die den ESP32 zur Generierung von Composite-Videos verwenden

Wenn Sie auf der Suche nach interessanten Projekten mit ESP32 sind, sind Sie hier genau richtig.

Lesen Sie weiter

TeilenTwitternEmail
Verwandte Themen
  • DIY
  • ESP32
  • Internet der Dinge
Über den Autor
Marco Teixeira (4 veröffentlichte Artikel)

Ich bin ein Maker mit besonderem Interesse an Open-Source-Software, Elektronik, 3D-Druck, Computergrafik und Retro-Computing.

Mehr von Marcio Teixeira

Abonniere unseren Newsletter

Abonnieren Sie unseren Newsletter für technische Tipps, Rezensionen, kostenlose E-Books und exklusive Angebote!

Klicken Sie hier, um sich anzumelden