#include <ESP8266WiFi.h> #include <WiFiClient.h> #include <ESP8266mDNS.h> #include <WiFiUdp.h> #include <ArduinoOTA.h> #include <PubSubClient.h> #include <Adafruit_NeoPixel.h> #define PIN D8 Adafruit_NeoPixel strip = Adafruit_NeoPixel(6, PIN, NEO_GRB + NEO_KHZ800); const char* ssid = "...."; const char* password = "...."; const char* host = "Fountain"; const int relay = 0; const int LED = 2; int hue = 0; float brightness = 0.0; float saturation = 0.0; // Update these with values suitable for your network. IPAddress MQTTserver(192, 168, 1, 155); #define BUFFER_SIZE 100 WiFiClient wclient; PubSubClient client(wclient, MQTTserver); void callback(const MQTT::Publish& pub) { uint16_t i, j; String myMessage = String(pub.payload_string()); // handle message arrived Serial.print(pub.topic()); Serial.print(" => "); String myTpoic = String(pub.topic()); if(myTpoic == "Fountain") { Serial.println(pub.payload_string()); if(pub.payload_string() == "on") { hue = 0; brightness = 1.0; saturation = 0.0; for(i=0; i<strip.numPixels(); i++) { strip.setPixelColor(i, strip.HSVColor(hue,saturation,brightness)); } strip.show(); } else { hue = 0; brightness = 0.0; saturation = 0.0; for(i=0; i<strip.numPixels(); i++) { strip.setPixelColor(i, strip.HSVColor(hue,saturation,brightness)); } strip.show(); } } else if(myTpoic == "FountainBrightness") { Serial.println(pub.payload_string()); brightness = (myMessage.toFloat())/100; for(i=0; i<strip.numPixels(); i++) { strip.setPixelColor(i, strip.HSVColor(hue,saturation,brightness)); } strip.show(); } else if(myTpoic == "FountainHue") { Serial.println(pub.payload_string()); hue = myMessage.toInt(); for(i=0; i<strip.numPixels(); i++) { strip.setPixelColor(i, strip.HSVColor(hue,saturation,brightness)); } strip.show(); } else if(myTpoic == "FountainSaturation") { Serial.println(pub.payload_string()); saturation = (myMessage.toFloat())/100; for(i=0; i<strip.numPixels(); i++) { strip.setPixelColor(i, strip.HSVColor(hue,saturation,brightness)); } strip.show(); } } void setup() { pinMode(relay, OUTPUT); pinMode(LED, OUTPUT); Serial.begin(115200); Serial.println("Booting"); WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); while (WiFi.waitForConnectResult() != WL_CONNECTED) { Serial.println("Connection Failed! Rebooting..."); delay(5000); ESP.restart(); } // Port defaults to 8266 // ArduinoOTA.setPort(8266); // Hostname defaults to esp8266-[ChipID] ArduinoOTA.setHostname(host); // No authentication by default // ArduinoOTA.setPassword((const char *)"123"); ArduinoOTA.onStart([]() { Serial.println("Start"); }); ArduinoOTA.onEnd([]() { Serial.println("\nEnd"); }); ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) { Serial.printf("Progress: %u%%\r", (progress / (total / 100))); }); ArduinoOTA.onError([](ota_error_t error) { Serial.printf("Error[%u]: ", error); if (error == OTA_AUTH_ERROR) Serial.println("Auth Failed"); else if (error == OTA_BEGIN_ERROR) Serial.println("Begin Failed"); else if (error == OTA_CONNECT_ERROR) Serial.println("Connect Failed"); else if (error == OTA_RECEIVE_ERROR) Serial.println("Receive Failed"); else if (error == OTA_END_ERROR) Serial.println("End Failed"); }); ArduinoOTA.begin(); Serial.println("Ready"); Serial.print("IP address: "); Serial.println(WiFi.localIP()); // MQTT callback client.set_callback(callback); strip.begin(); strip.show(); // Initialize all pixels to 'off' } void loop() { ArduinoOTA.handle(); if (WiFi.status() == WL_CONNECTED) { if (!client.connected()) { if (client.connect("ESP8266: Fountain")) { client.publish("outTopic","hello world"); client.subscribe("Fountain"); client.subscribe("FountainHue"); client.subscribe("FountainSaturation"); client.subscribe("FountainBrightness"); } } if (client.connected()) client.loop(); } // Serial.println("*"); }