Advertisement
Warin84

Thermostat BLYNK

Apr 6th, 2019
959
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Arduino 14.04 KB | None | 0 0
  1. /* Warin84 */
  2.  
  3. /* Youtube */
  4. /* https://www.youtube.com/channel/UCgO8rRzYeFysD-6TA9m7EUQ */
  5.  
  6. ///////////////////////////////////////////
  7. // Slider mode de fonctionement = V9    //
  8. // Mode automatique/manuel = V20       //
  9. // Pin SHT21 SDA = D3  SCL = D4       //
  10. // Pin relay chaudière = D6          //
  11. // Température = V6                 //
  12. // Humidité = V5                   //
  13. // Consigne de jour = V15         //
  14. // Consigne de nuit = V16        //
  15. // LED chaudière = V7           //
  16. // Timer semaine = V21         //
  17. // Timer week-end = V22       //
  18. ///////////////////////////////
  19.  
  20. //On défini les librairies utilisées
  21. #define BLYNK_PRINT Serial          // ajout défini le moniteur série BLYNK
  22. #include <ESP8266WiFi.h>            // ajout de la librairie ESP8266WIFI
  23. #include <ESP8266mDNS.h>            // ajout de la librairie ESP8266m
  24. #include <WiFiUdp.h>                // ajout de la librairie WifiUpdate
  25. #include <ArduinoOTA.h>             // ajout de la librairie OTA
  26. #include <BlynkSimpleEsp8266.h>     // ajout de la librairie BLYNK
  27. #include <Wire.h>                   // ajout de la librairie de gestion I2C
  28. #include <sht21.h>                  // ajout de la librairie de gestion du capteur SHT21
  29. #include <WidgetRTC.h>              // ajout de la librairie Time WIdgetRTC
  30.  
  31. //On défini les couleurs
  32. #define BLYNK_GREEN     "#23C48E"      // couleur vert
  33. #define BLYNK_BLUE      "#04C0F8"      // couleur bleu
  34. #define BLYNK_YELLOW    "#ED9D00"      // couleur orange
  35. #define BLYNK_RED       "#D3435C"      // couleur rouge
  36. #define BLYNK_DARK_BLUE "#5F7CD8"      // couleur bleu foncé
  37.  
  38.  
  39. char auth[] = "XXXXXXXXXXXXXXXXXXXXXXXXXX";     // on récupére le "Auth Token" à partir de l'application BLYNK
  40.  
  41. // On saisit les informations de connexion pour se connecter en WIFI
  42. char ssid[] = "XXXXXXXXXXXX";      // Nom du réseau Wifi
  43. char pass[] = "XXXXXXXXXXXX";           // Mot de passe du réseau Wifi
  44.  
  45. // Variable mode fonctionnement
  46. float xnuit ;       //On initialise la valeur de consigne de nuit
  47. float xjour;        //On initialise la valeur de consigne de jour
  48. int etat;           //On initialise la fonction d'état du slider
  49.  
  50. // Variable météo
  51. float t;            //On initialise la variable qui contiendra la température
  52. float h;            //On initialise la variable qui contiendra l'humidité
  53. int automanuel;     //On initialise la variable qui contiendra le mode automatique/mannuel
  54.  
  55. // Variable temps
  56. long starttime;         // start time in seconds
  57. long stoptime;          // stop  time in seconds
  58. long timenow;           // time now in seconds
  59.  
  60. // déclaration des broches de communication
  61. int sda = D3;     // SDA données
  62. int scl = D4;     // SCL horloge
  63.  
  64. // SHT21 HTU21D
  65. sht21 SHT21;  // création d'une instance
  66.  
  67. //on initialise le timer BLYNK
  68. BlynkTimer timer;   // Timer "void"
  69.  
  70. // On initialise les Widget
  71. WidgetLED led1(V7);     //LED chaudière
  72. WidgetRTC rtc;          // Temps (heure du serveur)
  73.  
  74. // On synchronise les timers (semaine = V21 et week-end = V22) et les boutons (slider = V9 et mode auto/manuel = V20)
  75. void timeinput()
  76. {
  77.   Blynk.syncVirtual(V9, V20, V21,V22);
  78. }
  79.  
  80. //On créer la boucle qui permet de lire la température et l'humidité d'après le SHT21 (HTU21D)
  81. void sendSensor()
  82. {
  83.   //On définit les variable qui contiendront les données météo
  84.   t = SHT21.lecture_temperature()-1.5;      // Température
  85.   h = SHT21.lecture_humidite();             // Humidité
  86.  
  87.   //On envoie les donnés des variables à des boutons virtuels si les valeurs sont supérieurs à 5
  88.   if (h > 5){
  89.     Blynk.virtualWrite(V5, h);    // Humidité = V5
  90.   }
  91.   if (t > 5 ){
  92.     Blynk.virtualWrite(V6, t);    // Température = V6
  93.   }
  94. }
  95.  
  96. //On créer la boucle du thermostat
  97. void thermostat()
  98. {
  99.   if (etat == 3) {                                //Si le slider est sur la position nuit (3)
  100.     if ( t < xnuit-0.25 && t > 5 ) {                  //Si la température est inférieur à "la valeur de consigne de nuit" - "offset"
  101.       led1.setColor(BLYNK_BLUE);                            //On défini la couleur de la LED sur vert
  102.       led1.on();                                            //On allume la LED                                        
  103.       digitalWrite(D6,LOW);                                 //On allume le relais de la chaudière
  104.     }
  105.     else if (t > xnuit+0.13 && t > 5){                //si la température est supérieur à "la valeur de consigne de nuit" + "offset"
  106.       led1.off();                                           //On éteind la LED
  107.       digitalWrite(D6,HIGH);                                //On éteind le relay de la chaudière
  108.     }
  109.   }
  110.  
  111.   else if (etat == 2) {                           //Si le slider est sur la position jour (2)
  112.     if ( t < xjour-0.25 && t > 5 ) {                  //Si la température est inférieur à "la valeur de consigne de jour" - "offset"
  113.       led1.setColor(BLYNK_GREEN);                           //On défini la couleur de la LED sur bleu
  114.       led1.on();                                            //on allume la LED
  115.       digitalWrite(D6,LOW);                                 //On allume le relay
  116.     }
  117.     else if (t > xjour+0.13 && t > 5 ){               //si la température est supérieur à "la valeur de consigne de jour" + "offset"
  118.       led1.off();                                           //On éteind la LED
  119.       digitalWrite(D6,HIGH);                                //On éteind le relay de la chaudière
  120.     }
  121.   }
  122.  
  123.     else if (etat == 1){                          //Si le slider est sur la position sans régulation (1)
  124.       led1.setColor(BLYNK_RED);                             //On défini la couleur de la LED sur rouge
  125.       led1.on();                                            //on allume la LED
  126.       digitalWrite(D6,LOW);                                 //On allume le relay
  127.     }
  128.  
  129.     else if (etat == 0) {                         //Si le slider est sur la position OFF (0)
  130.       led1.off();                                           //On éteind la LED
  131.       digitalWrite(D6,HIGH);                                //On éteind le relay de la chaudière
  132.     }
  133. }
  134.  
  135. //On définit la valeur de consigne de jour
  136. BLYNK_WRITE(V15)
  137. {
  138.   xjour = param.asFloat();    //On stock la valeur de consigne de jour dans la variable xjour
  139. }
  140.  
  141. //On définit la valeur de consigne de nuit
  142. BLYNK_WRITE(V16)
  143. {
  144.   xnuit = param.asFloat();    //On stock la valeur de consigne de nuit dans la variable xnuit
  145. }
  146.  
  147. //SLider mode de fonctionnement
  148. BLYNK_WRITE(V9)
  149. {
  150.   int test=param.asInt();      // On récupère la position du slider
  151.  
  152.   if (test==1) {                //Si le slider est sur "sans regulation"
  153.     etat=1;                    // On définit l'état à 1
  154.   }
  155.   else if (test==2) {          //Si le bouton est sur "jour"
  156.     etat=2;                    // On définit l'état à 2
  157.   }
  158.   else if (test==3) {          //Si le bouton est sur "nuit"
  159.     etat=3;                    // On définit l'état à 3
  160.   }
  161.   else {                       // Si le slider est sur "OFF"
  162.     etat=0;                    // On définit l'état à 0
  163.   }
  164. }
  165.  
  166. // Bouton auto/manuel
  167. BLYNK_WRITE(V20)
  168. {
  169.   automanuel = param.asInt();     // On récupère la position du bouton
  170. }
  171.  
  172. //Timer semaine
  173. BLYNK_WRITE(V21)                                              // Timpe Input Widget
  174. {
  175.   TimeInputParam t(param);                                                      // Le temps est stocké dans la variable t
  176.  
  177. if (automanuel ==1){                                                            // Si le bouton V20 est sur la position automatique
  178.  
  179.   int dayadjustment = -1;                                                       // On fait un ajustement de -1 jour
  180.     if(weekday() == 1){
  181.     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
  182.     }
  183.     if(t.isWeekdaySelected(weekday() + dayadjustment)){                         // Si aujourd'hui est un jour sélectionné sur le widget Time Input
  184.       timenow = ((hour() * 3600) + (minute() * 60) + second());                      // On récupère l'heure du jour
  185.       starttime = (t.getStartHour() * 3600) + (t.getStartMinute() * 60);             // On récupère l'heure de départ du timer
  186.  
  187.       if(timenow >= starttime){                                                      // Si l'heure actuelle correspond à l'heure de départ du timer
  188.         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"
  189.           Blynk.virtualWrite(V9, 2);                                                            // On met le slider en position jour
  190.         }      
  191.       }
  192.       else{}
  193.    
  194.       stoptime = (t.getStopHour() * 3600) + (t.getStopMinute() * 60);                // On récupère l'heure d'arrivée du timer
  195.  
  196.       if(timenow >= stoptime){                                                       // Si l'heure actuelle correspond à l'heure d'arrivée du timer
  197.         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"
  198.           Blynk.virtualWrite(V9, 3);                                                            // On met le slider en position nuit
  199.         }              
  200.       }
  201.       else{}
  202.     }
  203. }
  204. else{}
  205. }
  206.  
  207. //Timer semaine
  208. BLYNK_WRITE(V22)                                              // Timpe Input Widget
  209. {
  210.   TimeInputParam t(param);                                                      // Le temps est stocké dans la variable t
  211.  
  212. if (automanuel ==1){                                                            // Si le bouton V20 est sur la position automatique
  213.  
  214.   int dayadjustment = -1;                                                       // On fait un ajustement de -1 jour
  215.     if(weekday() == 1){
  216.     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
  217.     }
  218.     if(t.isWeekdaySelected(weekday() + dayadjustment)){                         // Si aujourd'hui est un jour sélectionné sur le widget Time Input
  219.       timenow = ((hour() * 3600) + (minute() * 60) + second());                      // On récupère l'heure du jour
  220.       starttime = (t.getStartHour() * 3600) + (t.getStartMinute() * 60);             // On récupère l'heure de départ du timer
  221.  
  222.       if(timenow >= starttime){                                                      // Si l'heure actuelle correspond à l'heure de départ du timer
  223.         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"
  224.           Blynk.virtualWrite(V9, 2);                                                            // On met le slider en position jour
  225.         }      
  226.       }
  227.       else{}
  228.    
  229.       stoptime = (t.getStopHour() * 3600) + (t.getStopMinute() * 60);                // On récupère l'heure d'arrivée du timer
  230.  
  231.       if(timenow >= stoptime){                                                       // Si l'heure actuelle correspond à l'heure d'arrivée du timer
  232.         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"
  233.           Blynk.virtualWrite(V9, 3);                                                            // On met le slider en position nuit
  234.         }              
  235.       }
  236.       else{}
  237.     }
  238. }
  239. else{}
  240. }
  241.  
  242. // BLYNK Connexionn
  243. BLYNK_CONNECTED()
  244. {                                                          // Quand Blynk se connecte
  245.   Blynk.syncVirtual(V7, V9, V15, V16, V20, V21, V22);      // On synchronise les boutons, les LEDs et les timers
  246. }
  247.  
  248. //On initialise l'appareil
  249. void setup()                                                        // Configuration
  250. {
  251.   pinMode(D6, OUTPUT);                                              // On définit la commande du relay de la chaudière en sortie
  252.   digitalWrite(D6, HIGH);                                           // On définit le premier état du relay de la chaudière à l'état Bas
  253.   delay(1000);                                                      // On patiente 1 seconde
  254.   Serial.begin(9600);                                               // On allume le moniteur série
  255.   Blynk.begin(auth, ssid, pass, IPAddress(XXX,XXX,X,XX), 8080);     //On se connect à BLYNK à travers notre WIFI et notre serveur
  256.   rtc.begin();                                                      // On démarre l'horloge
  257.   SHT21.begin(sda, scl);                                            // On démarre la connecion avec le SHT21 (HTU21D)
  258.   WiFi.begin(ssid, pass);                                           // On se connecte au Wifi
  259.   ArduinoOTA.setHostname("Thermostat");                             // On défini le nom de l'appareil
  260.   ArduinoOTA.setPassword("XXXXXXXXXXXXX");                           // On défini son mot de passe
  261.   ArduinoOTA.begin();                                               // On initialise l'OTA
  262.  
  263.   timer.setInterval(1000L, sendSensor);                             //On définit le temps de répétition de la boucle de récupération de données du SHT21 à 1 seconde
  264.   timer.setInterval(1000L, thermostat);                             //On définit le temps de répétition de la boucle de commande de la chaudière à 1 seconde
  265.   timer.setInterval(1000L, timeinput);                              //On définit le temps de répétition de la boucle TimeInput à 1 seconde
  266. }
  267.  
  268. //La boucle se répète indéfiniment
  269. void loop()                 // Boucle infini
  270. {
  271.   ArduinoOTA.handle();      // On cherche une Mise à Jour en OTA
  272.   Blynk.run();              // On démarre BLYNK
  273.   timer.run();              // On démarre le timer
  274. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement