Ajouter du Wifi à votre arduino avec un esp8266

Pour mon projet de voiture controlée par arduino, il me fallait un moyen de connexion sans fil simple à mettre en place. J'ai donc cherché une puce wifi à la fois basse consommation, performante et simple à prendre en main et à monter sur un arduino.

On commence à beaucoup parler de la puce ESP8266 sur le forum arduino depuis quelques semaines, j'ai donc décidé de tester cette solution par moi-même et de partager mon expérience. A la fin de cet article, vous saurez comment ce module fonctionne et surtout comment l'utiliser avec votre arduino !

Le matériel.

Dés le déballage, on se rend compte que la puce est vraiment minuscule. Elle n'est pas spécialement fragile mais il faut quand même faire attention à la manipuler avec soin.

Voici la liste du matériel utilisé dans la suite de cet article. Si vous n'avez pas ce matériel, chaque lien enméne vers la page ou je l'ai acheté.

Si jamais la prise en main vous parait compliqués, il existe des cartes ESP avec une interface wifi intégrée et programmable aussi simplement qu'un arduino. Pour ces cartes, rendez-vous sur mon article Prendre en main nodeMCU.

N'hésitez pas à adapter suivant le matériel que vous avez déjà. Si vous êtes en train de passer commande, je vous invite à lire la suite avant de vous lancer. L'esp8266 à quelques spécificités qu'il faut prendre en compte si vous ne voulez pas perdre trop de temps.

Pour les détenteurs d'une carte Uno, cela va être plus compliqué. En effet, si vous voulez programmer votre arduino, et garder l'esp branché, il faudra au minimum deux serials hardware: un pour le pc, et un pour l'ESP. Comme la Uno n'en propose qu'un, je vous conseille soit d'opter pour une Arduino Leonardo soit pour une Arduino Méga. Hello world!

L'ESP8266 est vraiment une carte minuscule mais très performante. Pour la programmer nous allons donc commencer par le classique Hello World. NE sautez pas cette partie, contrairement a l'arduino, l'esp n'est pas facile a prendre en main au premier abord.

La puce dispose de 8 broches mais dans notre cas on va travailler avec seulement 6. La disposition de ces broches n'est pas pratique car la puce ne s'emboite pas sur une breadboard standard (Vive les fils volants!)

Le schéma des pins vu depuis le coté puce est le suivant:

--------------------------------
| TX    GND |      ____    ___ |
| CHPD  GP1 |     |    |   ___||
| RST   GP2 |     |____|  |___ |
| 3V     RX |              ___||
--------------------------------
  • Les pins GP1 et GP2 resterons libres.
  • Les pins RST et CHPD seront brochés sur des pins 8 et 9 de l'arduino.
  • Le pin 3V est branché sur le Pin +3V de l'arduino.
  • Le pin GND est commun avec celui de l'arduino.
  • Les pins TX/RX seront branchés sur une liaison série. Dans mon cas se sera les pins 0 et 1 de la Léonardo.

Un fois les branchements faits, connectez l'arduino. La led rouge de l'esp doit s'allumer.

arduinoesp8266

Vue du montage final de l'ESP8266 sur une Arduino Léonardo.

La programmation

Chargez le programme suivant dans votre arduino:

#define RST_PIN  8
#define CHPD_PIN 9
#define DISP_PIN 13

void setup() {
    //Ouvre le serial vers le pc (serial)
    //    et vers l'esp (serial1)
    Serial.begin(9600);
    Serial1.begin(115200);
    //Leonardo: On attend l'ouverture 
    //    du serial sur le pc avant de continuer
    while(!Serial);
    
    //Place les reset en sortie
    pinMode(RST_PIN, OUTPUT);
    pinMode(CHPD_PIN, OUTPUT);

    //Met a zéro (reset l'ESP)
    digitalWrite(RST_PIN, LOW);
    digitalWrite(CHPD_PIN, LOW);
    
    //Délai just in case
    delay(500);
    
    //Active l'esp
    digitalWrite(RST_PIN, HIGH);
    digitalWrite(CHPD_PIN, HIGH);
}

void loop() {
    //transfere ce qui est reçu de l'esp vers le pc
    if ( Serial1.available() ) {  
        Serial.write( Serial1.read() );  
    }
    //Transfere ce qui est reçu du pc vers l'esp
    if ( Serial.available() ) {
        Serial1.write( Serial.read() );
    }
}

Une fois le programme chargé, la led bleue de l'ESP doit clignotter un trés bref instant lorsque l'arduino s'initialise. Si tout est bon on peux donc, via le terminal série, envoyer des commandes à l'ESP8266 à travers notre arduino.

Réglez votre terminal pour envoyer CR et LF en caractére de fin de ligne. Puis envoyez la commande AT (suivie d'un retour à la ligne). Si l'ESP répond OK, c'est tout bon. Essayez ensuite la commande AT+RST pour enclencher un reset soft.

En cas de problème, vérrifiez que la LED bleue s'allume quand vous envoyez une commande. Si ce n'est pas le cas, vérrifiez les lignes TX/RX qui sont peut-êtres inversées (essayez dans les deux sens, au pire il n'y a aucun risque). Il est possible aussi que le baud rate de l'arduino vers l'ESP ne soit pas le bon. Le mien fonctionne en 115600, mais il parait que certains fonctionnent en 9600 bauds.

Pour la suite ?

Les commandes AT fonctionnement très bien pour des usages simples et peu critique mais ont de grosses limites. Par exemple si l'arduino ne lis pas la liaison série assez vite, il est possible que des messages soient perdus ou coupés car le buffer de la liaison se remplit trés vite à 115600 bauds.

Une fois que vous maitriserez la base de l'ESP avec les commandes AT, je vous conseille mon article pour changer le firmware de l'ESP8266 pour quelque chose de plus évolué et libérer la vrai puissance de la puce!

Qu'avez vous pensé de cet article?