Advertisement
Warin84

Volet connecté

Apr 9th, 2019
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Arduino 15.15 KB | None | 0 0
  1. /* Warin84 */
  2.  
  3. /* Youtube */
  4. /* https://www.youtube.com/channel/UCgO8rRzYeFysD-6TA9m7EUQ */
  5.  
  6. ////////////////////////////////////////
  7. // Pin relay (volet haut) = D5       //
  8. // Pin relay (volet bas) = D6       //
  9. // Volet Haut/Bas = V2             //
  10. // Volet On/Off = V3              //
  11. // LED volet = V8                //
  12. // Timer Volet semaine = V21    //
  13. // Timer Volet Week-end = V21  //
  14. ////////////////////////////////
  15.  
  16. //On défini les librairies utilisées
  17. #define BLYNK_PRINT Serial          // ajout défini le moniteur série BLYNK
  18. #include <ESP8266WiFi.h>            // ajout de la librairie ESP8266WIFI
  19. #include <ESP8266mDNS.h>            // ajout de la librairie ESP8266m
  20. #include <WiFiUdp.h>                // ajout de la librairie WifiUpdate
  21. #include <ArduinoOTA.h>             // ajout de la librairie OTA
  22. #include <BlynkSimpleEsp8266.h>     // ajout de la librairie BLYNK
  23. #include <WidgetRTC.h>              // ajout de la librairie Time WIdgetRTC
  24.  
  25. //On défini les couleurs
  26. #define BLYNK_GREEN     "#23C48E" .    // couleur vert
  27. #define BLYNK_BLUE      "#04C0F8"      // couleur bleu
  28. #define BLYNK_YELLOW    "#ED9D00"      // couleur orange
  29. #define BLYNK_RED       "#D3435C"      // couleur rouge
  30. #define BLYNK_DARK_BLUE "#5F7CD8"      // couleur bleu foncé
  31.  
  32. char auth[] = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXX";   // on récupére le "Auth Token" à partir de l'application BLYNK
  33.  
  34. // On saisit les informations afin de se connecter au WIFI
  35. char ssid[] = "XXXXXXXXXXXXXX";      // Nom du réseau Wifi
  36. char pass[] = "XXXXXXXXXXXXXX";           // Mot de passe du réseau Wifi
  37.  
  38.  
  39. // Variable du volet
  40. int voletbh;                // Etat Haut/Bas
  41. int etatvolet;              // Etat On/Off
  42. int tempsvolet = 20000;     // Temps de montée et descente du volet
  43.  
  44. // Variable temps
  45. long starttime;         // start time in seconds
  46. long stoptime;          // stop  time in seconds
  47. long timenow;           // time now in seconds
  48.  
  49. //Variable temps initiale pour le volet
  50. unsigned long previousmillis = 0;       // Timer Bas
  51. unsigned long previousmillis2 = 0;      // Timer Haut
  52.  
  53. int automanuel;     //Etat du bouton automatique/manuel
  54.  
  55. //on initialise le timer BLYNK
  56. BlynkTimer timer;   // Timer "void"
  57.  
  58. // On initialise les Widget
  59. WidgetLED led2(V8);           // LED Volet
  60. WidgetRTC rtc;                // Temps (heure du serveur)
  61.  
  62. // On synchronise les timers (lampe = V22 et volet = V21) et les boutons (lampe = V4, voletbh = V2 et etatvolet = V3)
  63. void timeinput()
  64. {
  65.   Blynk.syncVirtual(V2, V3, V20, V21,V22);
  66. }
  67.  
  68. void volet()
  69. {
  70.  
  71.   if (voletbh == 0 && etatvolet == 0) {                     // Si le volet est sur Bas mais aussi sur off
  72.     previousmillis=millis();                                            // On reinitialise le timer Bas
  73.     previousmillis2=millis();                                           // On reinitialise le timer Haut
  74.     digitalWrite(D6, HIGH);                                             // On éteint le relay du volet pour l'état Bas
  75.     digitalWrite(D5, HIGH);                                             // On éteint le relay du volet pour l'état Haut
  76.     led2.off();                                                         // On éteint la LED du volet
  77.   }
  78.   else if (voletbh == 1 && etatvolet == 0) {                // Si le volet est sur Haut mais aussi sur off
  79.     previousmillis=millis();                                            // On reinitialise le timer Bas
  80.     previousmillis2=millis();                                           // On reinitialise le timer Haut
  81.     digitalWrite(D6, HIGH);                                             // On éteint le relay du volet pour l'état Bas
  82.     digitalWrite(D5, HIGH);                                             // On éteint le relay du volet pour l'état Haut
  83.     led2.off();                                                         // On éteint la LED du volet
  84.   }
  85.   else if (voletbh == 0 && etatvolet == 1) {                // Si le volet est sur Bas mais aussi sur on
  86.     unsigned long currentmillis = millis();                       // On démarre le timer de réinitialisation
  87.     if (currentmillis - previousmillis >= tempsvolet){                 // Si le bouton est allumé depuis 40 secondes
  88.       previousmillis=millis();                                          // On reinitialise le timer Bas
  89.       previousmillis2=millis();                                         // On reinitialise le timer Haut
  90.       Blynk.virtualWrite(V3, 0);                                        // On met le volet sur la position off
  91.       delay(500);                                                       // On patiente une-demi seconde
  92.       Blynk.virtualWrite(V2, 1);                                        // On met le volet à l'état Haut
  93.     }
  94.     else{                                                         // Si le bouton est allumé depuis moins de 40 secondes
  95.     previousmillis2=millis();                                           // On reinitialise le timer Haut uniquement
  96.     led2.setColor(BLYNK_BLUE);                                          // On définni la LED du volet sur la couleur Bleu
  97.     led2.on();                                                          // On allume la LED du volet
  98.     digitalWrite(D5, HIGH);                                             // On éteint le relay du volet à l'état Haut
  99.     delay(500);                                                         // On patiente une demi-seconde (IMPORTANT POUR NE PAS CASSER LE MOTEUR DU VOLET)
  100.     digitalWrite(D6, LOW);                                              // On allume le relay du volet à l'état Bas
  101.     }
  102.   }
  103.   else if (voletbh == 1 && etatvolet == 1) {                // Si le volet est sur Haut mais aussi sur on
  104.     unsigned long currentmillis = millis();                       // On démarre le timer de réinitialisation
  105.     if (currentmillis - previousmillis2 >= tempsvolet){                // Si le bouton est allumé depuis 40 secondes
  106.       Blynk.virtualWrite(V3, 0);                                        // On met le volet sur la position off
  107.       delay(500);                                                       // On patiente une-demi seconde
  108.       Blynk.virtualWrite(V2, 0);                                        // On met le volet à l'état Haut
  109.     }
  110.     else {                                                        // Si le bouton est allumé depuis moins de 40 secondes
  111.     previousmillis=millis();                                            // On reinitialise le timer Bas uniquement
  112.     led2.setColor(BLYNK_YELLOW);                                        // On définni la LED du volet sur la couleur Orange
  113.     led2.on();                                                          // On allume la LED du volet  
  114.     digitalWrite(D6, HIGH);                                             // On éteint le relay du volet à l'état Bas
  115.     delay(500);                                                         // On patiente une demi-seconde (IMPORTANT POUR NE PAS CASSER LE MOTEUR DU VOLET)
  116.     digitalWrite(D5, LOW);                                              // On allume le relay du volet à l'état Haut
  117.     }
  118.   }
  119.   else {}                                                   // Si le volet est sur utre chose que Haut/Bas mais aussi sur autre chose que on/off, ne rien faire
  120. }
  121.  
  122. //On lit le bouton virtuel
  123. BLYNK_WRITE(V2)                  // Etat Haut/Bas du volet        
  124. {
  125.   voletbh = param.asInt();       // On stock la valeur dans la variable voletbh
  126. }
  127.  
  128. //On lit le bouton virtuel
  129. BLYNK_WRITE(V3)                  // Etat on/off du volet
  130. {
  131.   etatvolet = param.asInt();     // On stock la valeur dans la variable etatvolet
  132. }
  133.  
  134. //On relie le bouton virtuel V4 avec le relay de la Lampe (pin D6 bridge 1)
  135. BLYNK_WRITE(V20)
  136. {
  137.   automanuel = param.asInt();    //On stock l'état du bouton dans la variable automanuel
  138. }
  139.  
  140. //On lit le bouton virtuel
  141. BLYNK_WRITE(V21)                                              // Timpe Input Widget
  142. {
  143.   TimeInputParam t(param);                                                     // Le temps est stocké dans la variable t
  144.  
  145. if (automanuel == 1){
  146.  
  147.   int dayadjustment = -1;                                                      // On fait un ajustement de -1 jour
  148.     if(weekday() == 1){
  149.     dayadjustment =  6;                                                        // On en a besoin car Dimanche est le jour 1 pour la library TimeLib mais c'est le jour 7 pour la librairy BLYNK
  150.     }
  151.    
  152.     if(t.isWeekdaySelected(weekday() + dayadjustment)){                        // Si aujourd'hui est un jour sélectionné sur le widget Time Input
  153.         timenow = ((hour() * 3600) + (minute() * 60) + second());                         // On récupère l'heure du jour
  154.         starttime = (t.getStartHour() * 3600) + (t.getStartMinute() * 60);                // On récupère l'heure de départ du timer
  155.  
  156.         if(timenow >= starttime){                                                         // Si l'heure actuelle correspond à l'heure de départ du timer
  157.             if(timenow <= starttime + 10){                                                          // Si l'heure actuelle est comprise entre "l'heure de départ du Timer" et "l'heure de départ du timer + 10 secondes"
  158.                 Blynk.virtualWrite(V2, 1);                                                                    // On met le volet en position Haut
  159.                 Blynk.virtualWrite(V3, 1);                                                                    // On met le volet en position ON
  160.             }
  161.         }
  162.         else{}
  163.    
  164.         stoptime = (t.getStopHour() * 3600) + (t.getStopMinute() * 60);                   // On récupère l'heure d'arrivée du timer
  165.    
  166.         if(timenow >= stoptime){                                                          // Si l'heure actuelle correspond à l'heure d'arrivée du timer
  167.             if(timenow <= stoptime + 10){                                                           // Si l'heure actuelle est comprise entre "l'heure de départ du Timer" et "l'heure de départ du timer + 10 secondes"
  168.                 Blynk.virtualWrite(V2, 0);                                                                    // On met le volet en position Bas
  169.                 Blynk.virtualWrite(V3, 1);                                                                    // On met le volet en position ON
  170.             }              
  171.         }
  172.         else{}
  173.    }
  174.  }
  175.  }
  176.  
  177. //On lit le bouton virtuel
  178. BLYNK_WRITE(V22)                                              // Timpe Input Widget
  179. {
  180.   TimeInputParam t(param);                                                     // Le temps est stocké dans la variable t
  181.  
  182. if (automanuel == 1){
  183.  
  184.   int dayadjustment = -1;                                                      // On fait un ajustement de -1 jour
  185.     if(weekday() == 1){
  186.     dayadjustment =  6;                                                        // On en a besoin car Dimanche est le jour 1 pour la library TimeLib mais c'est le jour 7 pour la librairy BLYNK
  187.     }
  188.    
  189.     if(t.isWeekdaySelected(weekday() + dayadjustment)){                        // Si aujourd'hui est un jour sélectionné sur le widget Time Input
  190.         timenow = ((hour() * 3600) + (minute() * 60) + second());                         // On récupère l'heure du jour
  191.         starttime = (t.getStartHour() * 3600) + (t.getStartMinute() * 60);                // On récupère l'heure de départ du timer
  192.  
  193.         if(timenow >= starttime){                                                         // Si l'heure actuelle correspond à l'heure de départ du timer
  194.             if(timenow <= starttime + 10){                                                          // Si l'heure actuelle est comprise entre "l'heure de départ du Timer" et "l'heure de départ du timer + 10 secondes"
  195.                 Blynk.virtualWrite(V2, 1);                                                                    // On met le volet en position Haut
  196.                 Blynk.virtualWrite(V3, 1);                                                                    // On met le volet en position ON
  197.             }
  198.         }
  199.         else{}
  200.    
  201.         stoptime = (t.getStopHour() * 3600) + (t.getStopMinute() * 60);                   // On récupère l'heure d'arrivée du timer
  202.    
  203.         if(timenow >= stoptime){                                                          // Si l'heure actuelle correspond à l'heure d'arrivée du timer
  204.             if(timenow <= stoptime + 10){                                                           // Si l'heure actuelle est comprise entre "l'heure de départ du Timer" et "l'heure de départ du timer + 10 secondes"
  205.                 Blynk.virtualWrite(V2, 0);                                                                    // On met le volet en position Bas
  206.                 Blynk.virtualWrite(V3, 1);                                                                    // On met le volet en position ON
  207.             }              
  208.         }
  209.         else{}
  210.    }
  211.  }
  212.  }
  213.  
  214. // BLYNK Connexionn
  215. BLYNK_CONNECTED()                                               // Quand Blynk se connecte
  216. {  
  217.   Blynk.syncVirtual(V2, V3, V8, V20, V21, V22);              // On synchronise les boutons, les LEDs et les timers
  218. }
  219.  
  220. //On initialise l'appareil
  221. void setup()                                                          // Configuration
  222. {
  223.   pinMode(D6, OUTPUT);                                                // On définit la commande du relay volet bas en sortie
  224.   pinMode(D5, OUTPUT);                                                // On définit la commande du relay volet haut en sortie                      
  225.   digitalWrite(D6, HIGH);                                             // On définit le premier état du relay volet bas à l'état Bas
  226.   digitalWrite(D5, HIGH);                                             // On définit le premier état du relay volet haut à l'état Bas
  227.   delay(1000);                                                        // On patiente 1 seconde
  228.   Serial.begin(9600);                                                 // On allume le moniteur série
  229.   Blynk.begin(auth, ssid, pass);                                      // On se connect à BLYNK à travers notre WIFI et le serveur
  230.   rtc.begin();                                                        // On démarre l'horloge
  231.   WiFi.begin(ssid, pass);                                             // On se connecte au Wifi
  232.   ArduinoOTA.setHostname("Volet");                                    // On défini le nom de l'appareil
  233.   ArduinoOTA.setPassword("XXXXXXXXXXXX");                             // On défini son mot de passe
  234.   ArduinoOTA.begin();                                                 // On initialise l'OTA
  235.  
  236.   timer.setInterval(1000L, volet);                                    //On définit le temps de répétition de la boucle de commande du volet à 1 seconde
  237.   timer.setInterval(1000L, timeinput);                                //On définit le temps de répétition de la boucle TimeInput à 1 seconde
  238. }
  239.  
  240. //La boucle se répète indéfiniment
  241. void loop()                  // Boucle infini
  242. {
  243.   ArduinoOTA.handle();       // On cherche une Mise à Jour en OTA
  244.   Blynk.run();               // On démarre BLYNK
  245.   timer.run();               // On démarre le timer
  246. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement