Aujourd'hui est un Microcontrôleur derrière la petite porte, avec laquelle vous pouvez non seulement lire divers capteurs et actionneurs de commande, mais également établir une connexion WiFi. C'est l'ESP8266 et trois d'entre eux.
Le Breakout Board possède, outre le processeur avec mémoire flash de 4 Mo, un convertisseur USB-série CH340, ce qui permet de programmer facilement le module. La plupart des broches d'E/S sont sorties. Il y a également un régulateur de tension qui fournit la tension d'alimentation de 3,3 V pour le ESP8266 à partir de la tension d'alimentation USB ou de la tension au niveau du connecteur Vin. Voici une note importante. Comme l'ESP8266 fonctionne avec 3,3 V, aucune tension supérieure à 3,3 V ne doit être appliquée à ses entrées !
Comme le montre l'image de couverture, nous voulons l'un des contrôleurs avec un affichage LCD comme dans le calendrier de l'Avent le 4 décembre. a été introduit pour construire une horloge avec un affichage de l'heure et de la date. La particularité est que l'heure provient d'un serveur de temps très précis sur Internet.
Au début, un peu de travail de soudure est nécessaire. L'adaptateur I2C doit être soudé à l'écran. Je recommande de monter l'adaptateur I2C sur la face inférieure comme indiqué ci-dessous. Vous pouvez ensuite le placer dans un boîtier.
Le câblage est simplement GND et Vcc de l'écran est connecté à G et VU du contrôleur. La ligne d'horloge SCL va à D1 et la ligne de données SDA à D2.
Il est maintenant temps de commencer à programmer avec l'IDE Arduino. Si le support des cartes avec l'unité centrale de commande ESP8266 n'est pas encore installé, nous devons le faire maintenant. Dans l'EDI Arduino, nous allons dans les Préférences via le menu Fichier ou nous appuyons simplement sur "Ctrl+ ;".
Dans le formulaire, nous cliquons sur le symbole à droite du champ de saisie sous le point "URLs supplémentaires de l'administrateur du forum". Ici, nous pouvons maintenant entrer l'URL de l'administrateur du forum ESP8266:
http://arduino.esp8266.com/stable/package_esp8266com_index.json
Après avoir sauvegardé les préréglages, nous appelons le gestionnaire du conseil d'administration via le menu Outils->Conseil d'administration:->Gestionnaire du conseil d'administration. Comme terme de recherche, nous entrons "esp8266". Nous obtenons l'entrée suivante, que nous installons.
Maintenant, nous pouvons sélectionner une carte dans le menu Outils-> Carte: -> Cartes ESP8266. Nous utilisons NodeMCU 1.0….
Tout est maintenant prêt pour installer le croquis pour l'horloge.
#include <ESP8266WiFi.h> //WLAN Unterstützung
#include <TZ.h> //Zeitzonen Konstanten //Bibliothek für das LCD Display
#include <LiquidCrystal_I2C.h> //SSID und PSK vom lokalen WLAN
#define STASSID "****************"
#define STAPSK "****************" //Zeitzone mit Sommer/Winterzeit Information
#define MYTZ TZ_Europe_Berlin // LCD Adresse = 0x27, Anzahl Zeichen 16 Anzahl Zeilen 2
LiquidCrystal_I2C lcd(0x27,16,2); //Definition der deutschen Wochentags und Monatsnamen als Abkürzung
char weekdays[7][4] = {"Son","Mon","Die","Mit","Don","Fre","Sam"};
//März wird wegen des Umlauts zuerst mit Marz initialisier
//und im Setup auf März geändert char months[12][6] = {"Jan.","Feb.","Marz","Apr.","Mai","Juni","Juli","Aug.","Sep.", "Okt.","Nov.","Dez."};Oct.","Nov.","Déc."}; //Anzeige der aktuellen Zeit am Display
void showTime() {
time_t now; //aktuelle Zeit
struct tm * s_time; //Zeitstruktur aufgesplittet in Jahr, Monat, Tag, Stunden, Minuten und Sekunden
char line_buffer[20]; //Buffer für Anzeigenzeile
now = time(nullptr); //aktuelle Zeit lesen
s_time = localtime(&now); //für die lokale Zeit in die Zeitstruktur umwandeln
//Zeilenbuffer mit Datum füllen
sprintf(line_buffer,"%s %i.%s %i ",weekdays[s_time->tm_wday],s_time->tm_mday,months[s_time->tm_mon],s_time->tm_year+1900);
//Datum auf die serielle Schnittstelle ausgeben
Serial.println(line_buffer);
//Datum am Display in Zeile 1 anzeigen
lcd.setCursor(0,0);
lcd.print(line_buffer);
//Zeilenbuffer mit Uhrzeit füllen
strftime(line_buffer,16,"%H:%M:%S Uhr",s_time);
//Uhrzeit auf die serielle Schnittstelle ausgeben
Serial.println(line_buffer);
//Uhrzeit am Display in Zeile 2 anzeigen
lcd.setCursor(0,1);
lcd.print(line_buffer);
} //Setup Funktion
void setup() {
Serial.begin(115200); //Serielle Schnittstelle initialisieren
months[2][1]=0xE1; //Monat März korrigieren
//Display initialisieren und Beleuchtung ein
lcd.init();
lcd.backlight();
//Interne Uhr konfigurieren
configTime(MYTZ, "pool.ntp.org");
//WLAN initialisieren und mit dem WLAN verbinden
WiFi.persistent(false);
WiFi.mode(WIFI_STA);
WiFi.begin(STASSID, STAPSK);
} //Hauptschleife
void loop() {
//Zeit anzeigen
showTime();
//1 Sekunde warten
delay(1000);
}
Celui-là Téléchargez le croquis.
Presque tout ce dont nous avons besoin est inclus dans le paquet ESP8266. Il ne manque que la bibliothèque pour l'écran LCD. Elle peut être installée via la gestion de la bibliothèque dans l'EDI Arduino.
Nous entrons "I2C LCD" comme terme de recherche et trouvons, un peu plus loin dans la liste, la bibliothèque que nous voulons.
Avant d'établir le croquis, nous devons saisir les données d'accès au WLAN au lieu des astérisques.
Ne soyez pas surpris si l'avertissement suivant s'affiche pendant la compilation.
AVERTISSEMENT : La bibliothèque LiquidCrystal_I2C prétend fonctionner sur une ou plusieurs architecture(s) avr et peut être incompatible avec votre carte actuelle fonctionnant sur une ou plusieurs architecture(s) esp8266.
Cet avertissement est dû à une entrée incorrecte dans les spécifications de la bibliothèque. La bibliothèque fonctionne correctement avec les MCS ESP8266.
La particularité de cette horloge est qu'elle est régulièrement synchronisée à partir d'Internet. Elle passe aussi automatiquement de l'heure d'été à l'heure d'hiver.
Amusez-vous à la reconstruire.
2 commentaires
Kurt Hennig
Hallo,
Ich habe den Code jetzt an drei verschiedenen ESP8266 (V3 von AZ, Wemos D1 und ESP-07 ausprobiert, funktioniert alles wunderbar. Beim Wemos und ESP-07 SDA Pin D2=GPIO4 und SCL Pin D1=GPIO5 benutzen. Das mit dem lcd.init stimmt bei der neueren libary, bei älteren oder bei parallel Anschluss muss es lcd.begin heißen.
Kurt
Andreas Dürmuth
Hallo,
leider hat sich ein Fehler bei der Initialisierung eingeschlichen. Bei mir funktionierte leider der originale Sketsch nicht. Es kam eine Fehlermeldung ‘class LiquidCrystal_I2C’ has no member named ‘init’. Der Fehler steckt bei mir in Zeile 53. Ich habe:
lcd.init(); abgeändert zu:
lcd.begin();
Nun läuft alles.
Viel Spaß allen anderen “Bastlern”
Gruß, Andreas