From 7f6fa016ef5312646d3d8697bb71ee1c3745e527 Mon Sep 17 00:00:00 2001 From: Julien Cabillot Date: Thu, 20 Apr 2017 11:13:06 +0200 Subject: [PATCH 1/9] WIP --- README.md | 2 + arduino/mqttfastledmenu/mqttfastledmenu.cpp | 52 +++++++++++++++++++-- 2 files changed, 51 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 0847023..d65b1f3 100644 --- a/README.md +++ b/README.md @@ -34,3 +34,5 @@ Il reste des tweaks à faire pour que les effets marchent comme je le désire ma TODO: changer le mqtt light par un mqtt_json, cela permettrais d'avoir un truc un peu "normal". Il existe de nombreux exemples sur le net pour esp qu'il devrait être très simple d'intégrer. TODO: Utiliser ArduinoOTA pour gérer les mises à jours sans fil. TODO: Si le strip est démarré avant HA, HA n'arrive pas à trouver son état. Surement une question de persistance sur le topic +-> Ceci est du au fait que lorsque l'on redémarre HA on redémarre aussi mosquitto. +-> Au reconnect il faut donc réenvoyer son état actuel diff --git a/arduino/mqttfastledmenu/mqttfastledmenu.cpp b/arduino/mqttfastledmenu/mqttfastledmenu.cpp index c4a2d05..25dbb00 100644 --- a/arduino/mqttfastledmenu/mqttfastledmenu.cpp +++ b/arduino/mqttfastledmenu/mqttfastledmenu.cpp @@ -87,10 +87,15 @@ void testConnectMQTT() if (client.connect("ESP8266Client", MQTT_USER, MQTT_PASS)) { Serial.print("OK\nSubscribe"); client.subscribe(MQTT_LED_COMMAND); + mqttSendState(); client.subscribe(MQTT_LED_EFFECT_COMMAND); + //mqttSendEffectState(); client.subscribe(MQTT_LED_BRIGHTNESS_COMMAND); + mqttSendBrightnessState(); client.subscribe(MQTT_LED_SPEED_COMMAND); + //mqttSendSpeedState(); client.subscribe(MQTT_LED_COLOR_COMMAND); + //mqttSendColorState(); Serial.println(" OK"); } else { Serial.print("KO, erreur : "); @@ -119,12 +124,11 @@ void callbackMQTT(char* topic, byte* payload, unsigned int length) if (stopic == MQTT_LED_COMMAND) { if (msgString == "ON") { ledState = true; - client.publish(MQTT_LED_STATE, message_buff, true); } else { ledState = false; ledBlackAll(); - client.publish(MQTT_LED_STATE, message_buff, true); } + mqttSendState(); } else if (stopic == MQTT_LED_EFFECT_COMMAND) { // Si on ne repasse pas tout à noir, cela peut faire des effets surprenants ledBlackAll(); @@ -148,6 +152,48 @@ void callbackMQTT(char* topic, byte* payload, unsigned int length) } } +void mqttSendState() +{ + if (ledState) { + client.publish(MQTT_LED_STATE, "ON", true); + } else { + client.publish(MQTT_LED_STATE, "OFF", true); + } +} + +void mqttSendEffectState() +{ + char buff[ledEffect.length() + 1]; + ledEffect.toCharArray(buff, ledEffect.length() + 1); + client.publish(MQTT_LED_EFFECT_STATE, buff, true); +} + +void mqttSendBrightnessState() +{ + char buff[4]; + itoa(brightness, buff, 10); + client.publish(MQTT_LED_BRIGHTNESS_STATE, buff, true); +} + +void mqttSendSpeedState() +{ + char buff[4]; + itoa(speed, buff, 10); + client.publish(MQTT_LED_SPEED_STATE, buff, true); +} + +void mqttSendColorState() +{ + /* + int red = msgString.substring(0, msgString.indexOf(',')).toInt(); + int green = msgString.substring(msgString.indexOf(',') + 1, msgString.lastIndexOf(',')).toInt(); + int blue = msgString.substring(msgString.lastIndexOf(',') + 1).toInt(); + color=((red <<16)|(green <<8)|blue); + TODO: client.publish(MQTT_LED_COLOR_STATE, message_buff, true); + avec color + */ +} + // LED /** * Coupe tout le strip de led. @@ -170,7 +216,7 @@ void ledCylon() if (ledEffect != LED_EFFECT_CYLON) { return; } - + if ((i - 3) >= 0) { leds[i - 3] = CRGB::Black; } From dbfb7120d503d88e45f9d03727c7e952e4cc1831 Mon Sep 17 00:00:00 2001 From: Julien Cabillot Date: Thu, 20 Apr 2017 11:13:06 +0200 Subject: [PATCH 2/9] WIP --- README.md | 2 + arduino/mqttfastledmenu/mqttfastledmenu.cpp | 52 +++++++++++++++++++-- 2 files changed, 51 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 0847023..d65b1f3 100644 --- a/README.md +++ b/README.md @@ -34,3 +34,5 @@ Il reste des tweaks à faire pour que les effets marchent comme je le désire ma TODO: changer le mqtt light par un mqtt_json, cela permettrais d'avoir un truc un peu "normal". Il existe de nombreux exemples sur le net pour esp qu'il devrait être très simple d'intégrer. TODO: Utiliser ArduinoOTA pour gérer les mises à jours sans fil. TODO: Si le strip est démarré avant HA, HA n'arrive pas à trouver son état. Surement une question de persistance sur le topic +-> Ceci est du au fait que lorsque l'on redémarre HA on redémarre aussi mosquitto. +-> Au reconnect il faut donc réenvoyer son état actuel diff --git a/arduino/mqttfastledmenu/mqttfastledmenu.cpp b/arduino/mqttfastledmenu/mqttfastledmenu.cpp index c4a2d05..25dbb00 100644 --- a/arduino/mqttfastledmenu/mqttfastledmenu.cpp +++ b/arduino/mqttfastledmenu/mqttfastledmenu.cpp @@ -87,10 +87,15 @@ void testConnectMQTT() if (client.connect("ESP8266Client", MQTT_USER, MQTT_PASS)) { Serial.print("OK\nSubscribe"); client.subscribe(MQTT_LED_COMMAND); + mqttSendState(); client.subscribe(MQTT_LED_EFFECT_COMMAND); + //mqttSendEffectState(); client.subscribe(MQTT_LED_BRIGHTNESS_COMMAND); + mqttSendBrightnessState(); client.subscribe(MQTT_LED_SPEED_COMMAND); + //mqttSendSpeedState(); client.subscribe(MQTT_LED_COLOR_COMMAND); + //mqttSendColorState(); Serial.println(" OK"); } else { Serial.print("KO, erreur : "); @@ -119,12 +124,11 @@ void callbackMQTT(char* topic, byte* payload, unsigned int length) if (stopic == MQTT_LED_COMMAND) { if (msgString == "ON") { ledState = true; - client.publish(MQTT_LED_STATE, message_buff, true); } else { ledState = false; ledBlackAll(); - client.publish(MQTT_LED_STATE, message_buff, true); } + mqttSendState(); } else if (stopic == MQTT_LED_EFFECT_COMMAND) { // Si on ne repasse pas tout à noir, cela peut faire des effets surprenants ledBlackAll(); @@ -148,6 +152,48 @@ void callbackMQTT(char* topic, byte* payload, unsigned int length) } } +void mqttSendState() +{ + if (ledState) { + client.publish(MQTT_LED_STATE, "ON", true); + } else { + client.publish(MQTT_LED_STATE, "OFF", true); + } +} + +void mqttSendEffectState() +{ + char buff[ledEffect.length() + 1]; + ledEffect.toCharArray(buff, ledEffect.length() + 1); + client.publish(MQTT_LED_EFFECT_STATE, buff, true); +} + +void mqttSendBrightnessState() +{ + char buff[4]; + itoa(brightness, buff, 10); + client.publish(MQTT_LED_BRIGHTNESS_STATE, buff, true); +} + +void mqttSendSpeedState() +{ + char buff[4]; + itoa(speed, buff, 10); + client.publish(MQTT_LED_SPEED_STATE, buff, true); +} + +void mqttSendColorState() +{ + /* + int red = msgString.substring(0, msgString.indexOf(',')).toInt(); + int green = msgString.substring(msgString.indexOf(',') + 1, msgString.lastIndexOf(',')).toInt(); + int blue = msgString.substring(msgString.lastIndexOf(',') + 1).toInt(); + color=((red <<16)|(green <<8)|blue); + TODO: client.publish(MQTT_LED_COLOR_STATE, message_buff, true); + avec color + */ +} + // LED /** * Coupe tout le strip de led. @@ -170,7 +216,7 @@ void ledCylon() if (ledEffect != LED_EFFECT_CYLON) { return; } - + if ((i - 3) >= 0) { leds[i - 3] = CRGB::Black; } From 498f5ca80c345ad708397c827f79b43688adbdd5 Mon Sep 17 00:00:00 2001 From: Julien Cabillot Date: Thu, 20 Apr 2017 15:12:57 +0200 Subject: [PATCH 3/9] ++todo mqtt_json --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index d65b1f3..4557aea 100644 --- a/README.md +++ b/README.md @@ -36,3 +36,4 @@ TODO: Utiliser ArduinoOTA pour gérer les mises à jours sans fil. TODO: Si le strip est démarré avant HA, HA n'arrive pas à trouver son état. Surement une question de persistance sur le topic -> Ceci est du au fait que lorsque l'on redémarre HA on redémarre aussi mosquitto. -> Au reconnect il faut donc réenvoyer son état actuel +TODO: passer sur mqtt_json : l'envoi de l'état ne prends qu'un appel tout comme la réception, bien plus rapide From d0833e7b088aeb518c793949b1e5606f0f5d9f44 Mon Sep 17 00:00:00 2001 From: Julien Cabillot Date: Thu, 20 Apr 2017 15:13:51 +0200 Subject: [PATCH 4/9] on bouge les vars dans le .h --- arduino/mqttfastledmenu/mqttfastledmenu.cpp | 33 +++++++------------ .../mqttfastledmenu/mqttfastledmenu.example.h | 14 ++++++++ 2 files changed, 26 insertions(+), 21 deletions(-) diff --git a/arduino/mqttfastledmenu/mqttfastledmenu.cpp b/arduino/mqttfastledmenu/mqttfastledmenu.cpp index 25dbb00..237d03b 100644 --- a/arduino/mqttfastledmenu/mqttfastledmenu.cpp +++ b/arduino/mqttfastledmenu/mqttfastledmenu.cpp @@ -9,22 +9,6 @@ #include "mqttfastledmenu.h" -// LED -int brightness = LED_BRIGHTNESS_DEFAULT; -int color = LED_COLOR_DEFAULT; -int speed = LED_SPEED_DEFAULT; -CRGB leds[LED_NUM]; -String ledEffect = LED_EFFECT_ERROR; -boolean ledState = false; - -// WIFI -WiFiClient espClient; - -// MQTT -char message_buff[100]; -PubSubClient client(espClient); - - void setup() { Serial.begin(SERIAL_SPEED); @@ -39,26 +23,33 @@ void setup() testConnectMQTT(); // LED + brightness = LED_BRIGHTNESS_DEFAULT; + color = LED_COLOR_DEFAULT; + speed = LED_SPEED_DEFAULT; + ledEffect = LED_EFFECT_ERROR; + ledState = false; + LEDS.addLeds(leds, LED_NUM).setCorrection(TypicalSMD5050); ledBlackAll(); FastLED.setBrightness(brightness); + + //////////////////////////////// ColorPalette /////////////////////////////// + currentPalette = RainbowColors_p; + currentBlending = LINEARBLEND; + //////////////////////////////// ColorPalette /////////////////////////////// Serial.println("Ready"); /* MQTT * Il est important de faire un loop avant toute chose, * afin de récupérer les valeurs provenant du broker mqtt * et pas démarrer avec de vieilles infos. + * Il faut un certains nombres de tentative pour tout récuperer. */ for (short int i = 0; i < 10; i++) { delay(200); client.loop(); } - //////////////////////////////// ColorPalette /////////////////////////////// - currentPalette = RainbowColors_p; - currentBlending = LINEARBLEND; - //////////////////////////////// ColorPalette /////////////////////////////// - Serial.println("End of setup"); } diff --git a/arduino/mqttfastledmenu/mqttfastledmenu.example.h b/arduino/mqttfastledmenu/mqttfastledmenu.example.h index 2ee2ea4..d7a1c03 100644 --- a/arduino/mqttfastledmenu/mqttfastledmenu.example.h +++ b/arduino/mqttfastledmenu/mqttfastledmenu.example.h @@ -4,6 +4,7 @@ #define LED_NUM 300 #define LED_PIN 5 // = D1 #define LED_CHIPSET WS2812B +// TODO: https://github.com/bruhautomation/ESP-MQTT-JSON-Digital-LEDs/blob/master/ESP_MQTT_Digital_LEDs/ESP_MQTT_Digital_LEDs.ino#L175 essayer BGR #define LED_COLOR_ORDER GRB #define LED_BRIGHTNESS_DEFAULT 96 #define LED_SPEED_DEFAULT 120 @@ -16,10 +17,19 @@ #define LED_EFFECT_FULLRED "full" #define LED_EFFECT_ERROR "error" +int brightness; +int color; +int speed; +CRGB leds[LED_NUM]; +String ledEffect; +boolean ledState; + // WIFI #define WIFI_SSID "XXX" #define WIFI_PASSWORD "XXX" +WiFiClient espClient; + // MQTT #define MQTT_SERVER "XXX" #define MQTT_PORT 1883 @@ -37,6 +47,10 @@ #define MQTT_LED_COLOR_COMMAND "strip1/color/switch" #define MQTT_LED_COLOR_STATE "strip1/color/status" +char message_buff[100]; +PubSubClient client(espClient); + + void setupWifi(); void testConnectMQTT(); void callbackMQTT(char* topic, byte* payload, unsigned int length); From bcf24560e997c211da4fab41a1b6d763039abfaf Mon Sep 17 00:00:00 2001 From: Julien Cabillot Date: Thu, 20 Apr 2017 16:49:23 +0200 Subject: [PATCH 5/9] ++todo erreur --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 4557aea..44f18aa 100644 --- a/README.md +++ b/README.md @@ -37,3 +37,4 @@ TODO: Si le strip est démarré avant HA, HA n'arrive pas à trouver son état. -> Ceci est du au fait que lorsque l'on redémarre HA on redémarre aussi mosquitto. -> Au reconnect il faut donc réenvoyer son état actuel TODO: passer sur mqtt_json : l'envoi de l'état ne prends qu'un appel tout comme la réception, bien plus rapide +TODO: firep => l'esp se mets en affichage error ?! From b5d3578c222aef4de6c5ea88ef772d743751144a Mon Sep 17 00:00:00 2001 From: Julien Cabillot Date: Thu, 20 Apr 2017 23:47:58 +0200 Subject: [PATCH 6/9] WIP --- arduino/mqttfastledmenu/mqttfastledmenu.cpp | 66 +++++++++---------- .../mqttfastledmenu/mqttfastledmenu.example.h | 5 ++ 2 files changed, 38 insertions(+), 33 deletions(-) diff --git a/arduino/mqttfastledmenu/mqttfastledmenu.cpp b/arduino/mqttfastledmenu/mqttfastledmenu.cpp index 237d03b..e61e667 100644 --- a/arduino/mqttfastledmenu/mqttfastledmenu.cpp +++ b/arduino/mqttfastledmenu/mqttfastledmenu.cpp @@ -17,11 +17,6 @@ void setup() // WIFI setupWifi(); - // MQTT - client.setServer(MQTT_SERVER, MQTT_PORT); - client.setCallback(callbackMQTT); - testConnectMQTT(); - // LED brightness = LED_BRIGHTNESS_DEFAULT; color = LED_COLOR_DEFAULT; @@ -29,6 +24,7 @@ void setup() ledEffect = LED_EFFECT_ERROR; ledState = false; + // LED LEDS.addLeds(leds, LED_NUM).setCorrection(TypicalSMD5050); ledBlackAll(); FastLED.setBrightness(brightness); @@ -37,6 +33,12 @@ void setup() currentPalette = RainbowColors_p; currentBlending = LINEARBLEND; //////////////////////////////// ColorPalette /////////////////////////////// + + // MQTT + client.setServer(MQTT_SERVER, MQTT_PORT); + client.setCallback(callbackMQTT); + testConnectMQTT(); + Serial.println("Ready"); /* MQTT @@ -76,17 +78,20 @@ void testConnectMQTT() while (!client.connected()) { Serial.print("Connexion au serveur MQTT... "); if (client.connect("ESP8266Client", MQTT_USER, MQTT_PASS)) { + Serial.print("OK\nSend Current State"); + mqttSendState(); + mqttSendSpeedState(); + mqttSendBrightnessState(); + mqttSendEffectState(); + mqttSendColorState(); + Serial.print("OK\nSubscribe"); client.subscribe(MQTT_LED_COMMAND); - mqttSendState(); client.subscribe(MQTT_LED_EFFECT_COMMAND); - //mqttSendEffectState(); client.subscribe(MQTT_LED_BRIGHTNESS_COMMAND); - mqttSendBrightnessState(); client.subscribe(MQTT_LED_SPEED_COMMAND); - //mqttSendSpeedState(); client.subscribe(MQTT_LED_COLOR_COMMAND); - //mqttSendColorState(); + Serial.println(" OK"); } else { Serial.print("KO, erreur : "); @@ -124,11 +129,11 @@ void callbackMQTT(char* topic, byte* payload, unsigned int length) // Si on ne repasse pas tout à noir, cela peut faire des effets surprenants ledBlackAll(); ledEffect = msgString; - client.publish(MQTT_LED_EFFECT_STATE, message_buff, true); + mqttSendEffectState(); } else if (stopic == MQTT_LED_BRIGHTNESS_COMMAND) { brightness = msgString.toInt(); FastLED.setBrightness(brightness); - client.publish(MQTT_LED_BRIGHTNESS_STATE, message_buff, true); + mqttSendBrightnessState(); } else if (stopic == MQTT_LED_COLOR_COMMAND) { // Sample : 134,168,255 int red = msgString.substring(0, msgString.indexOf(',')).toInt(); @@ -136,20 +141,16 @@ void callbackMQTT(char* topic, byte* payload, unsigned int length) int blue = msgString.substring(msgString.lastIndexOf(',') + 1).toInt(); color=((red <<16)|(green <<8)|blue); - client.publish(MQTT_LED_COLOR_STATE, message_buff, true); + mqttSendColorState(); } else if (stopic == MQTT_LED_SPEED_COMMAND) { speed = msgString.toInt(); - client.publish(MQTT_LED_SPEED_STATE, message_buff, true); + mqttSendSpeedState(); } } void mqttSendState() { - if (ledState) { - client.publish(MQTT_LED_STATE, "ON", true); - } else { - client.publish(MQTT_LED_STATE, "OFF", true); - } + client.publish(MQTT_LED_STATE, (ledState) ? "ON": "OFF", true); } void mqttSendEffectState() @@ -175,14 +176,13 @@ void mqttSendSpeedState() void mqttSendColorState() { - /* - int red = msgString.substring(0, msgString.indexOf(',')).toInt(); - int green = msgString.substring(msgString.indexOf(',') + 1, msgString.lastIndexOf(',')).toInt(); - int blue = msgString.substring(msgString.lastIndexOf(',') + 1).toInt(); - color=((red <<16)|(green <<8)|blue); - TODO: client.publish(MQTT_LED_COLOR_STATE, message_buff, true); - avec color - */ + int red = color>>16 & 0xFF; + int green = color>>8 & 0xFF; + int blue = color & 0xFF; + char buff[12]; + + sprintf(buff, "%i,%i,%i\0", red, green, blue); + client.publish(MQTT_LED_COLOR_STATE, buff, true); } // LED @@ -237,10 +237,10 @@ void ledCylon() } // Il faut nettoyer certaines cases avant la prochaine loop -if ((LED_NUM - 2) >= 0) { - leds[LED_NUM - 2] = color; - leds[LED_NUM - 2].fadeLightBy(220); - } + if ((LED_NUM - 2) >= 0) { + leds[LED_NUM - 2] = color; + leds[LED_NUM - 2].fadeLightBy(220); + } if ((LED_NUM - 1) >= 0 ) { leds[LED_NUM - 1] = CRGB::Black; } @@ -316,8 +316,8 @@ void ledFullColor() // 0.36787944 ?? censé correspondre au minimum // 108.4 ?? censé correspondre au maximum int breath = (exp(sin(millis() / 2000.0 * PI)) - 0.3678794) * 108.4; - Serial.print(breath); - Serial.println(" / 255"); + //Serial.print(breath); + //Serial.println(" / 255"); FastLED.setBrightness(breath); FastLED.delay(100 / speed); } diff --git a/arduino/mqttfastledmenu/mqttfastledmenu.example.h b/arduino/mqttfastledmenu/mqttfastledmenu.example.h index d7a1c03..3a8c5e4 100644 --- a/arduino/mqttfastledmenu/mqttfastledmenu.example.h +++ b/arduino/mqttfastledmenu/mqttfastledmenu.example.h @@ -54,6 +54,11 @@ PubSubClient client(espClient); void setupWifi(); void testConnectMQTT(); void callbackMQTT(char* topic, byte* payload, unsigned int length); +void mqttSendState(); +void mqttSendEffectState(); +void mqttSendBrightnessState(); +void mqttSendSpeedState(); +void mqttSendColorState(); void ledBlackAll(); void ledCylon(); void ledError(); From 9373f0a209ba3e729cd0ce2643636f39283605c7 Mon Sep 17 00:00:00 2001 From: Julien Cabillot Date: Fri, 21 Apr 2017 00:32:19 +0200 Subject: [PATCH 7/9] ++debug --- arduino/mqttfastledmenu/mqttfastledmenu.cpp | 33 ++++++++++++++++----- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/arduino/mqttfastledmenu/mqttfastledmenu.cpp b/arduino/mqttfastledmenu/mqttfastledmenu.cpp index e61e667..6077df5 100644 --- a/arduino/mqttfastledmenu/mqttfastledmenu.cpp +++ b/arduino/mqttfastledmenu/mqttfastledmenu.cpp @@ -181,7 +181,7 @@ void mqttSendColorState() int blue = color & 0xFF; char buff[12]; - sprintf(buff, "%i,%i,%i\0", red, green, blue); + sprintf(buff, "%i,%i,%i", red, green, blue); client.publish(MQTT_LED_COLOR_STATE, buff, true); } @@ -201,7 +201,7 @@ void ledBlackAll() */ void ledCylon() { - for(int i = 0; i < LED_NUM; i++) { + for (int i = 0; i < LED_NUM; i++) { client.loop(); if (ledEffect != LED_EFFECT_CYLON) { @@ -235,7 +235,7 @@ void ledCylon() FastLED.delay(1000 / speed); } - + Serial.print("\nNettoyage"); // Il faut nettoyer certaines cases avant la prochaine loop if ((LED_NUM - 2) >= 0) { leds[LED_NUM - 2] = color; @@ -245,44 +245,63 @@ void ledCylon() leds[LED_NUM - 1] = CRGB::Black; } FastLED.show(); + Serial.print(" ok\nRewind"); // led[0] et led[255] sont gérées par la loop précédante - for(int i = LED_NUM - 1; i >= 0; i--) { + for (int i = LED_NUM - 1; i >= 0; i--) { + Serial.print("\nLoop "); + Serial.println(i); client.loop(); - + Serial.print(" ok\nTestActif"); if (ledEffect != LED_EFFECT_CYLON) { return; } - + Serial.println(" ok"); if ((i - 1) >= 0) { + Serial.print("-1"); leds[i - 1] = color; leds[i - 1].fadeLightBy(249); + Serial.print(" ok\n"); } + Serial.print("0"); leds[i] = color; + Serial.println(" ok"); if ((i + 1) <= LED_NUM) { + Serial.print("+1"); leds[i + 1] = color; leds[i + 1].fadeLightBy(200); + Serial.print(" ok\n"); } + if ((i + 2) <= LED_NUM) { + Serial.print("+2"); leds[i + 2] = color; leds[i + 2].fadeLightBy(220); + Serial.print(" ok\n"); } + if ((i + 3) <= LED_NUM) { + Serial.print("+3"); leds[i + 3] = CRGB::Black; + Serial.print(" ok\n"); } - + Serial.print("Delay"); FastLED.delay(1000 / speed); + Serial.println(" ok"); } + Serial.print("Clean1"); // Il faut nettoyer certaines cases avant la prochaine loop if (1 <= LED_NUM) { leds[1] = color; leds[1].fadeLightBy(220); } + Serial.print(" ok\nClean2"); if (2 <= LED_NUM) { leds[2] = CRGB::Black; } + Serial.print(" ok\n"); FastLED.show(); } From d3cb5efddb4bbf00dd2a025bcf142729f764402e Mon Sep 17 00:00:00 2001 From: Julien Cabillot Date: Fri, 21 Apr 2017 00:50:28 +0200 Subject: [PATCH 8/9] =?UTF-8?q?cylon=20corrig=C3=A9=20:(?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- arduino/mqttfastledmenu/mqttfastledmenu.cpp | 46 +++++++++---------- .../mqttfastledmenu/mqttfastledmenu.example.h | 12 ----- 2 files changed, 21 insertions(+), 37 deletions(-) diff --git a/arduino/mqttfastledmenu/mqttfastledmenu.cpp b/arduino/mqttfastledmenu/mqttfastledmenu.cpp index 6077df5..dc2e2f5 100644 --- a/arduino/mqttfastledmenu/mqttfastledmenu.cpp +++ b/arduino/mqttfastledmenu/mqttfastledmenu.cpp @@ -9,6 +9,22 @@ #include "mqttfastledmenu.h" +// LED +// En déplaçant ces vars dans le .h + init dans le setup, cylon crash au moment du premier retour ?! +int brightness = LED_BRIGHTNESS_DEFAULT; +int color = LED_COLOR_DEFAULT; +int speed = LED_SPEED_DEFAULT; +CRGB leds[LED_NUM]; +String ledEffect = LED_EFFECT_ERROR; +boolean ledState = false; + +// WIFI +WiFiClient espClient; + +// MQTT +char message_buff[100]; +PubSubClient client(espClient); + void setup() { Serial.begin(SERIAL_SPEED); @@ -18,13 +34,14 @@ void setup() setupWifi(); // LED + /* brightness = LED_BRIGHTNESS_DEFAULT; color = LED_COLOR_DEFAULT; speed = LED_SPEED_DEFAULT; ledEffect = LED_EFFECT_ERROR; ledState = false; - - // LED + */ + LEDS.addLeds(leds, LED_NUM).setCorrection(TypicalSMD5050); ledBlackAll(); FastLED.setBrightness(brightness); @@ -235,7 +252,6 @@ void ledCylon() FastLED.delay(1000 / speed); } - Serial.print("\nNettoyage"); // Il faut nettoyer certaines cases avant la prochaine loop if ((LED_NUM - 2) >= 0) { leds[LED_NUM - 2] = color; @@ -245,63 +261,43 @@ void ledCylon() leds[LED_NUM - 1] = CRGB::Black; } FastLED.show(); - Serial.print(" ok\nRewind"); // led[0] et led[255] sont gérées par la loop précédante for (int i = LED_NUM - 1; i >= 0; i--) { - Serial.print("\nLoop "); - Serial.println(i); client.loop(); - Serial.print(" ok\nTestActif"); if (ledEffect != LED_EFFECT_CYLON) { return; } - Serial.println(" ok"); if ((i - 1) >= 0) { - Serial.print("-1"); leds[i - 1] = color; leds[i - 1].fadeLightBy(249); - Serial.print(" ok\n"); } - Serial.print("0"); leds[i] = color; - Serial.println(" ok"); if ((i + 1) <= LED_NUM) { - Serial.print("+1"); leds[i + 1] = color; leds[i + 1].fadeLightBy(200); - Serial.print(" ok\n"); } - + if ((i + 2) <= LED_NUM) { - Serial.print("+2"); leds[i + 2] = color; leds[i + 2].fadeLightBy(220); - Serial.print(" ok\n"); } - + if ((i + 3) <= LED_NUM) { - Serial.print("+3"); leds[i + 3] = CRGB::Black; - Serial.print(" ok\n"); } - Serial.print("Delay"); FastLED.delay(1000 / speed); - Serial.println(" ok"); } - Serial.print("Clean1"); // Il faut nettoyer certaines cases avant la prochaine loop if (1 <= LED_NUM) { leds[1] = color; leds[1].fadeLightBy(220); } - Serial.print(" ok\nClean2"); if (2 <= LED_NUM) { leds[2] = CRGB::Black; } - Serial.print(" ok\n"); FastLED.show(); } diff --git a/arduino/mqttfastledmenu/mqttfastledmenu.example.h b/arduino/mqttfastledmenu/mqttfastledmenu.example.h index 3a8c5e4..28dfc89 100644 --- a/arduino/mqttfastledmenu/mqttfastledmenu.example.h +++ b/arduino/mqttfastledmenu/mqttfastledmenu.example.h @@ -17,19 +17,10 @@ #define LED_EFFECT_FULLRED "full" #define LED_EFFECT_ERROR "error" -int brightness; -int color; -int speed; -CRGB leds[LED_NUM]; -String ledEffect; -boolean ledState; - // WIFI #define WIFI_SSID "XXX" #define WIFI_PASSWORD "XXX" -WiFiClient espClient; - // MQTT #define MQTT_SERVER "XXX" #define MQTT_PORT 1883 @@ -47,9 +38,6 @@ WiFiClient espClient; #define MQTT_LED_COLOR_COMMAND "strip1/color/switch" #define MQTT_LED_COLOR_STATE "strip1/color/status" -char message_buff[100]; -PubSubClient client(espClient); - void setupWifi(); void testConnectMQTT(); From d20e7c30418216e3e10ac37a21147ea0277452e6 Mon Sep 17 00:00:00 2001 From: Julien Cabillot Date: Fri, 21 Apr 2017 00:52:22 +0200 Subject: [PATCH 9/9] correction du on restart --- README.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/README.md b/README.md index 44f18aa..4176ffa 100644 --- a/README.md +++ b/README.md @@ -33,8 +33,5 @@ Le projet est actuellement fonctionnel. Il reste des tweaks à faire pour que les effets marchent comme je le désire mais ça fonctionne. TODO: changer le mqtt light par un mqtt_json, cela permettrais d'avoir un truc un peu "normal". Il existe de nombreux exemples sur le net pour esp qu'il devrait être très simple d'intégrer. TODO: Utiliser ArduinoOTA pour gérer les mises à jours sans fil. -TODO: Si le strip est démarré avant HA, HA n'arrive pas à trouver son état. Surement une question de persistance sur le topic --> Ceci est du au fait que lorsque l'on redémarre HA on redémarre aussi mosquitto. --> Au reconnect il faut donc réenvoyer son état actuel TODO: passer sur mqtt_json : l'envoi de l'état ne prends qu'un appel tout comme la réception, bien plus rapide TODO: firep => l'esp se mets en affichage error ?!