Un orologio leggermente diverso con anello LED RGB e D1 Mini

Oggi vogliamo con lui Anello RGB-condotto di nuovo in vendita da AZ-consegna è e uno D1 mini un orologio costruisce su NTP è sincronizzato. Le lancette sono simboleggiate da colori diversi. Seconda lancetta = rosso, lancetta dei minuti = lancetta delle ore e verde = azzurro. Questo diventa l'esposizione di 12 Leds che è sotto la lancetta adatta sul colore della lancetta cambiata. Se una lancetta è tra due Leds, entrambo lo splendore nell'adatto e quello che è più vicino nella lancetta, gli splendori più lucenti.

Se ancora dà, inoltre, a Trimmpotentiometer, può anche regolare lo splendore dell'esposizione. Nel caso l'ascensore piace ad Auskommentierung della linea seguente, mentre toglie entrambi i tagli «//» all'inizio di linea.

#define POTENTIOMETER //infaccia commenti per usare potentiometers per splendore

Può dimenticare anche di non dare i Suoi dati di accesso con «MYSSID» e «MYPWD» nel codice.

 

Il codice:

 

#include <Allenatore di neopixel.H> //biblioteca per striscia condotta
//biblioteche per WiFi e NTP
#include <ESP8266WiFi.H> 
#include <NtpClientLib.H>
#include <TimeLib.H>


//Server situazione di NTP
//se uso possibile instradatore locale per server NTP
//disponibilità alta quasi risposte
#define NTP_SERVER «fritz.box» //«pool.ntp.org» 
#define GMT_TIMEZONE 1
#define LUCE DEL GIORNO vero
#define TIMEZONE_MINUTES 0


//qui aggiunga le Sue informazioni di accesso
#define MYSSID "************"
#define MYPWD "******************"
//#define POTENTIOMETER //infaccia commenti per usare potentiometers per splendore

può uint16_t PixelCount = 12; //questo esempio assume di 12 pixel, farlo più piccolo vuole causano un fallimento
può uint8_t PixelPin = 2;  //faccia la sura per mettere questo allo spillo corretto, ignorato per Esp8266

//inizializzi il guidatore di striscia CONDOTTO
Allenatore di neopixel<NeoGrbFeature, Neo800KbpsMethod> striscia(PixelCount, PixelPin);

//la definizione a colori per nero per cambiare leds di vista
RgbColor nero(0);

//alcuni in tutto il mondo vatriables
boolean connesso = falso;
bool wifiFirstConnected = falso;
uint8_t colorSaturation = 64; //splendore massimo

//il richiamo su WiFi si è connesso
vuoto onSTAConnected (WiFiEventStationModeConnected ipInfo) {     Seriale.printf («Collegato a %s\r\n», ipInfo.ssid.c_str ());
}

//richiamo su indirizzo IP ottenuto
//Inizi NTP solo l'ano la rete di IP è collegata
vuoto onSTAGotIP (WiFiEventStationModeGotIP ipInfo) {     Seriale.printf («Ha ottenuto IP: %s\r\n», ipInfo.ip.toString ().c_str ());     Seriale.printf («Collegato: %s\r\n», WiFi.stato () == WL_CONNECTED ? «sì» : «no»);     wifiFirstConnected = vero; //la bandiera di serie per iniziare il cappio NTP nella causa principale     connesso = vero;
}

//Diriga la disgiunzione di rete
vuoto onSTADisconnected (WiFiEventStationModeDisconnected event_info) {     Seriale.printf («Sconnesso da SSID: %s\n», event_info.ssid.c_str ());     Seriale.printf («Ragione: %d\n», event_info.ragione);     //NTP.stop ();//la sincronia di NTP può Essere invalidi per evitare errori di sincronizzazione
}

//richiamo su eventi NTP
vuoto processSyncEvent (NTPSyncEvent_t ntpEvent) {     se (ntpEvent) {         Seriale.stampa («Errore di Sincronia di tempo»:);         se (ntpEvent == noResponse)             Seriale.println («Server NTP raggiungibile»);         altro se (ntpEvent == invalidAddress)             Seriale.println («Indirizzo di server NTP invalido»);     } altro {         //Serial.print («Ha ottenuto il tempo NTP»:);         //Serial.println (NTP.getTimeDateString (NTP.getLastNTPSync));     }
}

boolean syncEventTriggered = falso; //Vero se un evento di tempo è stato provocato
NTPSyncEvent_t ntpEvent; //Carichi l'evento provocato

//questa funzione ottiene i secondi del giorno e calcoli la posizione condotta e lo splendore
vuoto tempo di serie(uint32_t secondi) {   //l'assortimento per incassare valori di RGB   uint8_t rosso[12];   uint8_t verde[12];   uint8_t azzurro[12];   //un condotto ogni cinque secondi e twelfe leds affatto   uint8_t led_s1 = secondi / 5 % 12;   //secondo condotto è il prossimo condotto o 0 se ci siamo estesi   uint8_t led_s2 = (led_s1 < 11)?led_s1+1:0;   //un condotto ogni 300 secondi e twelfe leds affatto    uint8_t led_m1 = secondi / 300 % 12;   uint8_t led_m2 = (led_m1 < 11)?led_m1+1:0;   //un condusse ogni in 3.600 secondi e twelfe leds affatto    uint8_t led_h1 = secondi / 3600 % 12;   uint8_t led_h2 = (led_h1 < 11)?led_h1+1:0;   //per i valori durante secondi ci spacchiamo in di 5 rinuncia a 1 secondo   uint8_t val_s = (secondi % 5) * colorSaturation /5;   //per valori durante minuti ci spacchiamo in di 15 rinuncia a 20 secondi   uint8_t val_m = ((secondi / 20) % 15) * colorSaturation /15;   //per valori durante ore ci spacchiamo in di 16 rinuncia a 225 secondi   uint8_t val_h = ((secondi / 225) % 16) * colorSaturation /16;   //Serial.printf («Sek = %i %i: % i: % i valori %i: % i: % i \n» ,seconds,led_s1,led_m1,led_h1,val_s,val_m,val_h);   //adesso riempiamo gli assortimenti di rgb di 0 per nero   per (uint8_t io = 0; io<12; io++) {     rosso[io]=0; verde[io]=0; azzurro[io] =0;    }   //poi mettiamo i valori per l'asso di leds calcolato prima   rosso[led_s1] = colorSaturation - val_s;   rosso[led_s2] = val_s;   verde[led_m1] = colorSaturation - val_m;   verde[led_m2] = val_m;   azzurro[led_h1] = colorSaturation - val_h;   azzurro[led_h2] = val_h;   //A letto prepariamo il respingente mandare a mandare alla striscia   per (uint8_t io = 0; io<12; io++) {     RgbColor sella(rosso[io],verde[io],azzurro[io]);     HslColor hcol(sella);     striscia.SetPixelColor(io,hcol);   }
}


vuoto situazione() {     statico WiFiEventHandler e1, e2, e3;     Seriale.cominciare(115200);     mentre (!Seriale); //aspetti il romanzo a puntate sono connessi     Seriale.println();     Seriale.println(«Inizializzare...»);     Seriale.flusso();     //questo azzera tutto il neopixel a in di stato di vista     striscia.Cominciare();     striscia.Mostrare();     Seriale.println();     Seriale.println(«Collegamento...»);     WiFi.moda(WIFI_STA);     WiFi.cominciare(MYSSID, MYPWD);     NTP.onNTPSyncEvent ([](NTPSyncEvent_t evento) {         ntpEvent = evento;         syncEventTriggered = vero;     });     e1 = WiFi.onStationModeGotIP (onSTAGotIP);//L'asso presto WiFi è collegato, inizi il cliente NTP     e2 = WiFi.onStationModeDisconnected (onSTADisconnected);     e3 = WiFi.onStationModeConnected (onSTAConnected);      }


time_t t;
uint32_t vedi;
vuoto cappio() {   raccolto(); //permettere compiti di sfondo   statico intervallo leggere = 0;   se (wifiFirstConnected) {       //se noi che ares ha collegato iniziamo NTP       wifiFirstConnected = falso;       NTP.cominciare (NTP_SERVER, GMT_TIMEZONE, LUCE DEL GIORNO, TIMEZONE_MINUTES);       NTP.setInterval (63);   }   se (syncEventTriggered) {       //abbiamo ottenuto un evento NTP       processSyncEvent (ntpEvent);       syncEventTriggered = falso;   }   se (connesso && ((millis () - leggere) > 1000)) {
#ifdef POTENTIOMETER       //se usiamo un potentiometer per splendore noi Read       //valore da spillo A0       colorSaturation = analogRead(A0) /16; //max. = 64
#endif      //ogni secondo aggiorniamo la striscia condotta       leggere = millis();       t = NTP.getTime();       se (t>0) {         //se abbiamo ottenuto un tempo calcoliamo i secondi del giorno         vedi = ora(t)*3600+minuto(t)*60+secondo(t);       } altro {         //altrimenti aumentiamo i secondi         vedi++;       }       //metta il leds e lo mandi alla striscia       tempo di serie(vedi);       striscia.Mostrare();   }
}

 

 

Tutte le biblioteche necessarie possono esser registrate sulla direzione di biblioteca di Arduino:

 

Il giro:

 

Il giro è abbastanza facile. Il RX-spillo dell'ESP8266 è usato a causa delle possibilità DMA. Non sorprenda se durante il deposito ad alto livello dal programma tutto LEDs sa lo splendore. I controllori del WS2812 non possono iniziare dai dati sull'interfaccia seriale niente. Il potentiometer è cambiato tra 3,3 V e la massa. Il macinino si trova in A0.

Molto divertimento con la stagnatura.

 

Esp-8266Projekte für anfänger

25 Kommentare

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 :-/

Einen Kommentar hinterlassen

Alle Kommentare werden vor der Veröffentlichung moderiert