Das siebte Türchen

Hoy está un Microcontrolador detrás de la pequeña puerta, con la que no solo puede leer varios sensores y actuadores de control, sino también establecer una conexión WiFi. Es el ESP8266 y tres de ellos.

Además del procesador con memoria flash de 4 MByte, el Breakout Board tiene un CH340 USB a convertidor serial para que pueda programar fácilmente el módulo. Se sacan la mayoría de los pines de E / S. También hay un regulador de voltaje que suministra el voltaje de suministro de 3.3 V para el ESP8266 desde el voltaje de suministro USB o el voltaje en la conexión Vin. Aquí hay una nota importante. Dado que el ESP8266 funciona con 3.3 V, ¡no se pueden aplicar voltajes superiores a 3.3 V a sus entradas!


Como muestra la imagen de portada, queremos uno de los controladores junto con una pantalla LCDcomo presentamos en el calendario de Adviento el 4 de diciembre para construir un reloj con visualización de hora y fecha. Lo especial de esto es que la hora proviene de un servidor de hora de alta precisión en Internet.

Primero se requiere un poco de trabajo de soldadura. El adaptador I2C debe soldarse a la pantalla. Recomiendo instalar el adaptador I2C en la parte inferior, ya que no será un estorbo si planea instalarlo en una carcasa.


El cableado es simplemente GND y Vcc de la pantalla que conectamos a G y VU del controlador. La línea de reloj SCL va a D1 y la línea de datos SDA a D2.

Ahora es el momento de programar con Arduino IDE. Si el soporte para placas con ESP8266 MCU aún no está instalado, tenemos que hacerlo ahora. En el Arduino IDE vamos a Preferences a través del menú File o simplemente con "Ctrl +;".

En el formulario, hacemos clic en el símbolo a la derecha del campo de entrada debajo del elemento "Additional board administrator URLs". Aquí ahora podemos ingresar la URL del ESP8266 board manager:

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


Una vez guardados los ajustes preestablecidos, llamamos al board manager a través del menú Tools-> Board: -> Board manager. Ingresamos “esp8266” como término de búsqueda. Obtenemos la siguiente entrada, que instalamos.


Ahora podemos seleccionar un board en el menú Tools-> Board: -> ESP8266 Boards menu. Usamos NodeMCU 1.0….


Ya está todo listo para instalar el boceto del reloj.

#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.","Dic."}; //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);
}

Descarga el boceto.

Casi todo lo que necesitamos está en el paquete ESP8266. Solo falta la biblioteca para la pantalla LCD. Se puede instalar a través de la library management en el Arduino IDE.

Ingresamos “I2C LCD” como término de búsqueda y encontramos la biblioteca deseada un poco más abajo en la lista.


Antes de compilar el boceto, debemos ingresar los datos de acceso para la WLAN en lugar de los asteriscos.

No se sorprenda si recibe la siguiente advertencia durante la compilación.

WARNING: Library LiquidCrystal_I2C claims to run on avr architecture(s) and may be incompatible with your current board running on esp8266 architecture(s).

Esta advertencia proviene del hecho de que se realizó una entrada incorrecta en las especificaciones de la biblioteca. La biblioteca funciona bien con ESP8266 MCS.

Lo especial de este reloj es que se sincroniza regularmente desde Internet. Además, cambia automáticamente entre el horario de verano y el de invierno.

Diviértase con la réplica.

MuestraPrecipitador electrostático - 8266Specials

2 comentarios

Kurt Hennig

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

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

Deja un comentario

Todos los comentarios son moderados antes de ser publicados

Artículos de blog

  1. Ahora instalamos el esp32 a través de la administración.
  2. Lüftersteuerung Raspberry Pi
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1
  4. ESP32 - das Multitalent
  5. Transporte Aéreo - programación de ESP mediante redes locales inalámbricas