Un reloj ligeramente diferente con anillo LED RGB y D1 Mini

Hoy vamos con él RGB-Led el anillo de nuevo en la oferta de AZ-Delivery es y uno D1 mini una hora confían sobre NTP es sincronizado. Los indicadores son simbolizados por colores diferentes. Indicador de segundos = rojo, el indicador de minutos = verde y horario = azul. Aquél se hace el anuncio de 12 Leds que se encuentra bajo el indicador correspondiente en el color del indicador de modo conectado. Si un indicador es entre dos Leds, ambos lucen en el color correspondiente y aquél que es más cerca en el indicador, luce más claro.

Si regaláis todavía además a Trimmpotentiometer, podéis también regular la luminosidad del anuncio. En el caso levantan por favor el Auskommentierung de la línea siguiente, mientras quitáis ambos los trazos oblicuos "//" al principio de líneas.

#define POTENCIÓMETRO //uncomment to potenciómetros use for brightness

Podéis olvidar tampoco dar vuestros datos de acceso en "MYSSID" y "MYPWD" en el código.

 

El código:

 

#include <Neoautobús de píxel.h> //library for led strip
//libraries for WiFi y NTP
#include <ESP8266WiFi.h> 
#include <NtpClientLib.h>
#include <TimeLib.h>


//Servidor NTP el Setup
//if possible use local router for el servidor NTP
//higher availability casi respuestas
#define NTP_SERVER "fritz.box" //"pool.ntp.org" 
#define GMT_TIMEZONE 1
#define DAYLIGHT true
#define TIMEZONE_MINUTES 0


//here add your Access la información
#define MYSSID "************"
#define MYPWD "******************"
//#define POTENCIÓMETRO //uncomment to potenciómetros use for brightness

const uint16_t PixelCount = 12; //this example assumes 12 píxeles, making it smaller va cause a failure
const uint8_t PixelPin = 2;  //make sure to el juego this to the correct pin, ignored for Esp8266

//initialize LED strip driver
Neoautobús de píxel<NeoGrbFeature, Neo800KbpsMethod> strip(PixelCount, PixelPin);

//color la definición for black to switch leds off
RgbColor black(0);

//some globalmente vatriables
boolean connected = false;
bool wifiFirstConnected = false;
uint8_t colorSaturation = 64; //máximo brightness

//callback on WiFi connected
void onSTAConnected (WiFiEventStationModeConnected ipInfo) {     Serial.printf ("Connected to %s\r\n", ipInfo.ssid.c_str ());
}

//callback on got IP address
//Salida NTP only el ano IP network is connected
void onSTAGotIP (WiFiEventStationModeGotIP ipInfo) {     Serial.printf ("Got IP: %s\r\n", ipInfo.ip.toString ().c_str ());     Serial.printf ("Connected: %s\r\n", WiFi.estatus () == WL_CONNECTED ? "yes" : "no");     wifiFirstConnected = true; //juego flag to la salida NTP en Meno loop     connected = true;
}

//Sé el manager network disconnection
void onSTADisconnected (WiFiEventStationModeDisconnected event_info) {     Serial.printf ("Disconnected from SSID: %s\n", event_info.ssid.c_str ());     Serial.printf ("Reason: %d\n", event_info.reason);     //NTP.stop ();//NTP sync can disabled to avoid sync errors
}

//callback on eventos NTP
void processSyncEvent (NTPSyncEvent_t ntpEvent) {     if (ntpEvent) {         Serial.print ("Time Sync error:");         if (ntpEvent == noResponse)             Serial.println ("El servidor NTP la necesidad reachable");         else if (ntpEvent == invalidAddress)             Serial.println ("Invalid NTP server address");     } else {         //Serial.print ("Got NTP time:");         //Serial.println (NTP.getTimeDateString (NTP.getLastNTPSync));     }
}

boolean syncEventTriggered = false; //True if al evento time has been triggered
NTPSyncEvent_t ntpEvent; //Carga triggered el evento

//this function gets the seconds of the day y calculate the led la posición y brightness
void setTime(uint32_t seconds) {   //array to collect RGB values   uint8_t red[12];   uint8_t green[12];   uint8_t blue[12];   //one led every five seconds y twelfe leds at todo   uint8_t led_s1 = seconds / 5 % 12;   //second led is the next led or 0 if we reached the end   uint8_t led_s2 = (led_s1 < 11)?led_s1+1:0;   //one led every 300 seconds y twelfe leds at todo    uint8_t led_m1 = seconds / 300 % 12;   uint8_t led_m2 = (led_m1 < 11)?led_m1+1:0;   //one led every en 3600 seconds y twelfe leds at todo    uint8_t led_h1 = seconds / 3600 % 12;   uint8_t led_h2 = (led_h1 < 11)?led_h1+1:0;   //for the values for seconds we split it into de 5 partes with 1 second   uint8_t val_s = (seconds % 5) * colorSaturation /5;   //for values for minutes we split it into de 15 partes with 20 seconds   uint8_t val_m = ((seconds / 20) % 15) * colorSaturation /15;   //for values for hours we split it into de 16 partes with 225 seconds   uint8_t val_h = ((seconds / 225) % 16) * colorSaturation /16;   //Serial.printf ("Sek = %i %i: % i: % i values %i: % i: % i \n" ,seconds,led_s1,led_m1,led_h1,val_s,val_m,val_h);   //now we fill the rgb arrays with 0 for black   for (uint8_t i = 0; i<12; i++) {     red[i]=0; green[i]=0; blue[i] =0;    }   //next el juego we the values for the leds el as calculated before   red[led_s1] = colorSaturation - val_s;   red[led_s2] = val_s;   green[led_m1] = colorSaturation - val_m;   green[led_m2] = val_m;   blue[led_h1] = colorSaturation - val_h;   blue[led_h2] = val_h;   //at leía we prepare the envía el tope for sending to the strip   for (uint8_t i = 0; i<12; i++) {     RgbColor col(red[i],green[i],blue[i]);     HslColor hcol(col);     strip.SetPixelColor(i,hcol);   }
}


void Setup() {     static WiFiEventHandler e1, e2, e3;     Serial.begin(115200);     while (!Serial); //wait for serial attach     Serial.println();     Serial.println("Initializing...");     Serial.flush();     //this resets todos los neopíxeles the to en off state     strip.Begin();     strip.Show();     Serial.println();     Serial.println("Connecting...");     WiFi.moda(WIFI_STA);     WiFi.begin(MYSSID, MYPWD);     NTP.onNTPSyncEvent ([](NTPSyncEvent_t evento) {         ntpEvent = evento;         syncEventTriggered = true;     });     e1 = WiFi.onStationModeGotIP (onSTAGotIP);//As soon WiFi is connected, la salida el cliente NTP     e2 = WiFi.onStationModeDisconnected (onSTADisconnected);     e3 = WiFi.onStationModeConnected (onSTAConnected);      }


time_t t;
uint32_t s;
void loop() {   yield(); //to allow background tasks   static int leía = 0;   if (wifiFirstConnected) {       //if we are connected la salida we NTP       wifiFirstConnected = false;       NTP.begin (NTP_SERVER, GMT_TIMEZONE, DAYLIGHT, TIMEZONE_MINUTES);       NTP.setInterval (63);   }   if (syncEventTriggered) {       //we got al evento NTP       processSyncEvent (ntpEvent);       syncEventTriggered = false;   }   if (connected && ((millis () - leía) > 1000)) {
#ifdef POTENCIÓMETRO       //if we use al potenciómetro for brightness we read the       //value from pin A0       colorSaturation = analogRead(A0) /16; //como máximo = 64
#endif      //every second la actualización we led strip       leía = millis();       t = NTP.getTime();       if (t>0) {         //if we got a time we calculate the seconds of the day         s = hour(t)*3600+minuto(t)*60+second(t);       } else {         //otherwise we increment the seconds         s++;       }       //el juego the leds y envía it to the strip       setTime(s);       strip.Show();   }
}

 

 

Todas las bibliotecas necesarias pueden ser registradas sobre Arduino la administración de biblioteca:

 

El circuito:

 

El circuito es totalmente fácil. RX-Pin de ESP8266 es utilizado debido a las posibilidades DMA. No extrañan si durante la tienda alta de programa todos los LEDs sabe lucen. Los controlleres de WS2812 no pueden comenzar con los datos en la interface en serie nada. El potenciómetro es conectado entre 3.3 Voltmeter y masa. El afilador viene en A0.

Mucha diversión en los trabajos manuales.

 

Precipitador electrostático - 8266Proyectos para principiantes

25 comentarios

Thomas

Thomas

Ich habe jetzt stundenlang versucht das Ding zu Kompilieren .
Ich komme über #include nicht hinaus .
Library #include ESP8266WiFi hinzu gefügt und es kommen tausende Fehlermeldungen .
Wenn ich die eine bereinige kommt die nächste …
Wo finde ich die passende ESP8266WiFi ?

Gruß
Thomas

Michael

Michael

Super.
Danke für diesen Artikel.
Statt LedRing nehme ich ein Rest-Stück vom WS2812B-Stripe. Was ja Ansicht identisch ist.
Klappt alles auf Anhieb, nach dem die TimeLib besorgt und in Library-Verzeichnis gebracht wurde.
Danke nochmal.

Dirk

Dirk

Hallo an Alle!
Nach einiger holperei mit den zu installierenden Libs klappt Kompilieren und Hochladen, aber da zuckt nicht eine LED. auch nicht während des Ladens.
Der serielle Monitor meldet das die Verbindung mit Fritz funktioniert, aber dann Dauerschleifen Meldung

Time Sync error:

Weiß jemand Rat ?

Gruß, Dirk

Gerald Lechner

Gerald Lechner

Hallo Thomas, das sieht nach einem Problem mit dem NTP Server aus, das ist der Teil der UDP verwendet. Schau mal welche Meldungen der serielle Monitor ausgibt.
Eventuell solltest du das ESP8266 Paket in der Arduino IDE entfernen und neu installieren

Thomas

Thomas

Hallo,
ich hatte nach längerer Zeit einen Fehler schon beim kompilieren (ESPAsyncUDP fehlt). Nach dem includieren dieser Bibliohek ist der Fehler weg, aber der Sketch lädt hoch auf den Mini D1 und die Uhr läuft nicht. Es leuchtet nur die 12-Uhr-LED weiß und die 14-Uhr
rot. Was könnte der Fehler sein ?

Harald

Harald

Nach langem Kampf hat soweit alles funktioniert, aber nun kommt immer Time Server nicht erreichbar. Ich benutze keine Fritz Box (ich habe den Speedport) und wenn ich
pool.ntp.org eintrage das gleiche. Wer weis Rat ? Vielen Dank !

Ingbert

Ingbert

Hallo Gerald, Danke für die Antwort & wäre echt klasse, wenn es eine Version mit WPS Modul geben wird. Dann wäre die Uhr ein 101%iges Geschenk :-)

Gerald

Gerald

Zur TimeLib.h Bibliothek.: Die findet ihr auf GitHub https://github.com/PaulStoffregen/Time .
Einfach die ZIP Datei runterladen und entpackt in das Arduino libraries Verzeichnis kopieren.

Gerald

Gerald

Zum stray Fehlermeldung: Diese Fehlermeldung besagt, dass im Code ein ungültiges Sonderzeichen vorkommt.

Manfred

Manfred

Schönes Projekt, habe aber auch ich habe das problem beim kompelieren mit TimeLib.h wie kann ich diese einbinden?

Harald

Harald

Hallo! Ich bekomme beim Kompilieren immer die Fehlermeldung "NeoPixelBus_by_Makuna\src\internal\NeoEsp8266UartMethod.h:260:9: error: ‘swap’ is not a member of ‘std’

std::swap(_asyncPixels, _pixels);

Weiß jemand Rat?

Thx!

Matthias

Matthias

Kompilierungsfehler? Schon mal die “Was suchen Sie?” Leiste benutzt?! Die ist echt praktisch:
https://www.az-delivery.de/blogs/azdelivery-blog-fur-arduino-und-raspberry-pi/kodierungsfehler-schnell-beheben?ls=de

Gerolf Kunde

Gerolf Kunde

Schönes Projekt. Komme aber nicht über den Versuch des Kompilierenshinaus. Fehler stray 240 und 302.
Weiß jemand Rat?

Gerald

Gerald

Hallo Ingbert
Leider müssen die Zugangsdaten in der vorliegenden Version für jedes WLAN gesetzt werden.
Man könnte jedoch WPS einsetzen um das Modul mit einem Router zu verbinden. Ich werde das mal versuchen und wenn ich erfolgreich bin einen Beitrag mit der WPS fähigen Uhr in diesem Blog posten.

Gerald

Gerald

Hallo Deschdi für dein Gewächshaus Projekt würde ich dir die Beitragsserie zur Smart-Home Zentrale mit Ardui-Touch empfehlen. Das Projekt ist noch in Arbeit, wird aber wenn es fertig ist, all das können was du brauchst, also Webanbindung, NTP-synchronisierte Zeit und Datenlogging.

Ingbert

Ingbert

So die Teile sind bestellt, aber noch eine Frage
Wenn ich die Uhr mitnehmen, also in verschiedenen WLANs betreiben, möchte – muss ich jedes Mal den Code
=> //here add your access information
#define MYSSID “************”
#define MYPWD “******************”
anpassen & neu auf das Modul laden, oder gibt es da einen “Trick” ?

Thomas

Thomas

Sehr schöne Idee, leider vermisse ich den Hinweis auf die TimeLib, die man nachinstallieren muß, da sonst schon das Kompilieren scheitert.
Ansonsten viele schöne Projekte mit ergänzenden, kostenlosen e-books.

Deschdi

Deschdi

Hi Gerald,
NTP via FritzBox ist ein echt nettes Projekt.
Ich würde die Temperatur- und Spannungs-Messwerte gerne an die FritzBox.NAS schicken via FTP Client, um den täglichen Temperaturverlauf im Gewächshaus zu erfassen.
Und anschließend imPC weiter zu verarbeiten.
Hast so etwas oder ähnliches in der Schublade?
Viel Spass beim Schaffa

Deschdi

Deschdi

Hi Gerald,
NTP via FritzBox ist ein echt nettes Projekt.
Ich würde die Temperatur- und Spannungs-Messwerte gerne an die FritzBox.NAS schicken via FTP Client, um den täglichen Temperaturverlauf im Gewächshaus zu erfassen.
Und anschließend imPC weiter zu verarbeiten.
Hast so etwas oder ähnliches in der Schublade?
Viel Spass beim Schaffa

Gerald

Gerald

Den D1-Mini habe ich gewählt, da die Uhr über NTP gesetzt werden sollte.

wIWa

wIWa

Nettes Projekt, mal fix getestet. Muss mir nur noch ne elegante “Einhausung” einfallen lassen. Statt des Potis kommt noch ne automatische Helligkeitsanpassung mit Fototransistor.
Bitte im Code die beiden abschließenden geschweiften Klammern nachtragen.

veit

veit

top, schönes projekt und schöner code!

soweit ich mich erinnere nutzt die Neopixel lib nicht die fähigkeiten von rmt am esp32 (bitte korrigieren wenn die info veraltet ist) – das wäre dann noch ein punkt zum optimieren, falls man den chip gleichzeitig noch für andere aufgaben nutzt, gerade mit wifi nutzung flackern die leds dann gerne.

wäre großartig wenn ihr die anderen ring-größen auch noch in euren shop aufnehmt!

Mike

Mike

Nett aber warum einen D1? Wozu das WLAN? Das geht doch genau so gut mit einem Nano?!

Henning Lühken

Henning Lühken

Sehr schöne Idee – aber gerade der D1Mini ist im Moment ausverkauft!?!

Ingbert

Ingbert

Cooles Projekt – wollte gerade die Teile Bestellen, aber der D1 ist wohl ausverkauft :-/

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