Initialiser le module wifi ESP8266

Créer une communication sans fil via le wifi est possible et rapidement configurable avec un arduino en utilisant un module wifi ESP8266.

Les méthodes décrites ci-dessous permettent une initialisation pour  l’utilisation des commandes AT, pour pouvoir uploader des sketch et faire fonctionner de manière autonome l’ESP8266, il faut flasher le firmware avec NodeMcu, la marche à suivre est décrite dans cet article.

J’ai fait l’acquisition d’un module wifi ESP8266 (ici), il n’est pas très cher et permet de connecter son arduino à un réseau wifi existant ou d’en créer un.

Il faut noter que la portée du wifi n’est pas énorme (en navigant sur plusieurs forum, quelques dizaine de mètres) et que sa consommation est relativement importante.

J’ai pas mal cherché sur internet, plusieurs tutoriels sont disponibles, je n’ai pas été convaincu, plusieurs points sont souvent restés flous voire des oublis impardonnables étaient faits. Je vais m’efforcer de faire un tutoriel le plus clair et complet précis pour une mise en oeuvre rapide.

Afin de vous assurer que tout à bien été configuré, testez en suivant ce tutoriel.

Le module wifi ESP8266

Tout d’abord, voici la documentation technique : Documentation technique ESP8266.

J’utiliserai l’ESP8266, version 1 qui dispose de deux ports GPIO, oui le module peut fonctionner en stand alone.

Une des choses les plus importante à noter est que ce module fonctionne en 3.3V et que le 3.3V fourni par l’arduino ne sera pas suffisant, l’intensité étant trop faible, il faut prévoir une alimentation externe de 3.3V (soit une alimentation directe ou bien en passant par un diviseur de tension).

La description des pins :

pin esp8266
pin esp8266

Pour le fonctionnement, il faut que le RST soit à 3.3V, la mise à la masse réinitialise le module.

Initialisation du module ESP8266

Ce module utilise les commande AT pour sa configuration, je vais montrer trois méthodes différentes (une quatrième sera vu plus tard). Je montre les deux car dans mes recherches, j’ai vu tout et n’importe quoi (je suis énervé, j’ai cramé l’un des module que j’avais).

Dans les deux cas, j’utilise un Arduino pour communiquer (mon interface série n’étant toujours pas arrivée).

Pour l’initialisation, la pin GPIO0 doit être à la masse au démarrage de l’ESP8266 ce qui permet de rentrer dans le flash mode

Première méthode pour l’initialisation de l’ESP8266

Pour cette méthode vous aurez besoin d’un convertisseur USB/TTL, disponible ici. Ce convertisseur à l’avantage de pouvoir fournir des niveaux logiques de 3.3V et 5V.

Réaliser le câblage suivant :

ESP8266 FTDI
ESP8266 FTDI

Il faut noter que la programmation se fera par l’IDE arduino.

Aller dans Fichier => Préférences et dans url, gestionnaires de carte supplémentaire, saisir : http://arduino.esp8266.com/stable/package_esp8266com_index.json

Ensuite dans Outils => Type de cartes => Gestionnaire de carte, rechercher ESP8266 puis l’installer.

Choisissez votre carte dans Outils => Type de cartes.

La pin TX de l’arduino par sur un diviseur de tension afin d’éviter de donner une tension de 5V au module qui risquerai de le brûler.

Ouvrir Arduino et créer un nouveau fichier :

arduino vierge
arduino vierge

Ouvrir le terminal, indiquer la vitesse de communication (celle de mon module est 115200 bauds) et choisir les deux, NL et CR

Dans la zone de saisie, saisir la commande AT , vous devriez voir apparaître dans la console :

commande AT
commande AT

Si vous voyez apparaître « ok », c’est que tout est bon sinon :

  1. vérifier le câblage, si le module est alimenté, une led doit s’allumer
  2. changer la vitesse de communication

Je vous mets à disposition la listes des commandes AT disponible AT.

Pour l’initialisation (une fois que la première commande a bien fonctionné, saisir (il doit toujours y avoir un retour, soit OK ou Ready):

  1. Effectuer un reset : AT+RST
  2. Activer le mode du module en station et en point d’accès : AT+CWMODE=3
  3. Voir les réseaux disponibles :AT+CWLAP
  4. Rejoindre un réseau :AT+CWJAP= »<access_point_name> », »<password> » , garder les guillemets
  5. Vérifier si le module a bien une addresse IP :AT+CIFSR

Maintenant, vous devriez voir l’adresse IP de votre module et voir votre module sur les réseaux wifi disponible.

Seconde méthode pour initialiser l’ESP8266

Cette méthode est un mixte entre la première et la troisième, elle n’est pas automatique mais permet de le faire pas à pas.

Le câblage est le même que pour la troisième solution :

esp8266 via arduino
esp8266 via arduino

Le script à téléverser dans l’arduino :

#include <SoftwareSerial.h>
// On crée une communication série software pour l'ESP8266
SoftwareSerial espSerial(2, 3); // RX, TX
void setup() {
  // On ouvre une communication serie hardware pour les messages destines au moniteur série
  Serial.begin(115200);
  // On ouvre la communication serie software pour l'ESP8266
  espSerial.begin(115200);
  
  delay(1000);
  Serial.println("Pret.");
}
void loop() { 
  // si l'ESP8266 a quelque chose a nous dire, on ecrit son message sur le moniteur série
  if (espSerial.available()) {
    Serial.write(espSerial.read());
  }
  // si quelque chose a été saisi dans le moniteur série, on l'envoie à l'ESP8266
  if (Serial.available()) {
    espSerial.write(Serial.read());
  }
}

Pour automatiser la procédure, voir la troisième méthode.

Troisième méthode pour l’initialisation de l’ESP8266

Il peut être fastidieux de faire cette manipulation surtout si on doit le faire fréquemment ou de manière répéter, nous allons donc nous servir de l’arduino pour créer un petit script qui fera la même chose, le câblage est un peu différent :

esp8266 via arduino
esp8266 via arduino

Pour le script :

#include <SoftwareSerial.h>

SoftwareSerial ESP8266(2, 3);

String NomduReseauWifi = "votre nom de réseau"; // Garder les guillements
String MotDePasse      = "votre mot de passe"; // Garder les guillements

/****************************************************************/
/*                             INIT                             */
/****************************************************************/
void setup()
{
  Serial.begin(115200);
  ESP8266.begin(115200);  
  initESP8266();
}
/****************************************************************/
/*                        BOUCLE INFINIE                        */
/****************************************************************/
void loop()
{
   while(ESP8266.available())
   {    
     Serial.println(ESP8266.readString());
   }   
}
/****************************************************************/
/*                Fonction qui initialise l'ESP8266             */
/****************************************************************/
void initESP8266()
{  
  Serial.println("**********************************************************");  
  Serial.println("**************** DEBUT DE L'INITIALISATION ***************");
  Serial.println("**********************************************************");  
  envoieAuESP8266("AT+RST");
  recoitDuESP8266(2000);
  Serial.println("**********************************************************");
  envoieAuESP8266("AT+CWMODE=3");
  recoitDuESP8266(5000);
  Serial.println("**********************************************************");
  envoieAuESP8266("AT+CWJAP=\""+ NomduReseauWifi + "\",\"" + MotDePasse +"\"");
  recoitDuESP8266(10000);
  Serial.println("**********************************************************");
  envoieAuESP8266("AT+CIFSR");
  recoitDuESP8266(1000);
  Serial.println("**********************************************************");
  envoieAuESP8266("AT+CIPMUX=1");   
  recoitDuESP8266(1000);
  Serial.println("**********************************************************");
  envoieAuESP8266("AT+CIPSERVER=1,80");
  recoitDuESP8266(1000);
  Serial.println("**********************************************************");
  Serial.println("***************** INITIALISATION TERMINEE ****************");
  Serial.println("**********************************************************");
  Serial.println("");  
}

/****************************************************************/
/*        Fonction qui envoie une commande à l'ESP8266          */
/****************************************************************/
void envoieAuESP8266(String commande)
{  
  ESP8266.println(commande);
}
/****************************************************************/
/*Fonction qui lit et affiche les messages envoyés par l'ESP8266*/
/****************************************************************/
void recoitDuESP8266(const int timeout)
{
  String reponse = "";
  long int time = millis();
  while( (time+timeout) > millis())
  {
    while(ESP8266.available())
    {
      char c = ESP8266.read();
      reponse+=c;
    }
  }
  Serial.print(reponse);   
}

Ce code provient de www.les-electroniciens.com, il y a juste un petit souci, la programmation se fait bien mais il m’affiche de caractères inconnus cependant le script fonctionne.

Vous avez maintenant un module ESP8266 fonctionnel, en espérant que celui-ci vous permette de mettre facilement en oeuvre votre module.

One Reply to “Initialiser le module wifi ESP8266”

  1. Problème avec Arduino UNO R3, softwareserial bloque à 57600bds en RX
    Modification du programme dans initESP8266(): passage de 115200bds (démarrage dans setup()) à 9600bds

    void initESP8266()
    { Serial.println(« ***************************************************** »);
    Serial.println(« ************* DEBUT DE L’INITIALISATION ************* »);
    Serial.println(« ***************************************************** »);
    envoieAuESP8266(« AT+RST »);
    recoitDuESP8266(2000);
    Serial.println(« ***************************************************** »);
    envoieAuESP8266(« AT+UART_DEF=9600,8,1,0,0 »);
    recoitDuESP8266(5000);
    ESP8266.end();
    delay(10);
    ESP8266.begin(9600);
    Serial.println(« ***************************************************** »);

Laisser un commentaire