ESP8266: comment téléverser facilement un programme

L’ESP8266

L’ESP8266 (de la société Espressif) est un micro-contrôleur qui, n’ayons pas peur des mots, a révolutionné la connectivité Wifi dans les applications DIY. En effet, il est très peu cher (schématiquement entre 2 et 10 € en fonction de la complexité du module sur lequel il est mis en œuvre ) et il se programme facilement pour fonctionner de façon totalement autonome, sans qu’il soit indispensable de l’associer à une carte Arduino classique.

Si vous ne connaissez pas l’ESP8266, je vous recommande vivement la lecture des n°7 et 8 d’Hackable Magazine. D’ailleurs, si le monde du DIY, de l’Arduino, du Raspberry Pi, etc… vous intéresse, la lecture de ce magazine fera votre bonheur.

Sans trop entrer dans les détails, il faut savoir que l’ESP8266 s’achète intégré à des modules plus ou moins sophistiqués:

  • Le plus basique est sans doute l’ESP-01 qui présente, avec 8 broches (1 interface série, 3 GPIO, le Vcc, la masse et le reset), un échantillon des capacités du micro-contrôleur. Ca peut sembler très limité, mais c’est  suffisant pour commander un relais en Wifi, par exemple
  • On trouvera dans la catégorie intermédiaire:
    • les modules ESP-xx dont le facteur de forme ne correspond à rien de réellement connu
    • des modules au format XBee, comme le Wee ESP8266
  • Il existe enfin des modules beaucoup évolués (NodeMCU, SparkFun ESP8266 Thing, Adafruit HUZZAH ESP8266, Olimex MOD-WIFI-ESP8266-DEV, etc…) incluant même pour certains une interface USB / série pour téléverser facilement un programme sur le module

ESP-01

ESP-01

Wee ESP8266

Wee ESP8266

NodeMcu

ModeMCU

 

Car c’est bien là que le bât blesse sur la plupart des modules: le téléversement des programmes. Dans Hackable n°7, Denis Bodor explique de façon très instructive les manipulations permettant de réaliser cette opération sur un ESP-01. Ca fonctionne, bien entendu, mais ceux qui ont l’habitude de téléverser un programme Arduino d’un clic de souris seront peut-être rebutés par la nécessité de réaliser un petit montage dédié et de devoir appuyer sur un bouton poussoir au bon moment.

Pourquoi les concepteurs n’ont pas prévu de méthode plus aisée ? Tout simplement parce qu’à l’origine la plupart de ces modules ne sont pas faits pour être reprogrammés. Ils sont fournis avec un firmware leur permettant d’interagir par l’intermédiaire de leur liaison série avec un autre matériel (une carte Arduino, par exemple), via l’utilisation de commandes AT sur ce dernier.

Mais il existe depuis un certain temps un support logiciel, dans l’environnement Arduino, pour programmer les ESP8266 avec la même facilité que les autres Arduino. Ceci permet d’utiliser beaucoup plus largement les possibilités de ce micro-contrôleur.

L’ajout du support de l’ESP8266 dans l’environnement Arduino se fait de la façon suivante (attention, les opérations suivantes conduisent à écraser le firmware d’origine du module):

  • Utilisez la version 1.6.4 ou supérieure de l’IDE Arduino
  • Lancez l’IDE Arduino
  • Dans le menu Fichier → Préférences, ajoutez l’adresse http://arduino.esp8266.com/package_esp8266com_index.json dans la zone « URL de gestionnaire de cartes supplémentaires ». Notez que vous pouvez ajouter plusieurs adresses les unes à la suite des autres (si nécessaire) en les séparant par des virgules
  • Cliquez sur OK puis aller dans Outils → Type de carte → Gestionnaire de carte
  • Ecrivez ESP8266 dans la zone de recherche
  • L’item « esp8266 by ESP8266 Community » s’affiche alors
  • Sélectionnez-le, sélectionnez une version (au hasard, la dernière 😉 ) et cliquez sur « Installer »
  • Une fois l’installation terminée, fermez cette fenêtre et ouvrez Outils → Type de carte. Descendez dans la liste et vous trouverez toute une zone concernant les modules à base d’ESP8266

Dans tout ce qui suit, le paramétrage choisi est le suivant:

programmation_esp01

D’autres types de carte peuvent fonctionner mais comme j’utilise également couramment des NodeMCU (qui eux, intègrent un programmateur), ça m’évite de faire des changements inutiles.

Reste à interfacer matériellement votre module à votre ordinateur. Si la méthode « bricolage » (ce n’est pas péjoratif) avec fils et bouton poussoir ne vous convient pas, une méthode plus confortable consiste à utiliser un programmateur dédié. Malheureusement, le confort se paye et vous devrez pour cela alléger votre porte monnaie de quelques euros supplémentaires…

 

Programmateur pour ESP-01

Le titre de cette partie est un peu restrictif car ce « programmateur pour ESP-01 » permet en réalité de téléverser facilement des programmes sur les nombreux modules à base d’ESP8266 qui n’embarquent pas d’interface USB / série, grâce à son circuit d’auto-reset (voir photo ci-dessus). La puce réalisant l’interface USB / série est une CP2102 ; le driver adapté à votre ordinateur peut se télécharger à cette adresse:
https://www.silabs.com/products/mcu/Pages/USBtoUARTBridgeVCPDrivers.aspx

Ce produit est particulièrement adapté à l’ESP-01 puisque ce dernier peut se connecter directement comme ceci:

Mais vous aurez noté qu’il possède aussi une interface pour le module ESP-11 ainsi qu’un port UART « générique », c’est-à-dire identique à celui que l’on trouve couramment sur les module FTDI comme celui-ci. Ceci signifie que vous pouvez faire avec ce programmateur la même chose qu’avec un FTDI standard. Vous pouvez donc utiliser un seul produit pour programmer à la fois les ESP8266 et les Arduinos (par exemple) ne possédant pas d’interface USB intégrée (comme l’Arduino Pro Mini).

Si votre module ESP8266 ne peut pas se connecter directement sur le programmateur, il vous reste à utiliser des fils pour faire les connexions. Par exemple, la programmation d’un module Olimex MOD-WIFI-ESP8266-DEV se fait comme ceci:

programmation_1

Ensuite, dans tous les cas, le téléversement du programme se fait en un clic de souris depuis l’IDE Arduino, pas besoin d’appuyer à la main sur un bouton poussoir puisque ce programmateur intègre un circuit d’auto-reset.

 

Programmateur pour Wee ESP8266

Le module ESP-01 est très intéressant pour son faible coût mais on peut lui reprocher un défaut: il n’est pas facile de le mettre en œuvre proprement et rapidement si on veut apporter une connectivité Wifi à un projet à base d’Arduino standard. Certes, c’est un peu le cas de tous les projets à base d’Arduino: par manque d’un nombre suffisant de broches de masse et d’alimentation, on est quasiment toujours obligé (tout au moins dans un premier temps) d’utiliser une plaque d’essai et un paquet de fils qui font penser à un plat de spaghetti (c’est peut-être voulu, l’Arduino étant né en Italie 😉 ).
Avec l’ESP-01, c’est encore plus critique car on ne peut pas le brancher directement sur une plaque d’essai, il faut un adaptateur.

 

Wee ESP8266

 

Pour éviter ces inconvénients, un module XBee à base d’ESP8266, comme le Wee, apporte une solution élégante.

 

 

 

 

Reste à résoudre deux nouveaux problèmes:

  1. Comment connecter un module XBee à un Arduino ? Ne va-t-on pas vers un nouveau paquet de fils ?
  2. Comment programmer ce module XBee ?

 

Connexion du Wee ESP8266 (ou tout autre module XBee) sur un Arduino

Shield entrées/sorties

Le shield entrées/sorties permet de résoudre d’un seul coup au moins deux problématiques:

  • La connexion du Wee ESP8266, grâce à son socket XBee
  • Le branchement propre d’autres éléments du montage, grâce aux rangées de broches de masse et d’alimentation

Concernant ce dernier point, imaginez devoir brancher, par exemple, 5 servomoteurs sur votre carte Arduino… Avec le shield entrées/sorties, aucun bricolage à faire, les branchements se font directement sur les triplés GND – Vcc – Signal. Il y a même un bornier permettant d’utiliser une alimentation spécifique pour les servomoteurs (si ceux-ci consomment beaucoup de courant).

L’interrupteur que vous pouvez apercevoir sur la photo ci-dessus entre les deux borniers verts permet de commuter le shield entre les modes « programmation » et « exécution ». En effet, lorsqu’un module XBee est connecté sur le shield, il utilise la liaison série native de l’Arduino… qui sert aussi à la programmation de ce dernier (sur le Uno tout au moins). Lorsque l’interrupteur est sur le mode « programmation », la liaison série du module XBee est déconnectée, ce qui permet de téléverser sans problème un programme sur l’Arduino. Il faut ensuite commuter en mode « exécution » pour activer la liaison série entre le module XBee et l’Arduino.
Ce dispositif permet ainsi de ne pas avoir à enlever le module lors du téléversement des programmes sur un Arduino Uno.

Revenons maintenant au Wee ESP8266. Le shield entrées/sorties est une solution propre à son interfaçage avec un Arduino. Voyons maintenant comment le programmer.

 

Programmation du Wee ESP8266 avec le Foca Pro

La programmation et le téléversement de programmes sur le Wee ESP8266 se fait facilement grâce au Foca Pro, qui est tout simplement un module d’interface USB / série (basé sur un CP2102, comme le programmateur d’ESP-01) intégrant un socket XBee. Il peut donc être utilisé de façon générale pour interfacer votre ordinateur avec un module XBee, mais pas exclusivement un Wee ESP8266. Ce programmateur présente également les avantages suivants:

  • Interrupteur pour choisir le niveau de tension (3.3 ou 5V)
  • Interface Grove
  • 5 broches (DTR, GND, RXD, TXD, VIO) pour se connecter à d’autres types de matériels que des modules XBee

Pour revenir spécifiquement à la programmation du Wee ESP8266, les étapes à réaliser sont les suivantes:

  • Placez le commutateur de niveau de tension sur 3.3V
  • Branchez le Wee
  • Mettez le commutateur du Wee sur « FW » (comme « Firmware »)
  • Branchez le Foca Pro sur un port USB de votre ordinateur
  • Eventuellement, appuyez sur le bouton « Reset » du Foca Pro (ça n’est pas indispensable, mais faites-le si vous avez un échec lors d’un téléversement)
  • Depuis l’IDE Arduino, lancez le téléversement de votre programme comme vous le faites habituellement (après avoir, bien sûr, choisi le bon type de carte, voir plus haut)

Avant de brancher le Wee ESP8266 sur votre carte Arduino (via le shield entrées-sorties, par exemple), n’oubliez pas de remettre son commutateur sur « WORK » (comme… « Work » 😉 ).

Notez que si ça a un sens dans votre application (pour faire des tests, par exemple), vous pouvez laisser le Wee sur le Foca Pro et, après avoir remis le commutateur sur « WORK », cliquer sur le bouton reset du Foca Pro pour lancer l’exécution du programme sur le Wee. Si vous avez mis des « Serial.print » dans votre croquis Arduino, vous verrez les messages correspondants s’afficher dans la console série.

 

Conclusion

Cet article vous a présenté différentes méthodes pour téléverser des programmes sur les modules à base d’ESP8266 qui n’intègrent pas d’interface USB / Série, en particulier sur l’ESP-01 (avec son programmateur dédié) et sur le Wee ESP8266, grâce au Foca Pro.

Notez que tous les produits dont nous parlons dans ce blog et l’immense majorité de ceux qui sont vendus dans notre boutique sont utilisés dans les différents projets que nous développons et en particulier dans nos systèmes didactiques. Par exemple, le Wee ESP8266 est utilisé dans la version basique du robot T-Quad afin de lui apporter une connectivité Wifi bon marché pour le piloter à distance (les versions plus évoluées utilisent des cartes Raspberry Pi ou pcDuino, ce qui permet de faire en plus de la programmation Python, de la transmission vidéo, etc…).

Je vous recommande également de jeter un œil au projet MyViz (en cours de développement), qui permet de créer facilement des panneaux de contrôle et de visualisation sur différents types de matériels. Vous trouverez notamment des tutoriaux (en anglais, mais ça reste a priori compréhensible, le vocabulaire est plus limité que dans une pièce de Shakespeare…) sur Arduino ou ESP8266.

Dans un prochain article, je vous présenterai des croquis mettant en œuvre une communication série entre un Arduino et un ESP8266 et une communication par Websocket entre un ESP8266 et MyViz. Restez connecté !