You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

main.cpp 6.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. // ---------------------------------------------------------------------------------------
  2. // Programme permettant :
  3. // - d'allumer/éteindre une barre de LEDS (branchée sur la PIN D1 ).
  4. // - de changer la couleur des LEDS.
  5. // - de modifier l'intensité des LEDS.
  6. // - de lancer une animation des LEDS.
  7. //
  8. // Le programme se branche en WIFI sur un broker MQTT et réagi au topics :
  9. // lumiere/<DeviceID> [ON|OFF] : Allumage de la barre de LEDS.
  10. // lumiere/color/<DeviceID> (R,V,B) : Changement de couleur des LEDS.
  11. // lumiere/animation/<DeviceID>[1/2/3/4/5/6] : Animation des LEDS.
  12. // ---------------------------------------------------------------------------------------
  13. #include <Arduino.h>
  14. #define ModeDebug
  15. // Pour une mise en prod, ne pas oublier de mettre writeToEEPROM = false
  16. const String firmwareActualVersion = "1.2.20";
  17. const boolean writeToEEPROM = false; // Si = true, écrit en EEPROM et affiche les traces de debug de wifimanager (default = false)
  18. #ifdef ModeDebug
  19. #define DEBUG(message) \
  20. Serial.print("[DEBUG:"); \
  21. Serial.print(__func__); \
  22. Serial.print("("); \
  23. Serial.print(__LINE__); \
  24. Serial.print(")]-> "); \
  25. Serial.println(message);
  26. #else
  27. #define DEBUG(message);
  28. #endif
  29. #include <ESP8266HTTPClient.h>
  30. #include <WiFiManager.h>
  31. WiFiManager wifiManager;
  32. // Define memory size we want to define (1 bytes / caract) for EPPROM storage
  33. #define EEPROM_LEDS_SIZE 3
  34. #define EEPROM_DEVICEID_SIZE 15
  35. // Customisation du nom du module ESP
  36. #define HOSTNAME "ESP8266-" // Pour la connection Wifi (doit être unique)
  37. char HostName[16];
  38. // Pour répondre au topic MQTT [portal|barreverticale]
  39. 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)
  40. // EEPROM ( pour stockage du nombre de leds )
  41. // ESP 2C:F4:32:77:3C:3B -> 125 leds (chemin de table)
  42. // ESP 2C:F4:32:77:5F:07 -> 64 leds (barre verticale)
  43. // ESP 2C:F4:32:77:31:8B -> 63 leds
  44. // ESP 30:83:98:82:6A:6F -> 10 leds (portal)
  45. // ESP 192.168.1.71 -> 50 leds (Sapin de noel)
  46. int LED_COUNT = 66; // N'est pris en compte que si writeToEEPROM = true (car sinon on lit la valeur provenant de l'EEPROM)
  47. #include "my_EEPROM.h"
  48. // LEDS
  49. boolean g_BOO_AnimationSeconde = true;
  50. #include "my_leds.h"
  51. // Définition d'une structure pouvant stocker le message provenant de MQTT
  52. #include "my_MQTT.h"
  53. // Over The Air
  54. #include "my_OTA.h"
  55. // ***************************************************************************************
  56. void setup() {
  57. #ifdef ModeDebug
  58. // initialisation de la liaison série (pour le moniteur) .........................
  59. Serial.begin(115200);
  60. delay(5000); // On attend que le port serie soit initialisé
  61. Serial.println();
  62. Serial.flush();
  63. #endif
  64. DEBUG("OK, let's go **********************************************************************");
  65. DEBUG("Version firmware :" + String( firmwareActualVersion ));
  66. // Lecture du nombre de leds dans l'EEPROM ........................................
  67. // si writeToEEPROM = true, on sauve la valeur lue dans la globale LED_COUNT
  68. EEPROM_Start();
  69. // initialisation de la liaison WIFI ..............................................
  70. /* Si la connexion échoue, on lance un Access Point (AP) qui est visible dans les réseaux WIFI
  71. Il faut alors se connecter avec un smarthpone sur l'AP pour configurer le Wifi, le NodeMCU
  72. reboot et se connect avec le SSID et mot de passe saisie.
  73. */
  74. snprintf(HostName, 16, HOSTNAME"%06X", (uint32_t)ESP.getChipId()); // Concaténation du HOSTNAME avec la fin de l'adresse MAC
  75. wifiManager.setDebugOutput(writeToEEPROM); // false ->Pour ne plus avoir le mot de passe WIFI qui s'affiche.
  76. wifiManager.autoConnect(HostName, "123456789");
  77. DEBUG("IP address: "); Serial.println(WiFi.localIP());
  78. DEBUG("HOSTNAME: "); Serial.println(HostName);
  79. // Connection Wifi pour l'OTA ....................................................
  80. OTA_setup();
  81. // Create a MQTT client ..........................................................
  82. MQTT_setup();
  83. // Initialisation des leds .....................................................
  84. strip.begin(); // INITIALIZE NeoPixel strip object
  85. strip.show(); // Turn OFF all pixels ASAP
  86. strip.setBrightness(BRIGHTNESS);
  87. LED_Animation(5);
  88. g_BOO_AnimationSeconde = true;
  89. DEBUG("************************** Tout est initialise");
  90. }
  91. // **********************************************************************************************************
  92. // **********************************************************************************************************
  93. unsigned long lastRecu = 0;
  94. int numled = 0;
  95. void loop() {
  96. // On écoute le serveur OTA
  97. // OTA_doUpdate();
  98. // Test si la connection Wifi existe toujours ...................................
  99. if (WiFi.status() != WL_CONNECTED) {
  100. // Si on est déconnecté on tente de se reconnecter automatiquement avec les anciens settings.
  101. wifiManager.autoConnect();
  102. }
  103. // Test si la connection MQTT est toujours valide ..............................
  104. if (!clientMQTT.connected()) {
  105. Serial.println("OUPS, on est plus connecté au server MQTT--------------------------");
  106. //MQTT_connect();
  107. // On reboot
  108. ESP.restart();
  109. }
  110. clientMQTT.loop();
  111. // Animation des LEDS toutes les secondes .........................................
  112. if (millis() - lastRecu > 1000 ) {
  113. lastRecu = millis();
  114. // Allumage d'une led
  115. if ( g_BOO_AnimationSeconde ) {
  116. if ( numled >= LED_COUNT /2 ) {
  117. LED_AllumeLedNum( numled -1, 0,0,0 ); // Noir
  118. LED_AllumeLedNum( LED_COUNT - numled, 0,0,0 ); // Noir
  119. LED_AllumeLedNum( numled -2, 0,0,0 ); // Noir
  120. LED_AllumeLedNum( LED_COUNT - numled +1, 0,0,0 ); // Noir
  121. numled = 0;
  122. }
  123. LED_AllumeLedNum( numled, 255,0,100 ); // Rouge
  124. LED_AllumeLedNum( LED_COUNT - numled -1, 255,0,100 ); // Rouge
  125. LED_AllumeLedNum( numled -1, 50,0,70 ); // Noir
  126. LED_AllumeLedNum( LED_COUNT - numled, 50,0,70 ); // Noir
  127. LED_AllumeLedNum( numled -2, 0,0,0 ); // Noir
  128. LED_AllumeLedNum( LED_COUNT - numled +1, 0,0,0 ); // Noir
  129. numled++;
  130. }
  131. }
  132. // Traitement des Messages MQTT ...................................................
  133. // Tout est fait dans MQTT_callback()
  134. }