From 6691dc9af8ae14f2cd7000041cc0b80988fc1f1d Mon Sep 17 00:00:00 2001 From: Philipp Date: Sun, 18 Dec 2016 21:15:32 +0100 Subject: [PATCH] first working version and new project with homie --- .../mqtt_esp8266_beamer.ino | 181 ++++++++++++++++++ pixelprojektor/pixelprojektor.ino | 63 ++++++ 2 files changed, 244 insertions(+) create mode 100644 outdated/mqtt_esp8266_beamer/mqtt_esp8266_beamer.ino create mode 100644 pixelprojektor/pixelprojektor.ino diff --git a/outdated/mqtt_esp8266_beamer/mqtt_esp8266_beamer.ino b/outdated/mqtt_esp8266_beamer/mqtt_esp8266_beamer.ino new file mode 100644 index 0000000..5d25e11 --- /dev/null +++ b/outdated/mqtt_esp8266_beamer/mqtt_esp8266_beamer.ino @@ -0,0 +1,181 @@ +//nodemcu 1.0 921600 baud + +/* + Basic ESP8266 MQTT example + + This sketch demonstrates the capabilities of the pubsub library in combination + with the ESP8266 board/library. + + It connects to an MQTT server then: + - publishes "hello world" to the topic "outTopic" every two seconds + - subscribes to the topic "inTopic", printing out any messages + it receives. NB - it assumes the received payloads are strings not binary + - If the first character of the topic "inTopic" is an 1, switch ON the ESP Led, + else switch it off + + It will reconnect to the server if the connection is lost using a blocking + reconnect function. See the 'mqtt_reconnect_nonblocking' example for how to + achieve the same result without blocking the main loop. + + To install the ESP8266 board, (using Arduino 1.6.4+): + - Add the following 3rd party board manager under "File -> Preferences -> Additional Boards Manager URLs": + http://arduino.esp8266.com/stable/package_esp8266com_index.json + - Open the "Tools -> Board -> Board Manager" and click install for the ESP8266" + - Select your ESP8266 in "Tools -> Board" + +*/ + +#include +#include + +#include +#ifdef __AVR__ + #include +#endif + +#define PIN 2 + +Adafruit_NeoPixel strip = Adafruit_NeoPixel(64, PIN, NEO_GRB + NEO_KHZ800); + +// Update these with values suitable for your network. + +const char* ssid = "CTDO-g"; +const char* password = "ctdo2342"; +const char* mqtt_server = "raum.ctdo.de"; + +WiFiClient espClient; +PubSubClient client(espClient); +long lastMsg = 0; +char msg[50]; +int value = 0; + +void setup_wifi() { + + delay(10); + // We start by connecting to a WiFi network + Serial.println(); + Serial.print("Connecting to "); + Serial.println(ssid); + + WiFi.begin(ssid, password); + + while (WiFi.status() != WL_CONNECTED) { + delay(500); + Serial.print("."); + } + + randomSeed(micros()); + + Serial.println(""); + Serial.println("WiFi connected"); + Serial.println("IP address: "); + Serial.println(WiFi.localIP()); +} + + +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(); +} + +void callback(char* topic, byte* payload, unsigned int length) { + Serial.print("Message arrived ["); + Serial.print(topic); + Serial.print("] "); + String spayload=""; + for (int i = 0; i < length; i++) { + //Serial.print((char)payload[i]); + spayload=spayload+(char)payload[i]; + } + Serial.println(spayload); + + if ((char)payload[0]=='#'){ //solid fill + int number = (int) strtol( &spayload[1], NULL, 16); + + // Split them up into r, g, b values + int r = number >> 16; + int g = number >> 8 & 0xFF; + int b = number & 0xFF; + 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)); + } + + // Switch on the LED if an 1 was received as first character + /*if ((char)payload[0] == '1') { + digitalWrite(BUILTIN_LED, LOW); // Turn the LED on (Note that LOW is the voltage level + // but actually the LED is on; this is because + // it is acive low on the ESP-01) + led_fill(strip.Color(255, 127, 127)); + } else { + digitalWrite(BUILTIN_LED, HIGH); // Turn the LED off by making the voltage HIGH + led_fill(strip.Color(127, 127, 255)); + }*/ + + + +} + +void reconnect() { + // Loop until we're reconnected + while (!client.connected()) { + Serial.print("Attempting MQTT connection..."); + // Create a random client ID + String clientId = "punkteprojektor"; + clientId += String(random(0xffff), HEX); + // Attempt to connect + if (client.connect(clientId.c_str())) { + Serial.println("connected"); + // Once connected, publish an announcement... + //client.publish("outTopic", "hello world"); + // ... and resubscribe + client.subscribe("raum2/punkteprojektor"); + } else { + Serial.print("failed, rc="); + Serial.print(client.state()); + Serial.println(" try again in 5 seconds"); + // Wait 5 seconds before retrying + delay(5000); + } + } +} + +void setup() { + pinMode(BUILTIN_LED, OUTPUT); // Initialize the BUILTIN_LED pin as an output + Serial.begin(115200); + setup_wifi(); + client.setServer(mqtt_server, 1883); + client.setCallback(callback); + + strip.begin(); + strip.show(); // Initialize all pixels to 'off' + + led_fill(strip.Color(0, 0, 0)); +} + +void loop() { + + if (!client.connected()) { + reconnect(); + } + client.loop(); + + long now = millis(); + if (now - lastMsg > 2000) { + lastMsg = now; + ++value; + //snprintf (msg, 75, "hello world #%ld", value); + //Serial.print("Publish message: "); + //Serial.println(msg); + //client.publish("outTopic", msg); + } +} + + + + diff --git a/pixelprojektor/pixelprojektor.ino b/pixelprojektor/pixelprojektor.ino new file mode 100644 index 0000000..72b9dfd --- /dev/null +++ b/pixelprojektor/pixelprojektor.ino @@ -0,0 +1,63 @@ +#include + +// homie lib from: https://github.com/marvinroger/homie-esp8266/ + + +HomieNode effectNode("effect", "commands"); +HomieNode pixelsNode("pixels", "commands"); + + +bool effectHandler(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; +} + +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"); + + effectNode.advertise("on").settable(effectHandler); + pixelsNode.advertise("on").settable(pixelsHandler); + + + Homie.setup(); +} + +void loop() { + Homie.loop(); + long currentMillis = millis(); + +} + + +