diff --git a/.gitignore b/.gitignore index b678c9b..cbe8278 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ lib/* .piolibdeps .clang_complete .gcc-flags.json +platformio.ini diff --git a/README.md b/README.md index 812f4bd..cc52dd3 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ Avancement ========== 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: 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: passer sur mqtt_json : l'envoi de l'état ne prends qu'un appel tout comme la réception, bien plus rapide TODO: gitlab-ci : on peut checker la syntax en lancant un docker home-assistant !!! +TODO: utiliser https://home-assistant.io/docs/configuration/secrets/ diff --git a/arduino/mqttfastledmenu/mqttfastledmenu.cpp b/arduino/mqttfastledmenu/mqttfastledmenu.cpp index 003e596..4a878aa 100644 --- a/arduino/mqttfastledmenu/mqttfastledmenu.cpp +++ b/arduino/mqttfastledmenu/mqttfastledmenu.cpp @@ -1,12 +1,25 @@ #include +// LED // TODO : essayer, devrait limiter le flikering //#define FASTLED_ALLOW_INTERRUPTS 0 #define FASTLED_ESP8266_NODEMCU_PIN_ORDER #include + +// WIFI #include + +// MQTT #include +// OTA +#include +#include +#include + +// RemoteDebug +#include + #include "mqttfastledmenu.h" // LED @@ -33,6 +46,12 @@ void setup() // WIFI setupWifi(); + // OTA + setupOTA(); + + // RemoteDebug + Debug.begin("chamber"); + // LED /* brightness = LED_BRIGHTNESS_DEFAULT; @@ -56,7 +75,7 @@ void setup() client.setCallback(callbackMQTT); testConnectMQTT(); - Serial.println("Ready"); + Debug.println("Ready"); /* MQTT * Il est important de faire un loop avant toute chose, @@ -69,7 +88,47 @@ void setup() client.loop(); } - Serial.println("End of setup"); + Debug.println("End of setup"); +} + +// OTA +void setupOTA() +{ + ArduinoOTA.setHostname("mqttfastledmenu"); // on donne une petit nom a notre module + ArduinoOTA.setPassword(OTA_PASSWORD); + ArduinoOTA.onStart([]() { + Debug.println("OTA Starting"); + Serial.println("OTA Starting"); + }); + ArduinoOTA.onEnd([]() { + Debug.println("\nOTA End"); + Serial.println("\nOTA End"); + }); + ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) { + Debug.printf("OTA Progress: %u%%\r", (progress / (total / 100))); + Serial.printf("OTA Progress: %u%%\r", (progress / (total / 100))); + }); + ArduinoOTA.onError([](ota_error_t error) { + Serial.printf("OTA Error[%u]: ", error); + Debug.printf("OTA Error[%u]: ", error); + if (error == OTA_AUTH_ERROR) { + Serial.println("Auth Failed"); + Debug.println("Auth Failed"); + } else if (error == OTA_BEGIN_ERROR) { + Serial.println("Begin Failed"); + Debug.println("Begin Failed"); + } else if (error == OTA_CONNECT_ERROR) { + Serial.println("Connect Failed"); + Debug.println("Connect Failed"); + } else if (error == OTA_RECEIVE_ERROR) { + Serial.println("Receive Failed"); + Debug.println("Receive Failed"); + } else if (error == OTA_END_ERROR) { + Serial.println("End Failed"); + Debug.println("End Failed"); + } + }); + ArduinoOTA.begin(); } // WIFI @@ -93,27 +152,27 @@ void setupWifi() void testConnectMQTT() { while (!client.connected()) { - Serial.print("Connexion au serveur MQTT... "); + Debug.print("Connexion au serveur MQTT... "); if (client.connect("ESP8266Client", MQTT_USER, MQTT_PASS)) { - Serial.print("OK\nSend Current State"); + Debug.print("OK\nSend Current State"); mqttSendState(); mqttSendSpeedState(); mqttSendBrightnessState(); mqttSendEffectState(); mqttSendColorState(); - Serial.print("OK\nSubscribe"); + Debug.print("OK\nSubscribe"); client.subscribe(MQTT_LED_COMMAND); client.subscribe(MQTT_LED_EFFECT_COMMAND); client.subscribe(MQTT_LED_BRIGHTNESS_COMMAND); client.subscribe(MQTT_LED_SPEED_COMMAND); client.subscribe(MQTT_LED_COLOR_COMMAND); - Serial.println(" OK"); + Debug.println(" OK"); } else { - Serial.print("KO, erreur : "); - Serial.print(client.state()); - Serial.println(", on attend 5 secondes avant de recommencer"); + Debug.print("KO, erreur : "); + Debug.print(client.state()); + Debug.println(", on attend 5 secondes avant de recommencer"); delay(5000); } } @@ -131,8 +190,8 @@ void callbackMQTT(char* topic, byte* payload, unsigned int length) message_buff[i] = '\0'; String msgString = String(message_buff); - Serial.print("Received [" + stopic + "] : "); - Serial.println(msgString); + Debug.print("Received [" + stopic + "] : "); + Debug.println(msgString); if (stopic == MQTT_LED_COMMAND) { if (msgString == "ON") { @@ -322,7 +381,7 @@ void ledError() * Pour éviter un éclairage basique, on applique un breath qui permet * de faire respirer la couleur (brightness). */ -void ledFullColor() +void ledBreathing() { // Source : http://sean.voisen.org/blog/2011/10/breathing-led-with-arduino/ @@ -332,7 +391,7 @@ void ledFullColor() // J'ai essayé de mapper breath sur 3;brightness pour ne pas eteindre les leds, // mais l'effet est plus saccadé - + fill_solid(leds, LED_NUM, color); FastLED.setBrightness(breath); FastLED.show(); @@ -508,6 +567,12 @@ void fire() //////////////////////// FastLED-3.1.5/examples/Fire202 /////////////////////// void loop() { + // OTA + ArduinoOTA.handle(); + + // RemoteDebug + Debug.handle(); + // MQTT testConnectMQTT(); client.loop(); @@ -518,9 +583,8 @@ void loop() { } else { if (ledEffect == LED_EFFECT_CYLON) { ledCylon(); - } else if (ledEffect == LED_EFFECT_FULLRED) { - //TODO : degager ce nom : LED_EFFECT_FULLRED - ledFullColor(); + } else if (ledEffect == LED_EFFECT_BREATHING) { + ledBreathing(); } else if (ledEffect == LED_EFFECT_COLORPATTERN) { ledColorPattern(); } else if (ledEffect == LED_EFFECT_COLORTEMP) { diff --git a/arduino/mqttfastledmenu/mqttfastledmenu.example.h b/arduino/mqttfastledmenu/mqttfastledmenu.example.h index 8d2e88a..a272f17 100644 --- a/arduino/mqttfastledmenu/mqttfastledmenu.example.h +++ b/arduino/mqttfastledmenu/mqttfastledmenu.example.h @@ -1,8 +1,14 @@ #define SERIAL_SPEED 115200 +// OTA +#define OTA_PASSWORD "n87z21Tx5%P%EX&*" + +// DebugRemote +RemoteDebug Debug; + // LED #define LED_NUM 300 -#define LED_PIN 5 // = D1 +#define LED_PIN 5 // = D5 #define LED_CHIPSET WS2812B #define LED_COLOR_ORDER GRB #define LED_BRIGHTNESS_DEFAULT 96 @@ -13,7 +19,7 @@ #define LED_EFFECT_COLORPATTERN "colorp" #define LED_EFFECT_COLORTEMP "colort" #define LED_EFFECT_FIRE "fire" -#define LED_EFFECT_FULLRED "full" +#define LED_EFFECT_BREATHING "breathing" #define LED_EFFECT_ERROR "error" // WIFI @@ -38,6 +44,7 @@ #define MQTT_LED_COLOR_STATE "strip1/color/status" +void setupOTA(); void setupWifi(); void testConnectMQTT(); void callbackMQTT(char* topic, byte* payload, unsigned int length); @@ -49,7 +56,7 @@ void mqttSendColorState(); void ledBlackAll(); void ledCylon(); void ledError(); -void ledFullColor(); +void ledBreathing(); ///////////////////////////////// ColorPalette // This example shows several ways to set up and use 'palettes' of colors // with FastLED. diff --git a/home-assistant/conf_light.d/strip1.yaml b/home-assistant/conf_light.d/strip1.yaml index 46d64d8..1f29927 100644 --- a/home-assistant/conf_light.d/strip1.yaml +++ b/home-assistant/conf_light.d/strip1.yaml @@ -7,7 +7,7 @@ - "colorp" - "colort" - "fire" - - "full" + - "breathing" - "error" command_topic: "strip1/switch" state_topic: "strip1/status" diff --git a/platformio.ini b/platformio.example.in similarity index 91% rename from platformio.ini rename to platformio.example.in index 427912b..faf87b5 100644 --- a/platformio.ini +++ b/platformio.example.in @@ -12,6 +12,8 @@ platform=espressif8266 board=nodemcuv2 framework=arduino +upload_port= +upload_flags=--auth="" [platformio] src_dir=arduino/mqttfastledmenu