Aujourd'hui, nous voulons avec lui RGB-Led l'anneau à neuf dans l'offre d'AZ-Delivery est et l'un Mini de D1 une heure bâtissent sur NTP est synchronisé. Les aiguilles sont symbolisées par les couleurs différentes. Aiguille de secondes = rouge, l'aiguille de minutes = vert et l'aiguille des heures = bleu. Celui devient l'annonce de 12 Leds qui se trouve sous l'aiguille correspondante sur la couleur de l'aiguille de manière commutée. Si une aiguille est entre deux Leds, les deux éclairent dans la couleur correspondante et celui-là qui est plus près à l'aiguille, éclaire plus clair.
Si vous payez encore de plus Trimmpotentiometer, vous pouvez aussi régler la luminosité de l'annonce. Dans le cas lèvent s'il vous plaît l'Auskommentierung de la ligne suivante pendant que vous enlevez les deux barres de fraction "//" au début de lignes.
#define POTENTIOMETRE //uncomment to les potentiomètres use for brightness
Vous pouvez oublier de ne pas non plus entrer vos données d'accès à "MYSSID" et "MYPWD" dans le code.
Le code :
#include <Autobus de néopixel.h> //library for led strip //libraries for WiFi et NTP #include <ESP8266WiFi.h> #include <NtpClientLib.h> #include <TimeLib.h> //Serveur NTP setup //if possible use local router for le serveur NTP //higher availability presque des réponses #define NTP_SERVER "fritz.box" //"pool.ntp.org" #define GMT_TIMEZONE 1 #define DAYLIGHT true #define TIMEZONE_MINUTES 0 //here add your Access l'information #define MYSSID "************" #define MYPWD "******************" //#define POTENTIOMETRE //uncomment to les potentiomètres use for brightness const uint16_t PixelCount = 12; //this example assumes de 12 pixels, making it smaller veut cause a failure const uint8_t PixelPin = 2; //make sure to l'assortiment this to the correct pin, ignored for Esp8266 //initialize LED strip driver Autobus de néopixel<NeoGrbFeature, Neo800KbpsMethod> strip(PixelCount, PixelPin); //color la définition for black to switch leds off RgbColor black(0); //some globalement vatriables boolean connected = false; bool wifiFirstConnected = false; uint8_t colorSaturation = 64; //maximum 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 //Départ NTP only l'anus 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.état () == WL_CONNECTED ? "yes" : "no"); wifiFirstConnected = true; //assortiment flag to le départ NTP dans le Main loop connected = true; } //Arrange 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 des événements NTP void processSyncEvent (NTPSyncEvent_t ntpEvent) { if (ntpEvent) { Serial.print ("Time Sync error :"); if (ntpEvent == noResponse) Serial.println ("Le serveur NTP 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 a l'événement time has been triggered NTPSyncEvent_t ntpEvent; //Charge triggered l'événement //this function gets the seconds of the day et calculate the led la position et 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 et twelfe leds at tous uint8_t led_s1 = seconds / 5 % 12; //second led is the next led or 0 if we reached the uint8_t led_s2 = (led_s1 < 11)?led_s1+1:0; //one led every 300 seconds et twelfe leds at tous uint8_t led_m1 = seconds / 300 % 12; uint8_t led_m2 = (led_m1 < 11)?led_m1+1:0; //one led every en 3600 seconds et twelfe leds at tous 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 parties with 1 second uint8_t val_s = (seconds % 5) * colorSaturation /5; //for values for minutes we split it into de 15 parties with 20 seconds uint8_t val_m = ((seconds / 20) % 15) * colorSaturation /15; //for values for hours we split it into de 16 parties with 225 seconds uint8_t val_h = ((seconds / 225) % 16) * colorSaturation /16; //Serial.printf ("la seconde = %i %i : Les % i : Les % i values %i : Les % i : Les % 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 l'assortiment we the values for the leds l'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 lisait we prepare the envoie la mémoire tampon 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 tout le néopixel the to à off state strip.Begin(); strip.Show(); Serial.println(); Serial.println("Connecting..."); WiFi.mode(WIFI_STA); WiFi.begin(MYSSID, MYPWD); NTP.onNTPSyncEvent ([](NTPSyncEvent_t événement) { ntpEvent = événement; syncEventTriggered = true; }); e1 = WiFi.onStationModeGotIP (onSTAGotIP);//As soon WiFi is connected, le départ le client NTP e2 = WiFi.onStationModeDisconnected (onSTADisconnected); e3 = WiFi.onStationModeConnected (onSTAConnected); } time_t t; uint32_t s; void loop() { yield(); //to allow background tasks static int lisait = 0; if (wifiFirstConnected) { //if we are connected le départ we NTP wifiFirstConnected = false; NTP.begin (NTP_SERVER, GMT_TIMEZONE, DAYLIGHT, TIMEZONE_MINUTES); NTP.setInterval (63); } if (syncEventTriggered) { //we got a l'événement NTP processSyncEvent (ntpEvent); syncEventTriggered = false; } if (connected && ((millis () - lisait) > 1000)) { #ifdef POTENTIOMETRE //if we use a le potentiomètre for brightness we read the //value from pin A0 colorSaturation = analogRead(A0) /16; //au maximum = 64 #endif //every second la version modernisée we led strip lisait = millis(); t = NTP.getTime(); if (t>0) { //if we got a time we calculate the seconds of the day s = hour(t)*3600+minute(t)*60+second(t); } else { //otherwise we increment the seconds s++; } //l'assortiment the leds et envoie it to the strip setTime(s); strip.Show(); } }
Toutes les bibliothèques nécessaires peuvent être enregistrées sur Arduino l'administration de bibliothèque :
La mise en circuit :
La mise en circuit est tout à fait simple. RX-Pin d'ESP8266 est utilisé à cause des possibilités DMA. Ne s'étonnent pas si pendant un haut magasin de programme tous les LEDs sait éclairent. Les contrôleurs de gestion de WS2812 ne peuvent rien commencer par les données sur l'interface en série. Le potentiomètre est commuté entre 3.3 V et masse. Le rémouleur vient à A0.
Beaucoup de plaisir lors du bricolage.
26 commentaires
Christoph
Wenn diese Anleitung hier stehen bleiben soll, muss sie dringend überarbeitet werden. Für Anfänger ist sie so keineswegs geeignet. Abgesehen davon, dass die Bibliotheken NeoPixelBus_by_Makuna und NtpClientLib installiert werden muss, was nur bei sehr viel good will aus dem verschwommenen Screenshot zu sehen ist, sind auch noch die Bibliotheken Time-master und ESPAsyncUDP-master zu installieren. Und dann hagelt es Compilierungsfehler. Ich gebe auf.
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
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
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
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
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
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
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
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
Zum stray Fehlermeldung: Diese Fehlermeldung besagt, dass im Code ein ungültiges Sonderzeichen vorkommt.
Manfred
Schönes Projekt, habe aber auch ich habe das problem beim kompelieren mit TimeLib.h wie kann ich diese einbinden?
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
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
Schönes Projekt. Komme aber nicht über den Versuch des Kompilierenshinaus. Fehler stray 240 und 302.
Weiß jemand Rat?
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
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
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
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
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
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
Den D1-Mini habe ich gewählt, da die Uhr über NTP gesetzt werden sollte.
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
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
Nett aber warum einen D1? Wozu das WLAN? Das geht doch genau so gut mit einem Nano?!
Henning Lühken
Sehr schöne Idee – aber gerade der D1Mini ist im Moment ausverkauft!?!
Ingbert
Cooles Projekt – wollte gerade die Teile Bestellen, aber der D1 ist wohl ausverkauft :-/