Horloge avec grand écran - Partie 2

Dans la première partie du blog, j'ai reconstruit et décrit le projet de notre client Hans-Ulrich Küster avec son affichage grand format de l'époque. Pour obtenir le plus grand affichage possible, il a superposé deux LED MAX7219 8x32 4 en 1 à matrice de points. Un horloge en temps réel RTC DS3231 I2C a servi d'horloge.

Dans cette partie, je voudrais montrer comment j'ai remplacé le micro contrôleur ATMEGA 328P par le micro contrôleur compatible WLAN d'Espressif. Pour ce faire, j'ai laissé le sketch en grande partie inchangé, mais les deux interfaces SPI et I2C sont sur des broches différentes de celles de la carte micro contrôleur avec ATMEGA. J'ai donc dû adapter légèrement le circuit et le croquis.

Matériel utilisé

1

MODULE NODEMCU LUA AMICA V2 ESP8266 ESP-12F WIFI Développement du réseau de développement avec CP2102

ou alors

ESP32 Module Nodemcu Module WLAN WiFi Board de développement avec CP2102

2

Max7219 8x32 4 en 1 module d'affichage de la matrice de points de point 1

1

Horloge en temps réel RTC DS3231 I2C


Breadboard et Jumper Wire Cable Plug-in Bridges pour Breadboard

Avec l'ESP8266, j'ai été confronté pendant plusieurs jours à un problème apparemment insoluble, car l'interface SPI présentée dans le schéma de brochage avec MOSI vers SD1, CS vers CMD et SCLK vers CLK ne fonctionnait tout simplement pas. Nous en reparlerons plus tard.

ESP32

C'était encore plus rapide avec l'ESP32. Voici la répartition des broches pour l'interface SPI :

 #define clk_pin 18// ou sck
 #define data_pin 23 // ou mosi
 #define cs_pin 2 // ou ss

Et les connexions pour le RTC sur l'interface I2C :

// SDA à D21
// SCL à D22

Grâce à des tentatives précédentes, je savais que l'ESP32 ne connaît pas la variable LED_BUILTIN, j'ai donc ajouté la ligne après le message d'erreur correspondant au début du sketch.

 int LED_BUILTIN = 2;
L'horloge en temps réel (alimentée par la batterie) connaissait encore l'heure des tentatives précédentes, j'ai donc téléchargé le sketch en même temps. Ce n'est que pour la synchronisation avec l'heure du PC que la variable doit être brièvement réglée sur syncOnFirstStart = true.
 démarrage synconfirst = faux; // Synchroniser true avec PC, sinon false

Construction avec ESP32

Eureka. C'était rapide.

Voici le sketch à télécharger pour l'ESP32

ESP8266

Et maintenant ? Vous êtes encore bloqué sur le problème de l'ESP8266 ? Ou bien commencer par télécharger l'heure directement depuis un serveur NTP sur Internet ?

J'ai opté pour la solution rapide avec un exemple de sketch de la bibliothèque TimeLib.h. Avec le sketch d'exemple TimeNTP_ESP8266WiFi.ino, il m'a suffi d'insérer mon SSID WLAN et mon mot de passe pour que l'heure actuelle s'affiche dans le moniteur série.

Goûter

L'autre problème ne s'était toujours pas résolu. Même pour télécharger le sketch, j'ai dû déconnecter le connecteur CS au CMD, sinon un message d'erreur s'affichait lors de l'établissement de la connexion. J'ai donc fait une recherche sur Internet concernant l'interface SPI de l'ESP8266. À ma grande surprise, j'ai vu une configuration de test avec le convertisseur analogique-numérique MCP3008, que je connaissais bien grâce au Raspberry Pi. Cependant, il était connecté aux broches qui avaient un H devant les abréviations connues dans le schéma de brochage, c'est-à-dire HSCLK=D5=GPIO14, HMISO=D6=GPIO12, HMOSI=D7=GPIO13 et HCS=D8=GPIO15. Donc sans plus attendre, DIN, CS et CLK de l'écran LED matriciel ont été connectés là, le sketch a été adapté, et voilà : ça a marché.

ESP8266 PINOUT

Construction avec ESP8266

Voici les modifications apportées au croquis de M. Küster :

 #define cs_pin 15
 #define clock_pin 14
 #define mosi_pin 13
 #define miso_pin 12// pas nécessaire sur l'affichage
 
 // SCL à D1 = GPIO5
 // SDA à D2 = GPIO4

Et voici le croquis complet à télécharger.

Synchronisation avec le serveur NTP

L'idée d'utiliser le micro-contrôleur WLAN m'est venue parce que je pensais que le fait de télécharger deux fois le sketch pour synchroniser l'horloge en temps réel avec l'heure du système de l'ordinateur, une fois avec bool syncOnFirstStart = true ; une fois avec bool syncOnFirstStart = false ; avait besoin d'être amélioré et même l'horloge en temps réel DS3231, bien meilleure, n'affiche plus l'heure exacte après plusieurs semaines. J'ai donc voulu combiner le croquis de M. Küster avec le grand écran avec le croquis d'exemple pour l'heure NTP.

Essentiellement, le sketch pour le temps Internet est seulement "purgé" de la sortie dans le moniteur série et ensuite inséré dans le sketch de M. Küster. Et ensuite, bien sûr, la source de la synchronisation doit être modifiée. Ceci est fait à la ligne 159 :

 Rtc.régler(Datéme(uint16_t(vous()), Uint8_t(Montroy()), Uint8_t(journée()), Uint8_t(heure()), Uint8_t(minute()), Uint8_t(seconde())));
 
 // vieux: RTC.AdJust (DateTime (F (__ date__), F (__ temps__)));

Voici le téléchargement du sketch pour l'ESP8266 avec synchronisation de l'heure à partir du serveur NTP. Veuillez noter que vous devez entrer vos "informations d'identification WLAN", c'est-à-dire le SSID (nom) et le mot de passe, aux lignes 35 et 36. Et le passage de l'heure d'été à l'heure d'hiver se fait en commentant les lignes 40 et 41 respectivement.

Amusez-vous bien à le mettre en place. Si vous disposez d'une connexion Internet stable et d'une bonne réception Wi-Fi dans votre chambre, vous pouvez laisser de côté le RTC et synchroniser l'heure plus fréquemment avec le serveur NTP.

EtalagesEsp-32Esp-8266Projets pour avancéMaison intelligente

5 commentaires

Ruediger Ebert

Ruediger Ebert

Da mir die Anzeige zu hell war, habe ich ein Potentiometer zur Helligkeitsregelung angeschlossen.
Wer dies auch realisieren möchte, nachfolgende eine kurze Anleitung:

Potentiometer Anschluss zwischen 3.3V und 0V. Abgriff an Analog-Input des ESP8266 anschliessen.
Wert des Potis: 10K

Im Definitionsteil des Sketches folgende Zeilen hinzufügen:
const int analogInPin = A0; // ESP8266 Analog Pin ADC0 = A0
int brightnessPotValue = 0;

Zum Loop folgende Zeilen hinzufügen:
brightnessPotValue = analogRead(analogInPin);
int c = map(brightnessPotValue, 0, 1023, 0, 15);
uhr.control(MD_MAX72XX::INTENSITY, c);

Rüdiger

Ruediger Ebert

Ruediger Ebert

@ Bernd Albrecht: Danke :-)

Bernd Albrecht

Bernd Albrecht

@ Ruediger Ebert: Grundsätzlich ist die Internetzeit in Universal Time Coordinated (UTC) angegeben. Deshalb ist bei dem Sketch „Uhr_2_X_Anzeige_ESP8266_WLAN_NTP.ino“
in den Zeilen 38-41 die Korrektur für die jeweilige Zeitzone angegeben, zurzeit 2 Stunden für MESZ. Der Wert wird in der Variablen timeZone gespeichert. Die Korrektur wird in Zeile 98 addiert.
Schnellste Möglichkeit für die Anzeige in UTC:
Zeile 40 auskommentieren und eine weitere Zeile einfügen:
//const int timeZone = 2; // Central European Summer Time (MESZ)
const int timeZone = 0; // Universal Time Coordinated (UTC)

Nils Sappok

Nils Sappok

Vielen Dank für diesen – wie immer – exzellenten Beitrag!
Da möchte ich es gleich mal nach bauen….
Wie wäre es noch mit einer WS2812B 5050 RGB LED Matrix? Ich habe noch die 8×8 von Euch und zusätzlich gerade eines der flexiblen 8×32 Panels erhalten. Mit dem Uno läuft es problemlos, aber mit dem ESP32 NodeMCU habe ich es noch nicht geschafft. Obwohl es Beispiele im Netz ohne gibt, muss ich wohl einen Pegelwandler einsetzen.
Bleibt gesund! :)

Ruediger Ebert

Ruediger Ebert

Für ein Projekt benötige ich die Anzeige der Uhrzeit in UTC. Dies dies mit dem vorgestellten Projekt möglich?

Rüdiger

Laisser un commentaire

Tous les commentaires sont modérés avant d'être publiés

Messages de blogs recommandés

  1. Installez maintenant ESP32 via l'administrateur de la carte
  2. Lüftersteuerung Raspberry Pi
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1
  4. ESP32 - das Multitalent
  5. OTA-Over the Air-ESP Programmation par WiFi