123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- // ---------------------------------------------------------------------------------------
- // Programme permettant :
- // - d'allumer/éteindre une barre de LEDS (branchée sur la PIN D1 ).
- // - de changer la couleur des LEDS.
- // - de modifier l'intensité des LEDS.
- // - de lancer une animation des LEDS.
- //
- // Le programme se branche en WIFI sur un broker MQTT et réagi au topics :
- // lumiere/<DeviceID> [ON|OFF] : Allumage de la barre de LEDS.
- // lumiere/color/<DeviceID> (R,V,B) : Changement de couleur des LEDS.
- // lumiere/animation/<DeviceID>[1/2/3/4/5/6] : Animation des LEDS.
- // ---------------------------------------------------------------------------------------
- #include <Arduino.h>
- #define ModeDebug
-
- // Pour une mise en prod, ne pas oublier de mettre writeToEEPROM = false
- const String firmwareActualVersion = "1.2.20";
- const boolean writeToEEPROM = false; // Si = true, écrit en EEPROM et affiche les traces de debug de wifimanager (default = false)
-
- #ifdef ModeDebug
- #define DEBUG(message) \
- Serial.print("[DEBUG:"); \
- Serial.print(__func__); \
- Serial.print("("); \
- Serial.print(__LINE__); \
- Serial.print(")]-> "); \
- Serial.println(message);
- #else
- #define DEBUG(message);
- #endif
-
-
- #include <ESP8266HTTPClient.h>
- #include <WiFiManager.h>
- WiFiManager wifiManager;
-
- // Define memory size we want to define (1 bytes / caract) for EPPROM storage
- #define EEPROM_LEDS_SIZE 3
- #define EEPROM_DEVICEID_SIZE 15
-
-
- // Customisation du nom du module ESP
- #define HOSTNAME "ESP8266-" // Pour la connection Wifi (doit être unique)
- char HostName[16];
-
- // Pour répondre au topic MQTT [portal|barreverticale]
- char DeviceID[EEPROM_DEVICEID_SIZE] = "portal"; // N'est pris en compte que si writeToEEPROM = true (car sinon on lit la valeur provenant de l'EEPROM)
-
-
-
- // EEPROM ( pour stockage du nombre de leds )
- // ESP 2C:F4:32:77:3C:3B -> 125 leds (chemin de table)
- // ESP 2C:F4:32:77:5F:07 -> 64 leds (barre verticale)
- // ESP 2C:F4:32:77:31:8B -> 63 leds
- // ESP 30:83:98:82:6A:6F -> 10 leds (portal)
- // ESP 192.168.1.71 -> 50 leds (Sapin de noel)
- int LED_COUNT = 66; // N'est pris en compte que si writeToEEPROM = true (car sinon on lit la valeur provenant de l'EEPROM)
- #include "my_EEPROM.h"
-
-
- // LEDS
- boolean g_BOO_AnimationSeconde = true;
- #include "my_leds.h"
-
-
- // Définition d'une structure pouvant stocker le message provenant de MQTT
- #include "my_MQTT.h"
-
-
- // Over The Air
- #include "my_OTA.h"
-
-
-
-
-
-
-
-
-
- // ***************************************************************************************
- void setup() {
- #ifdef ModeDebug
- // initialisation de la liaison série (pour le moniteur) .........................
- Serial.begin(115200);
- delay(5000); // On attend que le port serie soit initialisé
- Serial.println();
- Serial.flush();
- #endif
-
- DEBUG("OK, let's go **********************************************************************");
- DEBUG("Version firmware :" + String( firmwareActualVersion ));
-
-
- // Lecture du nombre de leds dans l'EEPROM ........................................
- // si writeToEEPROM = true, on sauve la valeur lue dans la globale LED_COUNT
- EEPROM_Start();
-
-
- // initialisation de la liaison WIFI ..............................................
- /* Si la connexion échoue, on lance un Access Point (AP) qui est visible dans les réseaux WIFI
- Il faut alors se connecter avec un smarthpone sur l'AP pour configurer le Wifi, le NodeMCU
- reboot et se connect avec le SSID et mot de passe saisie.
- */
- snprintf(HostName, 16, HOSTNAME"%06X", (uint32_t)ESP.getChipId()); // Concaténation du HOSTNAME avec la fin de l'adresse MAC
- wifiManager.setDebugOutput(writeToEEPROM); // false ->Pour ne plus avoir le mot de passe WIFI qui s'affiche.
- wifiManager.autoConnect(HostName, "123456789");
- DEBUG("IP address: "); Serial.println(WiFi.localIP());
- DEBUG("HOSTNAME: "); Serial.println(HostName);
-
-
- // Connection Wifi pour l'OTA ....................................................
- OTA_setup();
-
-
- // Create a MQTT client ..........................................................
- MQTT_setup();
-
-
- // Initialisation des leds .....................................................
- strip.begin(); // INITIALIZE NeoPixel strip object
- strip.show(); // Turn OFF all pixels ASAP
- strip.setBrightness(BRIGHTNESS);
- LED_Animation(5);
- g_BOO_AnimationSeconde = true;
-
- DEBUG("************************** Tout est initialise");
- }
-
-
-
-
-
-
-
- // **********************************************************************************************************
- // **********************************************************************************************************
- unsigned long lastRecu = 0;
- int numled = 0;
- void loop() {
- // On écoute le serveur OTA
- // OTA_doUpdate();
-
-
- // Test si la connection Wifi existe toujours ...................................
- if (WiFi.status() != WL_CONNECTED) {
- // Si on est déconnecté on tente de se reconnecter automatiquement avec les anciens settings.
- wifiManager.autoConnect();
- }
-
-
-
- // Test si la connection MQTT est toujours valide ..............................
- if (!clientMQTT.connected()) {
- Serial.println("OUPS, on est plus connecté au server MQTT--------------------------");
-
- //MQTT_connect();
-
- // On reboot
- ESP.restart();
- }
- clientMQTT.loop();
-
-
-
-
- // Animation des LEDS toutes les secondes .........................................
- if (millis() - lastRecu > 1000 ) {
- lastRecu = millis();
-
- // Allumage d'une led
- if ( g_BOO_AnimationSeconde ) {
- if ( numled >= LED_COUNT /2 ) {
- LED_AllumeLedNum( numled -1, 0,0,0 ); // Noir
- LED_AllumeLedNum( LED_COUNT - numled, 0,0,0 ); // Noir
- LED_AllumeLedNum( numled -2, 0,0,0 ); // Noir
- LED_AllumeLedNum( LED_COUNT - numled +1, 0,0,0 ); // Noir
- numled = 0;
- }
- LED_AllumeLedNum( numled, 255,0,100 ); // Rouge
- LED_AllumeLedNum( LED_COUNT - numled -1, 255,0,100 ); // Rouge
-
- LED_AllumeLedNum( numled -1, 50,0,70 ); // Noir
- LED_AllumeLedNum( LED_COUNT - numled, 50,0,70 ); // Noir
-
- LED_AllumeLedNum( numled -2, 0,0,0 ); // Noir
- LED_AllumeLedNum( LED_COUNT - numled +1, 0,0,0 ); // Noir
-
- numled++;
- }
- }
-
-
-
- // Traitement des Messages MQTT ...................................................
- // Tout est fait dans MQTT_callback()
- }
|