Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Warin84 */
- /* Youtube */
- /* https://www.youtube.com/channel/UCgO8rRzYeFysD-6TA9m7EUQ */
- ///////////////////////////////////////////
- // Slider mode de fonctionement = V9 //
- // Mode automatique/manuel = V20 //
- // Pin SHT21 SDA = D3 SCL = D4 //
- // Pin relay chaudière = D6 //
- // Température = V6 //
- // Humidité = V5 //
- // Consigne de jour = V15 //
- // Consigne de nuit = V16 //
- // LED chaudière = V7 //
- // Timer semaine = V21 //
- // Timer week-end = V22 //
- ///////////////////////////////
- //On défini les librairies utilisées
- #define BLYNK_PRINT Serial // ajout défini le moniteur série BLYNK
- #include <ESP8266WiFi.h> // ajout de la librairie ESP8266WIFI
- #include <ESP8266mDNS.h> // ajout de la librairie ESP8266m
- #include <WiFiUdp.h> // ajout de la librairie WifiUpdate
- #include <ArduinoOTA.h> // ajout de la librairie OTA
- #include <BlynkSimpleEsp8266.h> // ajout de la librairie BLYNK
- #include <Wire.h> // ajout de la librairie de gestion I2C
- #include <sht21.h> // ajout de la librairie de gestion du capteur SHT21
- #include <WidgetRTC.h> // ajout de la librairie Time WIdgetRTC
- //On défini les couleurs
- #define BLYNK_GREEN "#23C48E" // couleur vert
- #define BLYNK_BLUE "#04C0F8" // couleur bleu
- #define BLYNK_YELLOW "#ED9D00" // couleur orange
- #define BLYNK_RED "#D3435C" // couleur rouge
- #define BLYNK_DARK_BLUE "#5F7CD8" // couleur bleu foncé
- char auth[] = "XXXXXXXXXXXXXXXXXXXXXXXXXX"; // on récupére le "Auth Token" à partir de l'application BLYNK
- // On saisit les informations de connexion pour se connecter en WIFI
- char ssid[] = "XXXXXXXXXXXX"; // Nom du réseau Wifi
- char pass[] = "XXXXXXXXXXXX"; // Mot de passe du réseau Wifi
- // Variable mode fonctionnement
- float xnuit ; //On initialise la valeur de consigne de nuit
- float xjour; //On initialise la valeur de consigne de jour
- int etat; //On initialise la fonction d'état du slider
- // Variable météo
- float t; //On initialise la variable qui contiendra la température
- float h; //On initialise la variable qui contiendra l'humidité
- int automanuel; //On initialise la variable qui contiendra le mode automatique/mannuel
- // Variable temps
- long starttime; // start time in seconds
- long stoptime; // stop time in seconds
- long timenow; // time now in seconds
- // déclaration des broches de communication
- int sda = D3; // SDA données
- int scl = D4; // SCL horloge
- // SHT21 HTU21D
- sht21 SHT21; // création d'une instance
- //on initialise le timer BLYNK
- BlynkTimer timer; // Timer "void"
- // On initialise les Widget
- WidgetLED led1(V7); //LED chaudière
- WidgetRTC rtc; // Temps (heure du serveur)
- // On synchronise les timers (semaine = V21 et week-end = V22) et les boutons (slider = V9 et mode auto/manuel = V20)
- void timeinput()
- {
- Blynk.syncVirtual(V9, V20, V21,V22);
- }
- //On créer la boucle qui permet de lire la température et l'humidité d'après le SHT21 (HTU21D)
- void sendSensor()
- {
- //On définit les variable qui contiendront les données météo
- t = SHT21.lecture_temperature()-1.5; // Température
- h = SHT21.lecture_humidite(); // Humidité
- //On envoie les donnés des variables à des boutons virtuels si les valeurs sont supérieurs à 5
- if (h > 5){
- Blynk.virtualWrite(V5, h); // Humidité = V5
- }
- if (t > 5 ){
- Blynk.virtualWrite(V6, t); // Température = V6
- }
- }
- //On créer la boucle du thermostat
- void thermostat()
- {
- if (etat == 3) { //Si le slider est sur la position nuit (3)
- if ( t < xnuit-0.25 && t > 5 ) { //Si la température est inférieur à "la valeur de consigne de nuit" - "offset"
- led1.setColor(BLYNK_BLUE); //On défini la couleur de la LED sur vert
- led1.on(); //On allume la LED
- digitalWrite(D6,LOW); //On allume le relais de la chaudière
- }
- else if (t > xnuit+0.13 && t > 5){ //si la température est supérieur à "la valeur de consigne de nuit" + "offset"
- led1.off(); //On éteind la LED
- digitalWrite(D6,HIGH); //On éteind le relay de la chaudière
- }
- }
- else if (etat == 2) { //Si le slider est sur la position jour (2)
- if ( t < xjour-0.25 && t > 5 ) { //Si la température est inférieur à "la valeur de consigne de jour" - "offset"
- led1.setColor(BLYNK_GREEN); //On défini la couleur de la LED sur bleu
- led1.on(); //on allume la LED
- digitalWrite(D6,LOW); //On allume le relay
- }
- else if (t > xjour+0.13 && t > 5 ){ //si la température est supérieur à "la valeur de consigne de jour" + "offset"
- led1.off(); //On éteind la LED
- digitalWrite(D6,HIGH); //On éteind le relay de la chaudière
- }
- }
- else if (etat == 1){ //Si le slider est sur la position sans régulation (1)
- led1.setColor(BLYNK_RED); //On défini la couleur de la LED sur rouge
- led1.on(); //on allume la LED
- digitalWrite(D6,LOW); //On allume le relay
- }
- else if (etat == 0) { //Si le slider est sur la position OFF (0)
- led1.off(); //On éteind la LED
- digitalWrite(D6,HIGH); //On éteind le relay de la chaudière
- }
- }
- //On définit la valeur de consigne de jour
- BLYNK_WRITE(V15)
- {
- xjour = param.asFloat(); //On stock la valeur de consigne de jour dans la variable xjour
- }
- //On définit la valeur de consigne de nuit
- BLYNK_WRITE(V16)
- {
- xnuit = param.asFloat(); //On stock la valeur de consigne de nuit dans la variable xnuit
- }
- //SLider mode de fonctionnement
- BLYNK_WRITE(V9)
- {
- int test=param.asInt(); // On récupère la position du slider
- if (test==1) { //Si le slider est sur "sans regulation"
- etat=1; // On définit l'état à 1
- }
- else if (test==2) { //Si le bouton est sur "jour"
- etat=2; // On définit l'état à 2
- }
- else if (test==3) { //Si le bouton est sur "nuit"
- etat=3; // On définit l'état à 3
- }
- else { // Si le slider est sur "OFF"
- etat=0; // On définit l'état à 0
- }
- }
- // Bouton auto/manuel
- BLYNK_WRITE(V20)
- {
- automanuel = param.asInt(); // On récupère la position du bouton
- }
- //Timer semaine
- BLYNK_WRITE(V21) // Timpe Input Widget
- {
- TimeInputParam t(param); // Le temps est stocké dans la variable t
- if (automanuel ==1){ // Si le bouton V20 est sur la position automatique
- int dayadjustment = -1; // On fait un ajustement de -1 jour
- if(weekday() == 1){
- 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
- }
- if(t.isWeekdaySelected(weekday() + dayadjustment)){ // Si aujourd'hui est un jour sélectionné sur le widget Time Input
- timenow = ((hour() * 3600) + (minute() * 60) + second()); // On récupère l'heure du jour
- starttime = (t.getStartHour() * 3600) + (t.getStartMinute() * 60); // On récupère l'heure de départ du timer
- if(timenow >= starttime){ // Si l'heure actuelle correspond à l'heure de départ du timer
- 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"
- Blynk.virtualWrite(V9, 2); // On met le slider en position jour
- }
- }
- else{}
- stoptime = (t.getStopHour() * 3600) + (t.getStopMinute() * 60); // On récupère l'heure d'arrivée du timer
- if(timenow >= stoptime){ // Si l'heure actuelle correspond à l'heure d'arrivée du timer
- 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"
- Blynk.virtualWrite(V9, 3); // On met le slider en position nuit
- }
- }
- else{}
- }
- }
- else{}
- }
- //Timer semaine
- BLYNK_WRITE(V22) // Timpe Input Widget
- {
- TimeInputParam t(param); // Le temps est stocké dans la variable t
- if (automanuel ==1){ // Si le bouton V20 est sur la position automatique
- int dayadjustment = -1; // On fait un ajustement de -1 jour
- if(weekday() == 1){
- 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
- }
- if(t.isWeekdaySelected(weekday() + dayadjustment)){ // Si aujourd'hui est un jour sélectionné sur le widget Time Input
- timenow = ((hour() * 3600) + (minute() * 60) + second()); // On récupère l'heure du jour
- starttime = (t.getStartHour() * 3600) + (t.getStartMinute() * 60); // On récupère l'heure de départ du timer
- if(timenow >= starttime){ // Si l'heure actuelle correspond à l'heure de départ du timer
- 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"
- Blynk.virtualWrite(V9, 2); // On met le slider en position jour
- }
- }
- else{}
- stoptime = (t.getStopHour() * 3600) + (t.getStopMinute() * 60); // On récupère l'heure d'arrivée du timer
- if(timenow >= stoptime){ // Si l'heure actuelle correspond à l'heure d'arrivée du timer
- 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"
- Blynk.virtualWrite(V9, 3); // On met le slider en position nuit
- }
- }
- else{}
- }
- }
- else{}
- }
- // BLYNK Connexionn
- BLYNK_CONNECTED()
- { // Quand Blynk se connecte
- Blynk.syncVirtual(V7, V9, V15, V16, V20, V21, V22); // On synchronise les boutons, les LEDs et les timers
- }
- //On initialise l'appareil
- void setup() // Configuration
- {
- pinMode(D6, OUTPUT); // On définit la commande du relay de la chaudière en sortie
- digitalWrite(D6, HIGH); // On définit le premier état du relay de la chaudière à l'état Bas
- delay(1000); // On patiente 1 seconde
- Serial.begin(9600); // On allume le moniteur série
- Blynk.begin(auth, ssid, pass, IPAddress(XXX,XXX,X,XX), 8080); //On se connect à BLYNK à travers notre WIFI et notre serveur
- rtc.begin(); // On démarre l'horloge
- SHT21.begin(sda, scl); // On démarre la connecion avec le SHT21 (HTU21D)
- WiFi.begin(ssid, pass); // On se connecte au Wifi
- ArduinoOTA.setHostname("Thermostat"); // On défini le nom de l'appareil
- ArduinoOTA.setPassword("XXXXXXXXXXXXX"); // On défini son mot de passe
- ArduinoOTA.begin(); // On initialise l'OTA
- 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
- timer.setInterval(1000L, thermostat); //On définit le temps de répétition de la boucle de commande de la chaudière à 1 seconde
- timer.setInterval(1000L, timeinput); //On définit le temps de répétition de la boucle TimeInput à 1 seconde
- }
- //La boucle se répète indéfiniment
- void loop() // Boucle infini
- {
- ArduinoOTA.handle(); // On cherche une Mise à Jour en OTA
- Blynk.run(); // On démarre BLYNK
- timer.run(); // On démarre le timer
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement