Allgemein,  DIY

NodeMCU/Neopixel – Aquarienlampe mit Zeitschaltuhr – Teil 1 LEDs&Zeitschaltung(NTP)

Wie immer Vorweg – ich hab keine Ahnung was ich hier tue – habe es nicht gelernt und ihr solltet nur Dinge bauen wenn ihr sie verstanden habt und das Risiko kennt.

Hier geht´s zum Video: Technikwunderland – Twitch

#include <ESP8266WiFi.h> //Bibliothek für WLAN auf dem ESP
#include <NTPClient.h> // Netzwerk zeit
#include <WiFiUdp.h> //udp bibliothek, ebenfalls für NTP
#include <Adafruit_NeoPixel.h> //Neopixel bibliothek für LEDs

//—debug—
#define debug true

//——WLAN——
const char *ssid = “Deine-SSID”; // Verbindung mit dem Netzwerk herstellen
const char *password = “Dein-WLAN-Passwort”;

//——NTP——
WiFiUDP ntpUDP; //Objekt/Zeiger
NTPClient timeClient(ntpUDP, “pool.ntp.org”); //Server bestimmen

//Array für Wochentage erstellen
String wochentag[7]={“Sonntag”, “Montag”, “Dienstag”, “Mittwoch”, “Donnerstag”, “Freitag”, “Samstag”};

//—–Zeitschaltuhr——
int anschaltStunde[7] = {7, 7, 7, 7, 7, 7, 7};
int anschaltMinute[7] = {0, 10, 15, 20, 25, 30, 35};
int abschaltStunde[7] = {21, 21, 21, 21, 21, 21, 21};
int abschaltMinute[7] = {0, 10, 15, 20, 25, 30, 35};
int zeit_alt = 0;
int ntp_intervall = 60000; //alle X millisekunden wird die Zeit aktualisiert. 1 Minute sind in diesem Fall ausreichend.

//——LAMPE——
int sonne_rot = 255;
int sonne_gruen = 100;
int sonne_blau = 50;
int sonne_helligkeit = 255;
int mond_rot = 255;
int mond_gruen = 255;
int mond_blau = 255;
int mond_helligkeit = 5;

bool LAMPE = true;
bool LAMPE_alt;

#define LED_PIN D6 //Neopixel Pin
#define LED_COUNT 20 //LED Anzahl

Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800); // Objekt deklarieren

void setup() { //——DAS SETUP——

//——DEBUG——
if(debug){
Serial.begin(115200);
}

//——WLAN——
//WLAN verbinden
Serial.print(“Verbinde zu “);
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(“.”);
}

//——NTP——
timeClient.begin(); // INTP Client initialisieren
timeClient.setTimeOffset(3600); // Offset bestimmen
// GMT +1 = 3600
// GMT +8 = 28800
// GMT -1 = -3600
// GMT 0 = 0
timeClient.update();

//——LAMPE——
strip.begin(); // INITIALIZE NeoPixel strip object (REQUIRED)
strip.show(); // Da noch keine Farbwerte übergeben werden setzt diese Zeile alles auf Black(RGB 0,0,0)
strip.setBrightness(sonne_helligkeit); //Starthelligkeit auf Tagwert (da Black ists trotzdem dunkel)
for(int i=0;i<LED_COUNT;i++){
colorWipe(strip.Color( 0, 0, 255), 50); // Blue
}
strip.setBrightness(sonne_helligkeit);
strip.show();
LAMPE = true;

}

void colorWipe(uint32_t color, int wait) {
for(int i=0; i<strip.numPixels(); i++) { // For each pixel in strip…
strip.setPixelColor(i, color); // Set pixel’s color (in RAM)
strip.show(); // Update strip to match
delay(wait); // Pause for a moment
}
}

void loop() { //——DER LOOP——

//——ZEITSCHALTUHR——

if(millis()-zeit_alt >= ntp_intervall){

timeClient.update();
int aktuelleStunde = timeClient.getHours();
int aktuelleMinute = timeClient.getMinutes();
int aktuellerTag = timeClient.getDay();
if(debug){
Serial.print (wochentag[aktuellerTag]);
Serial.print(” – “);
Serial.print(aktuelleStunde);
Serial.print(” : “);
Serial.println(aktuelleMinute);
//Serial.println(millis());
//Serial.println(zeit_alt);
}

if(aktuelleStunde>=anschaltStunde[aktuellerTag] && aktuelleStunde<<abschaltStunde[aktuellerTag]) {
if(aktuelleStunde==anschaltStunde[aktuellerTag]){
if(aktuelleMinute>=anschaltMinute[aktuellerTag]){
LAMPE = true;
}
}
else{
LAMPE = true;
}
}
else if(aktuelleStunde==abschaltStunde[aktuellerTag]){
if(aktuelleMinute>=abschaltMinute[aktuellerTag]){
LAMPE = false;
}
}
else{
LAMPE = false;
}

if(LAMPE_alt != LAMPE || millis() << 60000){
if(LAMPE){
colorWipe(strip.Color( sonne_rot, sonne_gruen, sonne_blau), 50);
strip.setBrightness(sonne_helligkeit);
strip.show();
LAMPE_alt=LAMPE;
}
else if(!LAMPE){
colorWipe(strip.Color( mond_rot, mond_gruen, mond_blau), 50);
strip.setBrightness(mond_helligkeit);
strip.show();
LAMPE_alt=LAMPE;
}
}
zeit_alt=millis();

if(debug){
Serial.print (“LAMPE”);
Serial.print(” – “);
Serial.println(LAMPE);
//Serial.println(millis());
//Serial.println(zeit_alt);
}
}

}

Kommentar verfassen