ESP-01 avec carte relais

 

Que faire avec l'ESP-01 le plus petit des modules à base d'ESP8266 ? Comme il se connecte en Wifi, on peut bien entendu réaliser simplement un serveur domotique. On est vite limité par le nombre de GPIO. 2 entrées sorties sont à disposition de l'électronicien et une interface sérielle.
On trouve sur internet en vente des cartes équipées d'un relais et d'un ESP-01 pour moins de 10 €.
La première idée est de commander le relais via une adresse IP dans un navigateur, pour allumer et éteindre une lampe.
On a donc un interrupteur commandé en Wifi qui permet d'allumer et eteindre une lampe avec son smartphone. On trouve dans le commerce pour le même prix, voir moins ce genre d'interrupteur.

La deuxième idée est d'utiliser le relais pour commander un ventilateur placé dans une cave à vin et extraire l'air humide. Quand le taux d'humidité redescend autour d'une valeur convenable, le ventilateur s'arrête. La connexion en wifi permet de contrôler la température, l'humidité de la cave et le fonctionnement du ventilateur, à distance.

 

Brochage d'un ESP-01
ESP-01 monté sur une carte relais

 

bouton violet Le montage de l'interrupteur Wifi

J'utilise des modules prêt à l'emploi. La carte relais est alimenté en 5 V et possède un régulateur pour les 3,3 v requis pour ESP8266. Un module AC/DC 220V/5V 600 mA est nécessaire pour alimenter en 5V le montage. On choisira de préférence pour des raisons de sécurité un module isolé.

Toujours pour des raisons de sécurité, la mise en boitier se fait dans un boitier secteur avec prise mâle. Il faut respecter la double isolation pour l'isolation.


bouton violetLe programme de l'interrupteur Wifi

J'utilise l'IDE Arduino.

Le programme se connecte en wifi et charge la page HTML dans le navigateur. L'adresse Ip est : 192.168.99, le port 8083.

La requête tapée dans la barre d'adresse d'un navigateur : http://192.168.1.99:8083/H allume la lampe.

La requête tapée dans la barre d'adresse d'un navigateur : http://192.168.1.99:8083/L éteint la lampe.

La page HTML fonctionne sur le même principe avec 2 boutons ON/OFF

Il ne faut pas oublier de remplacer dans le programme "My SSID" par le nom du routeur et "My Password" par la clé de connexion.

L'inconvénient d'utiliser IDE de l'arduino pour programmer ESP-01 est que pour flasher le programme dans la puce ESP8266 cela nécessite un programmateur. On en trouve à moins de 10 € sur internet.
On peut aussi utiliser une carte Arduino comme programmateur, l'ESP-01 étant alimenté par le rail 3,3 V de l'Arduino.

Le site Formation à l'informatique et l'électronique explique comment procéder.
Il explique aussi comment installer une carte ESP8266 dans l'environnement Arduino.

 
#include < ESP8266WiFi.h >

const char* ssid     = "My SSID";     //change this as per yours
const char* password = "My Password"; //change this as per yours

WiFiServer server(8083);
IPAddress ip(192, 168, 1, 99); // where xx is the desired IP Address
IPAddress gateway(192, 168, 1, 1); // set gateway to match your network

int relay=0;  //0;

unsigned long int x=0; //set refresh counter to 0
float y=0;
String readString; 
String state="";



void setup(){
    Serial.begin(115200);
    pinMode(relay, OUTPUT);      // set the LED pin mode
digitalWrite(relay, INPUT_PULLUP);  
    delay(10);

    // We start by connecting to a WiFi network

    Serial.println();
    Serial.println();
    Serial.print("Connecting to ");
    Serial.println(ssid);
 
  IPAddress subnet(255, 255, 255, 0); // set subnet mask to match your network
  WiFi.config(ip, gateway, subnet); 
 
    WiFi.begin(ssid, password);

    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
    }

    Serial.println("");
    Serial.println("WiFi connected.");
    Serial.println("IP address: ");
    Serial.println(WiFi.localIP());
    
    server.begin();

}

int value = 0;

void loop(){
 WiFiClient client = server.available();   // listen for incoming clients

 
  if (client) {                             // if you get a client,
    Serial.println("New Client.");           // print a message out the serial port
    String currentLine = "";                // make a String to hold incoming data from the client
    while (client.connected()) {            // loop while the client's connected
      if (client.available()) {             // if there's bytes to read from the client,
        char c = client.read();             // read a byte, then
         readString += c; 
    
        
        if (c == '\n') {                    // if the byte is a newline character

           if (currentLine.length() == 0) {
            // HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK)
            // and a content-type so the client knows what's coming, then a blank line:
            client.println("HTTP/1.1 200 OK");
            client.println("Content-type:text/html");
            client.println();
            client.println("< H3 >Interupteur secteur WIFI Jmd< /H3 >< p >");
            client.print("Appuyer sur le bouton");
            client.println("< p >");
             // the content of the HTTP response follows the header:
            client.print("< input type=submit value=ON style=width:100px;height:45px onClick=location.href='/H' >");
            client.print("< input type=submit value=OFF style=width:100px;height:45px onClick=location.href='/L' >");


           break;
          } else {    // if you got a newline, then clear currentLine:
            currentLine = "";
          }
        } else if (c != '\r') {  // if you got anything else but a carriage return character,
          currentLine += c;      // add it to the end of the currentLine
        }

        // Check to see if the client request was "GET /H" or "GET /L":
        if (currentLine.endsWith("GET /L")) {
         digitalWrite(relay, LOW);               // GET /H turns the LED on
         state=" Off";
         }
        if (currentLine.endsWith("GET /H")) {
          digitalWrite(relay, HIGH);                // GET /L turns the LED off
          state=" On";
        }
      }
    }



            client.print("< HTML >< HEAD >");
            client.print("< title >Interrupteur secteur WIFI< /title >< /head >< BODY >< br >");      
            client.print("< p >");
            client.print("< p >");
            client.print("La lampe est:");
            client.print(state);
            client.print("< br >< br >");
            client.println("< /BODY >");
            client.println("< /HTML >");
            client.println();
    // close the connection:
    client.stop();
    Serial.println("Client Disconnected.");
  }
}

 

 

bouton violetLa ventilation d'une cave à vin

Pour ce projet j'utilise la dernière GPIO disponible (GPIO2) à laquelle je connecte un capteur d'humidité et de température DHT11.
La lampe est remplacée par un ventilateur.
Le capteur d'humidité DHT11 est un module avec une résistance intégrée, prêt à l'emploi. Il est relié au 3,3 V de L'ESP-01.

L'ESP8266 est programmé en basic avec l'environnement Annex Wifi RDS.
Pour flasher l'interpréteur Basic dans la mémoire de l'ESP8266, toute la procédure est décrite sur le site. De nombreux exemples sont disponibles, ainsi que les fichiers d'aide.
Avec peu de lignes de programmation on réalise simplement une page HTML dynamique et graphique pour le contrôle de la température et de l'humidité.

Le taux d'hydrométrie d'une cave à vin doit se situer idéalement entre 60 et 75 %. Dans le programme j'ai créé une fenêtre (hystérésis), dès que l'humidité passe au-dessus de 90 %, le ventilateur se met en route et s'arrête quand l'humidité passe en dessous de 85 %. Ces valeurs sont facilement modifiables.

Le programme utilise un Javascript : gauje.min.js pour l'affichage des graphiques, il fait parti du pack fournit avec l'environnement basic d'Annex Wifi RDS.
Des réglages de couleurs, textes à afficher sont effectués dans la page HTML créée.
Le sous programme Count se contente de commuter le relais en fonction des 2 valeurs d'humidité 90 et 85 %.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

La réalisation prendra place dans un boitier respectant les normes de sécurité en double isolation.
Le boitier sera installé à l'extérieur de la cave , à la porte par exemple.
Le capteur DHT11 doit être placé dans la cave, sur un support laissant passer l'humidité. J'ai donc réalisé une pièce support avec l'imprimante 3D.

cave_hum.zip

 

bouton violetLe programme de l'interrupteur Wifi

Le programme se connecte en wifi et charge la page HTML dans le navigateur. L'adresse Ip est : 192.168.99, le port 8083.

La requête tapée dans la barre d'adresse d'un navigateur : http://192.168.1.99:8083/H allume la lampe.

La requête tapée dans la barre d'adresse d'un navigateur : http://192.168.1.99:8083/L éteint la lampe.

La page HTML fonctionne sur le même principe avec 2 boutons ON/OFF

Il ne faut pas oublier de remplacer dans le programme "My SSID" par le nom du routeur et "My Password" par la clé de connexion.

L'inconvénient d'utiliser IDE de l'arduino pour programmer ESP-01 est que pour flasher le programme dans la puce ESP8266 cela nécessite un programmateur. On en trouve à moins de 10 € sur internet.
On peut aussi utiliser une carte Arduino comme programmateur, l'ESP-01 étant alimenté par le rail 3,3 V de l'Arduino.

Le site Formation à l'informatique et l'électronique explique comment procéder.
Il explique aussi comment installer une carte ESP8266 dans l'environnement Arduino.