Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Warin84 */
- /* Youtube */
- /* https://www.youtube.com/channel/UCgO8rRzYeFysD-6TA9m7EUQ */
- ////////////////////////////////////////
- // Pin relay (volet haut) = D5 //
- // Pin relay (volet bas) = D6 //
- // Volet Haut/Bas = V2 //
- // Volet On/Off = V3 //
- // LED volet = V8 //
- // Timer Volet semaine = V21 //
- // Timer Volet Week-end = V21 //
- ////////////////////////////////
- //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 <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[] = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXX"; // on récupére le "Auth Token" à partir de l'application BLYNK
- // On saisit les informations afin de se connecter au WIFI
- char ssid[] = "XXXXXXXXXXXXXX"; // Nom du réseau Wifi
- char pass[] = "XXXXXXXXXXXXXX"; // Mot de passe du réseau Wifi
- // Variable du volet
- int voletbh; // Etat Haut/Bas
- int etatvolet; // Etat On/Off
- int tempsvolet = 20000; // Temps de montée et descente du volet
- // Variable temps
- long starttime; // start time in seconds
- long stoptime; // stop time in seconds
- long timenow; // time now in seconds
- //Variable temps initiale pour le volet
- unsigned long previousmillis = 0; // Timer Bas
- unsigned long previousmillis2 = 0; // Timer Haut
- int automanuel; //Etat du bouton automatique/manuel
- //on initialise le timer BLYNK
- BlynkTimer timer; // Timer "void"
- // On initialise les Widget
- WidgetLED led2(V8); // LED Volet
- WidgetRTC rtc; // Temps (heure du serveur)
- // On synchronise les timers (lampe = V22 et volet = V21) et les boutons (lampe = V4, voletbh = V2 et etatvolet = V3)
- void timeinput()
- {
- Blynk.syncVirtual(V2, V3, V20, V21,V22);
- }
- void volet()
- {
- if (voletbh == 0 && etatvolet == 0) { // Si le volet est sur Bas mais aussi sur off
- previousmillis=millis(); // On reinitialise le timer Bas
- previousmillis2=millis(); // On reinitialise le timer Haut
- digitalWrite(D6, HIGH); // On éteint le relay du volet pour l'état Bas
- digitalWrite(D5, HIGH); // On éteint le relay du volet pour l'état Haut
- led2.off(); // On éteint la LED du volet
- }
- else if (voletbh == 1 && etatvolet == 0) { // Si le volet est sur Haut mais aussi sur off
- previousmillis=millis(); // On reinitialise le timer Bas
- previousmillis2=millis(); // On reinitialise le timer Haut
- digitalWrite(D6, HIGH); // On éteint le relay du volet pour l'état Bas
- digitalWrite(D5, HIGH); // On éteint le relay du volet pour l'état Haut
- led2.off(); // On éteint la LED du volet
- }
- else if (voletbh == 0 && etatvolet == 1) { // Si le volet est sur Bas mais aussi sur on
- unsigned long currentmillis = millis(); // On démarre le timer de réinitialisation
- if (currentmillis - previousmillis >= tempsvolet){ // Si le bouton est allumé depuis 40 secondes
- previousmillis=millis(); // On reinitialise le timer Bas
- previousmillis2=millis(); // On reinitialise le timer Haut
- Blynk.virtualWrite(V3, 0); // On met le volet sur la position off
- delay(500); // On patiente une-demi seconde
- Blynk.virtualWrite(V2, 1); // On met le volet à l'état Haut
- }
- else{ // Si le bouton est allumé depuis moins de 40 secondes
- previousmillis2=millis(); // On reinitialise le timer Haut uniquement
- led2.setColor(BLYNK_BLUE); // On définni la LED du volet sur la couleur Bleu
- led2.on(); // On allume la LED du volet
- digitalWrite(D5, HIGH); // On éteint le relay du volet à l'état Haut
- delay(500); // On patiente une demi-seconde (IMPORTANT POUR NE PAS CASSER LE MOTEUR DU VOLET)
- digitalWrite(D6, LOW); // On allume le relay du volet à l'état Bas
- }
- }
- else if (voletbh == 1 && etatvolet == 1) { // Si le volet est sur Haut mais aussi sur on
- unsigned long currentmillis = millis(); // On démarre le timer de réinitialisation
- if (currentmillis - previousmillis2 >= tempsvolet){ // Si le bouton est allumé depuis 40 secondes
- Blynk.virtualWrite(V3, 0); // On met le volet sur la position off
- delay(500); // On patiente une-demi seconde
- Blynk.virtualWrite(V2, 0); // On met le volet à l'état Haut
- }
- else { // Si le bouton est allumé depuis moins de 40 secondes
- previousmillis=millis(); // On reinitialise le timer Bas uniquement
- led2.setColor(BLYNK_YELLOW); // On définni la LED du volet sur la couleur Orange
- led2.on(); // On allume la LED du volet
- digitalWrite(D6, HIGH); // On éteint le relay du volet à l'état Bas
- delay(500); // On patiente une demi-seconde (IMPORTANT POUR NE PAS CASSER LE MOTEUR DU VOLET)
- digitalWrite(D5, LOW); // On allume le relay du volet à l'état Haut
- }
- }
- else {} // Si le volet est sur utre chose que Haut/Bas mais aussi sur autre chose que on/off, ne rien faire
- }
- //On lit le bouton virtuel
- BLYNK_WRITE(V2) // Etat Haut/Bas du volet
- {
- voletbh = param.asInt(); // On stock la valeur dans la variable voletbh
- }
- //On lit le bouton virtuel
- BLYNK_WRITE(V3) // Etat on/off du volet
- {
- etatvolet = param.asInt(); // On stock la valeur dans la variable etatvolet
- }
- //On relie le bouton virtuel V4 avec le relay de la Lampe (pin D6 bridge 1)
- BLYNK_WRITE(V20)
- {
- automanuel = param.asInt(); //On stock l'état du bouton dans la variable automanuel
- }
- //On lit le bouton virtuel
- BLYNK_WRITE(V21) // Timpe Input Widget
- {
- TimeInputParam t(param); // Le temps est stocké dans la variable t
- if (automanuel == 1){
- 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(V2, 1); // On met le volet en position Haut
- Blynk.virtualWrite(V3, 1); // On met le volet en position ON
- }
- }
- 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(V2, 0); // On met le volet en position Bas
- Blynk.virtualWrite(V3, 1); // On met le volet en position ON
- }
- }
- else{}
- }
- }
- }
- //On lit le bouton virtuel
- BLYNK_WRITE(V22) // Timpe Input Widget
- {
- TimeInputParam t(param); // Le temps est stocké dans la variable t
- if (automanuel == 1){
- 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(V2, 1); // On met le volet en position Haut
- Blynk.virtualWrite(V3, 1); // On met le volet en position ON
- }
- }
- 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(V2, 0); // On met le volet en position Bas
- Blynk.virtualWrite(V3, 1); // On met le volet en position ON
- }
- }
- else{}
- }
- }
- }
- // BLYNK Connexionn
- BLYNK_CONNECTED() // Quand Blynk se connecte
- {
- Blynk.syncVirtual(V2, V3, V8, 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 volet bas en sortie
- pinMode(D5, OUTPUT); // On définit la commande du relay volet haut en sortie
- digitalWrite(D6, HIGH); // On définit le premier état du relay volet bas à l'état Bas
- digitalWrite(D5, HIGH); // On définit le premier état du relay volet haut à l'état Bas
- delay(1000); // On patiente 1 seconde
- Serial.begin(9600); // On allume le moniteur série
- Blynk.begin(auth, ssid, pass); // On se connect à BLYNK à travers notre WIFI et le serveur
- rtc.begin(); // On démarre l'horloge
- WiFi.begin(ssid, pass); // On se connecte au Wifi
- ArduinoOTA.setHostname("Volet"); // On défini le nom de l'appareil
- ArduinoOTA.setPassword("XXXXXXXXXXXX"); // On défini son mot de passe
- ArduinoOTA.begin(); // On initialise l'OTA
- timer.setInterval(1000L, volet); //On définit le temps de répétition de la boucle de commande du volet à 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