#include #include #include #include #include "NeoPatterns.h" #define PIN D1 #define NUMPIXELS 144 byte wPos = 0; uint8_t state = 0; void StripComplete(){ return; } NeoPatterns pixels = NeoPatterns(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800,&StripComplete); HomieNode stripNode("strip", "strip"); bool onSetPixel(const HomieRange& range, const String& value){ if(!range.isRange) { pixels.None(); pixels.ColorSet(value.toInt()); stripNode.setProperty("pixel").send(value); return true; } if (range.index < 0 || range.index > pixels.numPixels()-1) { return false; } pixels.None(); pixels.setPixelColor(range.index, value.toInt()); pixels.show(); stripNode.setProperty("pixel_" + String(range.index)).send(value); } bool onSetBrightness(const HomieRange& range, const String& value){ long brightness= value.toInt(); if (brightness < 0 || brightness > 255) { return false; } pixels.setBrightness(brightness); pixels.show(); stripNode.setProperty("brightness").send(value); } bool onSetEffect(const HomieRange& range, const String& value){ String effect = value; effect.toLowerCase(); if(effect == "scanner") { pixels.Scanner(pixels.Color(255,0,0), 55); } else if(effect == "rainbowcycle") { pixels.RainbowCycle(50); } else if(effect == "theaterchase") { pixels.TheaterChase(pixels.Color(0,0,255), pixels.Color(255,0,00), 100); } else if(effect == "fade") { pixels.Fade(pixels.Wheel(255),pixels.Wheel(0),255,25); } else { pixels.None(); } stripNode.setProperty("effect").send(value); } bool onSetClear(const HomieRange& range, const String& value){ pixels.None(); pixels.clear(); pixels.show(); stripNode.setProperty("clear").send(value); } bool onSetLength(const HomieRange& range, const String& value){ pixels.None(); pixels.clear(); pixels.show(); int newLength = value.toInt(); if(newLength > 0) { pixels.updateLength(newLength); } stripNode.setProperty("length").send(value); } void loopHandler() { pixels.Update(); } void setup() { Serial.begin(115200); Homie_setFirmware("schild", "1.0.0"); Homie.setLoopFunction(loopHandler); stripNode.advertiseRange("pixel", 0, NUMPIXELS-1).settable(onSetPixel); stripNode.advertise("brightness").settable(onSetBrightness); stripNode.advertise("effect").settable(onSetEffect); stripNode.advertise("clear").settable(onSetClear); stripNode.advertise("length").settable(onSetLength); pixels.begin(); pixels.clear(); pixels.setBrightness(64); pixels.show(); Homie.setup(); ArduinoOTA.setHostname(Homie.getConfiguration().deviceId); ArduinoOTA.setPassword((const char *)"ctdo2342"); ArduinoOTA.begin(); } void loop() { Homie.loop(); ArduinoOTA.handle(); }