Commander la porte du garage avec le Smartphone

Une alternative à la télécommande qui est restée dans la voiture ...

Garage esp32 idee 1

          Si, comme moi, vous oubliez de prendre la télécommande de la porte du garage, lorsque vous partez en moto ou vélo, il est appréciable de pouvoir commander celle-ci avec le Smartphone, car le téléphone, on n'oublie jamais de le prendre. Même pas d'appli à installer, juste un petit montage à plugger en parallèle sur le bouton de commande intérieur de la porte ! Si c'est un volet, ça marche aussi. La seule condition, c'est qu'il y ait le Wi-Fi de la maison qui vienne arroser l'endroit où est placé le petit boîtier, éventuellement grace à un répéteur . "Oui, mais tout le monde peut rentrer ?" "- Hé bien non, sauf si l'on a partagé les identifiants Wi-Fi avec tout le monde !" Et encore il faut avoir l'adresse IP du montage généré lors de la première connexion sur la boxe ... Et pour cela, il faut éditer les éléments connectés dans l'arborescence du réseau en affichant les menus. Voila pour la sécurité !

          Facile à poser, il suffit juste d'alimenter ceci avec une tension de 95 à 250 volts AC, et à raccorder un contact ou deux, suivant le cas, si c'est une porte à un ou trois boutons (genre volet motorisé) . Deux logiciels différents permettent d'adapter le mode en impulsions ou mouvements avec sens contrôlés, au choix et à téléverser dans le montage; le smartphone ne servant que de terminal, la page HTML est générée par le circuit, ce qui libère le téléphone de toute appli et widget. Il n'est nécessaire que d'appeler l'adresse IP du terminal dans la barre de commande ...

Garage esp32 1 5​​​​​

On se le fait ! on attaque ...

Le Schéma & le Matériel :

Garage esp32 sch

          Il n'y a pas grand chose ... L'alimentation arrive sur le connecteur X2, passe par un fusible de protection  T250/1A pour aller sur l'entrée d'un bloc d'alimentation à découpage 240 VAC /  5 VDC sous 600mA de courant disponible ... C'est bien suffisant. Cette black box de 34 x 20 mm est protégée contre les surcharges et tolère une entrée entre 97 et 270 volt avec un rendement proche de l'unité. Le 5VDC alimente le micro contrôleur et les bobines des relais ...

Alim hi link

          Qui dit serveur Wi-Fi, me dit ESP32 ! ça marche bien et ça se maîtrise assez facilement, en plus ce n'est pas cher ( ~4€ chez les Chinois ). Ce circuit va assurer la gestion de la communication avec la boxe familiale et l'excitation des relais, lors des sollicitations.Wifi clock pannel esp          Les sorties GPIO12 et GPIO13 viennent commander les relais en passant par un transistor NPN BC547 (Q1-Q2) qui, lors de la conduction, vont tirer à GND les charges du collecteur . Le courant de base est limité par les résistances R1-R2 (2K2).Sur chacun de ces collecteurs, vient le 2ème point de la bobine, avec sa diode de roue libre D1-D2 (1N4148), ainsi qu'une led de visualisation de l'état (Led1- Led2) , chacune étant limitée en courant par les résistances R3-R4 (470 Ohms). Les relais HF49FD sont des 5VDC avec un pouvoir de coupure de 5A ... Les contacts sont raccordés à des borniers à vis, respectivement X1-X3.  Si on prend la liberté de passer les fonds de tiroirs, il faut juste modifier les empreintes.Relaishf49fd

Le circuit imprimé et son câblage :

          La routine ! Le circuit est réalisé comme décrit sur la page de mon site. Les typons sont dans le fichier zip ci dessous. C'est du simple face, sans strap, avec deux résistances câblées sous le support de l'ESP32 qu'il ne faut pas oublier. Suivant le type de porte à commander (1 ou 3 boutons) on n'est pas obligé de câbler les deux sorties !  Si un seule information suffit (1 bouton), on n'utilise que la partie DWN (GPIO 12 ) du schéma ... J'ai choisi celle-ci car elle reste au niveau logique bas pendant le boot ...Garage esp32 ci

 

Les Sketchs : 

          Deux programmes différents suivant que la porte possède un seul ou trois boutons. Les deux n'ont pas la même structure, bien qu'ils embarquent chacun la page HTML afin de générer celle-ci sur le smartphone. Les commentaires en bouts de ligne sont nombreux pour que l'on puisse cerner ce que fait l'ESP32.

Pour la commande à 1 seul bouton, on retrouve :

  • les bibliothèques dont on a besoin

//Appel des librairies utilisées 
#include "WiFi.h"
#include <ESPAsyncWebServer.h>

  • Les sorties déclarées ( j'utilise que la GPIO 12, car la 14 passe à un pendant le boot )

//Déclaration des sorties pour les relais
const int output12 = 12;
const int output14 = 14;

  • Les identifiants de connexion

//Saisie des identifiant de la box, reseau et clé 
const char* ssid = "XxxxxxxxxxXX";
const char* password = "ZZZZZZZzzzzzzZZZZZZZZ";

  • La création de la page HTML (à personnaliser suivant la sensibilité artistique de chacun )

<!DOCTYPE HTML><html>
.../...

</body>

  •  Et la validation, si le bouton est sollicité 

<script>
  function cmdePorte() {
    var cde = new XMLHttpRequest();
    cde.open('GET', "/comande", true);
    cde.send();
  }
</script>
</html>

  • Le Setup de connexion Wi-Fi + l'envoi après démarrage du serveur

void setup() {
  //Connexion au Wi-Fi

.../...

  • Direction et mise à l'état logique bas des GPIOs utilisés

  //DDR des sorties pour la commande des relais
  pinMode(output12,OUTPUT);
  pinMode(output14,OUTPUT);
  digitalWrite(output12,LOW);
  digitalWrite(output14,LOW);   
}

  • Et la boucle avec action de 1,5" si la variable à été mise à "true"

void loop() {
  // Si le bouton "Porte OK" est activé, on demande un mouvement de porte
  if (movDoor) {
    digitalWrite(output12,HIGH);
    delay (1500);
    digitalWrite(output12,LOW);
    movDoor = false;    
  }
}

Voilà pour le premier programme et ce que ça donne sur l'écran .

Garage esp32 1bout 1

 

 

 

 

 

 

 

 

 

Pour la commande à 3 boutons, on retrouve :

  • L'attribution d'une chaine littérale à l'état des boutons 

// Variables auxiliaires des etats de sorties
String output14State = "off";
String output12State = "off";
String output13State = "off";

  • Le Setup et la connexion 

  // Connexion au Wi-Fi
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
  }
  server.begin();
}

  • La page HTML => serveur / client

  WiFiClient client = server.available();   
  if (client) {                             // Si c'est un nouveau clent,
    currentTime = millis();
    previousTime = currentTime;
    String currentLine = "";                // crée une chaine pour la reconnaissance 
    while (client.connected() && currentTime - previousTime <= timeoutTime) {  // jusqu'à ce que le client soi connecté

  • En fonction de la valeur littérale affectée au caption des boutons => commutation des sorties des GPIOs     

            // Mise à "on" ou "off" des états de sortie et des sorties
            if (header.indexOf("GET /14/on") >= 0) {
              Serial.println("GPIO 14 on");
              output14State = "on";
              output12State = "off";
              output13State = "off";
              digitalWrite(output14, HIGH);
              digitalWrite(output12, LOW);
            } else if (header.indexOf("GET /14/off") >= 0) {
              Serial.println("GPIO 14 off");
             
.../...
              output12State = "off";
              digitalWrite(output12, LOW);
            }

  • Les boutons changent de couleur suivant l'état

            // Génération de la page HTML sue le web
            client.println("<!DOCTYPE html><html>");
            client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">");
            client.println("<link rel=\"icon\" href=\"data:,\">");
            client.println("<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}");
            client.println(".button { background-color: #4CAF50; border: none; color: white; padding: 16px 40px;");
            client.println("text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer;}");
            client.println(".button2 {background-color: #555555;}</style></head>");
            
            // Tête de page Web
            client.println("<body><h1>Commande Garage & Volet</h1>");
            
          
            // Affichage de l'état, et le ON/OFF du bouton pour GPIO 14  
            client.println("<p>Ouverture " + output14State + "</p>");
            // Si la sortie 14 est off, on affiche "-UP-"sur le bouton       
            if (output14State=="off") {
              client.println("<p><a href=\"/14/on\"><button class=\"button\">-UP-</button></a></p>");
            } else {

.../...

  • Tant que ......

    // Efface la variable
    header = "";
    // Ferme la connexion
    client.stop();

Garage esp32 3bout 1

 

 

 

 

 

 

 

 

 

 

          Le gros problème avec le HTML, c'est que c'est énormément chronophage: si on met le nez dedans, c'est si prenant, que l'on oubli d'en sortir. C'est un plaisir que s'amuser à voir ce que font les lignes, et comment les orienter vers nos souhaits de mise en page ... Je me suis bien amusé !

Les fichiers de réalisation :

Garage esp32Garage esp32 (710.09 Ko)

 

          Un petit montage bien pratique : Quand je prends le vélo ou la moto, je ne m'embarrasse plus de la télécommande ... Si ma petite femme ne m'a pas entendu arriver, le smartphone m'ouvre la porte simplement en entrant l'adresse IP du circuit, qui une fois enregistrée dans les favoris et très facie à appeler et l'écran affiche le tableau de commande ! Le bonheur, c'est simple comme un coup de fil ... Qu'ils disaient .

 

 

Ajouter un commentaire