Prise en main de l’ESP8266 avec NodeMCU

Comme tout projet IOT, il est normal de se frotter à l’ESP8266 qui a d’énormes qualités, dont celle de se connecter en wifi et de pouvoir faire tourner un serveur web. Nous allons le prendre en main ici et faire quelques tests.

L’ESP8266

L’ESP8266 est un module wifi qui peut être utilisé en deux façons :

  • couplé avec un Arduino pour lui fournir le wifi
  • de manière autonome en produisant un serveur web, avec lequel on peut intéragir sur ses GPIO. On lui enverra donc du code Arduino directement.

Il existe plein de déclinaison de l’ESP8266, j’ai choisi pour la part une version 12 avec NodeMCU, commandé sur Amazon.

NodeMCU est l’interface entre le 8266 et l’ordinateur. Cela sert entre autre à la programmer. Il est accompagné d’un port micro usb sur lequel on se branche. C’est ce côté facile que je voulais tester. On verra plus tard pour programmer la puce ESP8266 directement et réduire encore la taille de notre IOT.

Communiquer avec NodeMCU et l’ESP8266

Dans Arduino, il faut d’abord remplir l’url http://arduino.esp8266.com/stable/package_esp8266com_index.json dans les préférences puis URL de gestionnaires de cartes supplémentaires.

Allez ensuite dans Outils -> Type de carte -> Gestionnaire de cartes.

Chercher ESP8266 et installer le package.

Gestionnaire de package

Ensuite, il faut paramétrer le type de carte. Pour celle-ci, choisir NodeMCU 1.0 (ESP12E Module).

Puis brancher votre NodeMCU et choisissez le port USB correspondant.

Ouvrez le moniteur série et paramétrer le vitesse de sortie. Elle doit être normalement de 115200 (vérifier dans Outils -> Upload Speed).

Mon premier site web

Nous allons écrire un premier programme permettant de se connecter au wifi et d’afficher une page simple. Nous allons faire un simple Hello World.

Je vous met ci dessous le code complet. Pensez à remplacer votre SSID et votre password.

#include <ESP8266WiFi.h>
 
const char* ssid = "mon ssid";
const char* password = "xxxxxxxxx";

WiFiServer server(80);
 
void setup() {
  Serial.begin(115200);
  delay(10);
 
  // 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();
 
  // 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("Hello World, NodeMCU connected 🙂 ");
  client.println("</html>");
 
  delay(1);
  Serial.println("Client disonnected");
  Serial.println("");
 
}

Ne soyez pas surpris de la vitesse d’envoi du code, c’est beaucoup plus long que sur un Arduino : c’est normal !

Dans le programme, on demande au moniteur série de nous afficher l’URL pour se connecter.

Vous voyez le résultat facilement.

Conclusion

Vous avez donc compris : on dispose de GPIO, d’un serveur web, de wifi … à nous les objets connectés type sonde de température DS18B20, DHT22, BME280, mais aussi capteur divers de porte, etc …

Nous verrons dans de prochains articles la gestion de l’alimentation, l’optimisation de l’énergie dans le code source, le dialogue avec les GPIO, …

A vous de jouer !

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.