NodeMcu ou comment piloter des prises via le Wifi pour moins de 10€

NodeMcu ou comment piloter des prises via le Wifi pour moins de 10€

24 avril 2018 0 Par Jérôme Ferrari

Bonjour,

Aujourd’hui, on va étudier la problématique d’alimenter ou d’éteindre des prises à distance via un réseau Wifi.

Pour information, Les sources sont CC-BY-NC-SA https://creativecommons.org/licenses/by-nc-sa/3.0/fr/

Les objectifs secondaires sont un pilotage via un site web, une solution coutant moins de 10€ et peu gourmande en énergie.

J’ai donc décidé de partir sur une solution basée sur un nodeMcu (ESP8266) et de relais.

Personnellement, j’ai acheté un lot de nodeMcu v3 sur aliexpress. Idem pour les relais.

Pour cette utilisation, j’ai acheté 1 module relais comprenant 4 relais car je n’ai que 3 prises et 1 lampe à gérer.

Bon, maintenant passons aux choses sérieuses…

Pour commencer, je passe par l’IDE d’arduino pour faire la programmation.

Dans un premier temps, il faut commencer par déclarer la board dans l’IDE.

Aller dans les préférences de votre IDE puis dans URL de gestionnaire de cartes supplémentaires et coller le lien suivant:

http://arduino.esp8266.com/stable/package_esp8266com_index.json

Cliquer ensuite sur OK.

Ensuite aller dans Outils -> Type de cartes -> Gestionnaire de carte

Rechercher esp8266 puis installer.

Une fois que cela est fait, cliquer sur OK.

Vous pouvez maintenant connecter votre NodeMcu sur l’ordinateur.

Pour ma part, j’ai dû installer les drivers CH340G pour le faire fonctionner.

Maintenant que tout est ok, nous allons tester le fonctionnement de la carte.

Pour cela, je vais utiliser une LED connectée directement au GND et à la pin D7 (qui correspond à la pin 13 pour un arduino)

Pour les paramètres de communication dans l’IDE, j’ai mis ceux-ci:

Et pour le programme, j’ai utilisé ce code pour faire un test:

// Blink

// the setup function runs once when you press reset or power the board
void setup() {
  // initialize Pin D7 or digital pin 13 as an output.
  pinMode(13, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(13, HIGH);   // turn the LED on
  delay(1000);              // wait for a second
  digitalWrite(13, LOW);    // turn the LED off
  delay(1000);              // wait for a second
}

Une fois l’upload effectué la LED doit se mettre à clignoter.

Maintenant, nous allons passer à la partie “Site WEB”.

Il s’agira d’une interface HTML des plus basique.

Dans un premier temps, on va vérifier que le NodeMcu voit bien les réseaux Wifi.

Pour cela, j’utilise le code suivant:

#include "ESP8266WiFi.h"

void setup() {
  Serial.begin(115200);
  // Set WiFi to station mode and disconnect from an AP if it was previously connected
  WiFi.mode(WIFI_STA);
  WiFi.disconnect();
  delay(2000);
  Serial.println("Setup done");
}

void loop() {
  Serial.println("scan start");

  
  int n = WiFi.scanNetworks();// WiFi.scanNetworks will return the number of networks found
  Serial.println("scan done");
  if (n == 0)
    Serial.println("no networks found");
  else
  {
    Serial.print(n);
    Serial.println(" networks found");
    for (int i = 0; i < n; ++i)
    {
      // Print SSID and RSSI for each network found
      Serial.print(i + 1);
      Serial.print(": ");
      Serial.print(WiFi.SSID(i));
      Serial.print(" (");
      Serial.print(WiFi.RSSI(i));
      Serial.print(")");
      Serial.println((WiFi.encryptionType(i) == ENC_TYPE_NONE)?" ":"*");
      delay(10);
    }
  }
  Serial.println("");

  // Wait a bit before scanning again
  delay(5000);
}

Une fois téléchargé dans le NodeMcu, on ouvre le moniteur série. Normalement, on doit voir les réseaux qui nous entourent comme dans l’exemple ci-dessous.

Maintenant que l’on voit les réseaux wifi et que l’on sait contrôler une LED… On va mixer tout cela pour contrôler une LED via un site Web!!!

Pour cela, j’utilise le code suivant:

#include <ESP8266WiFi.h>

// set wifi IDs
const char* ssid = "wireless";
const char* password = "password";

// attach led to pin 13
int ledPin = 13; // GPIO13
WiFiServer server(80);
 
void setup() {
  Serial.begin(115200);
  delay(10);
 
  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, LOW);
 
  // Connect to WiFi network
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
 
  WiFi.begin(ssid, password);
 
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
 
  // Start the server
  server.begin();
  Serial.println("Server started");
 
  // Print the IP address
  Serial.print("Use this URL to connect: ");
  Serial.print("http://");
  Serial.print(WiFi.localIP());
  Serial.println("/");
 
}
 
void loop() {
  // Check if a client has connected
  WiFiClient client = server.available();
  if (!client) {
    return;
  }
 
  // Wait until the client sends some data
  Serial.println("new client");
  while(!client.available()){
    delay(1);
  }
 
  // Read the first line of the request
  String request = client.readStringUntil('\r');
  Serial.println(request);
  client.flush();
 
  // Match the request
 
  int value = LOW;
  if (request.indexOf("/LED=ON") != -1)  {
    digitalWrite(ledPin, HIGH);
    value = HIGH;
  }
  if (request.indexOf("/LED=OFF") != -1)  {
    digitalWrite(ledPin, LOW);
    value = LOW;
  }
 
// Set ledPin according to the request
//digitalWrite(ledPin, value);
 
  // Return the response
  client.println("HTTP/1.1 200 OK");
  client.println("Content-Type: text/html");
  client.println(""); //  do not forget this one
  client.println("<!DOCTYPE HTML>");
  client.println("<html>");
 
  client.print("Led pin is now: ");
 
  if(value == HIGH) {
    client.print("On");
  } else {
    client.print("Off");
  }
  client.println("<br><br>");
  client.println("<a href=\"/LED=ON\"\"><button>Turn On </button></a>");
  client.println("<a href=\"/LED=OFF\"\"><button>Turn Off </button></a><br />");  
  client.println("</html>");
 
  delay(1);
  Serial.println("Client disonnected");
  Serial.println("");
 
}

Une fois l’upload terminé, on ouvre le terminal pour connaitre l’adresse IP du NodeMcu.

Nous pouvons donc aller sur un navigateur et on tape l’URL donnée. On peux enfin jouer avec les boutons et voir la LED s’allumer et s’éteindre.

On peut même récupérer l’état des actions via le moniteur série

Et voila maintenant on sait piloter une LED via le Wifi!

Pour le reste, il suffit d’adapter le code afin de piloter le module relais et de connecter le tout sur une source de 5V!

Mon code et une photo de l’installation arrivent bientôt…

Les sources pour cet article sont:

https://www.hackster.io/Aritro/getting-started-with-esp-nodemcu-using-arduinoide-aa7267

https://ouiaremakers.com/posts/tutoriel-diy-un-capteur-de-temperature-humidite-en-wifi-avec-une-page-web

@Bientôt

Ferrader