#include // homie lib from: https://github.com/marvinroger/homie-esp8266/ #include #ifdef __AVR__ #include #endif #define PIN 2 //data pin for ws2812 Adafruit_NeoPixel strip = Adafruit_NeoPixel(64, PIN, NEO_GRB + NEO_KHZ800); HomieNode homieNode("pixel", "commands"); void led_fill(uint32_t c) { for (int i=0; i < strip.numPixels(); i++) { strip.setPixelColor(i, c); //turn every third pixel on } strip.show(); } bool effectHandler(const HomieRange& range, const String& value) { int sep = value.indexOf("|"); Homie.getLogger() << "-> " << value << endl; //Serial.print("->"); Serial.println(value); if (value.charAt(0)=='#'){ //solid fill String color=value.substring(1); int number = (int) strtol( &color[0], NULL, 16); // Split them up into r, g, b values int r = number >> 16; int g = number >> 8 & 0xFF; int b = number & 0xFF; Homie.getLogger() << "r=" << r << " g=" << g << " b=" << b << endl; //Serial.print("r=");Serial.print(r); //Serial.print(" g=");Serial.print(g); //Serial.print(" b=");Serial.println(b); led_fill(strip.Color(r, g, b)); } return true; } bool pixelsHandler(const HomieRange& range, const String& value) { int sep = value.indexOf("|"); if(sep > 0) { //Homie.getLogger() << "scroll " << value << " wait " << wait << endl; } else { //Homie.getLogger() << "scroll " << value << endl; } return true; } void setup() { Serial.begin(115200); Serial << endl << endl; Homie_setFirmware("pixelprojektor", "1.0.0"); homieNode.advertise("effect").settable(effectHandler); homieNode.advertise("pixels").settable(pixelsHandler); strip.begin(); strip.show(); // Initialize all pixels to 'off' led_fill(strip.Color(0, 0, 0)); Homie.setup(); } void loop() { Homie.loop(); long currentMillis = millis(); }