Mise en route d’un ESP8266-01

L’ESP-01 présenté ici, m’a été transmis par Didel. Donc merci à Jean-Daniel Nicoud.

ESP8266-01

L’ESP8266-01

L’ESP8266-01 est un SoC (System on Chip) qui contient un microcontrôleur et un système WiFi. Il ne fonctionne qu’en 3.3 V et n’est pas tolérant au 5 V. Il a deux GPIO (0 & 2) qui peuvent être utilisés pour la communication I²C. Il est pourvu d’un port RS232 qu’on peut utiliser pour lui envoyer des commandes AT. Dans ce tuto, je présente deux façons différentes d’utiliser cet ESP :

Pour la première partie sur les commandes AT, le firmware NodeMCU doit être installé sur l’ESP. C’est en général le cas pour les ESP neufs.

Lorsque l’ESP est programmé en Arduino C, cela écrase le firmware NodeMCU, mais rien n’est perdu, on peut le flasher à nouveau.

À noter encore que NodeMCU ne permet pas seulement d’utiliser les commandes AT, mais permet également de programmer l’ESP dans le langage Lua, mais ce n’est pas l’objet de ce tuto.

Programmation avec des commandes AT

Sur le web, on trouve surtout des tutos qui décrivent la solution utilisant les commandes AT. À mon avis c’est du gâchis, car ces commandes ne donnent accès qu’à une petite partie des fonctionnalités de ce SoC et nécessitent d’utiliser un microcontrôleur externe alors même que l’ESP en contient déjà un de très bonne facture. Cependant, les commandes AT peuvent être utiles pour des premiers tests.

Les commandes AT peuvent vite être très limitantes car il faudra prévoir toutes les réponses possibles et le programme deviendra donc vite très complexe. En plus ces commandes évoluent avec les versions des firmwares. Donc la compatibilité n’est pas assurée.

L’idée est d’utiliser un ordi avec CoolTerm pour envoyer quelques commandes AT à l’ESP-01. Comme je n’ai pas de bridge USB-RS232, j’utilise un module ESP-12E Amica sur lequel j’ai connecté la broche RST au GND pour que l’ESP-12E ne démarre pas. Ainsi les commandes envoyées de l’ordi se retrouvent directement sur les broches TX et RX de l’ESP-12E. Ce montage peut être schématiquement représenté de la façon suivante :

ordi TX -------   - ESP8266-12E TX ------- ESP8266-01 TX
               \/
               /\
ordi RX -------   - ESP8266-12E RX ------- ESP8266-01 RX

On voit que le TX de l’ESP-12E doit être connecté au TX de l’ESP-01 et inversement pour le RX.

Il est important de comprendre que l’ESP-12E est utilisé comme un bridge USB-RS232 et pas pour ses fonctionnalités WiFi. J’aurais pu utiliser un Arduino, mais je n’ai que des modules 5 V. Donc j’ai préféré l’ESP-12E qui lui fonctionne en 3.3 V.

Câblage de l’ESP-01

  • Pour VCC et GND, il est nécessaire d’utiliser une alimentation 3.3 V externe, car l’ESP-01 peut être très gourmant (~300 mA), particulièrement lorsque le WiFi se met en route.
  • La broche CHPD (_chip power-down) doit être obligatoirement mise à VCC pour que le module soit actif.
  • Optionnellement, on peut aussi mettre RST à VCC pour s’assurer qu’il n’y a pas de reset intempestifs. Ou connecter RST avec une pull-up de 10 kΩ à VCC et un bouton poussoir à GND.
  • Connecter TX au TX de l’ESP-12E
  • Connecter RX au RX de l’ESP-12E

Câblage de l’ESP-12E
(utilisé comme bridge USB-RS232)

  • Mettre RST à GND pour que l’ESP-12E ne démarre pas.
  • Connecter TX au TX de l’ESP-01
  • Connecter RX au RX de l’ESP-01

Câblage sur breadboard

ESP8266-01 brochage

Note : Les LED rouge et verte ne sont pas connectées.

ESP8266-01 brochage

Utilisation de CoolTerm

Dans les options de CoolTerm, choisir une vitesse de transmission (9600 ou 115200 bauds). Si les commandes ci-dessous ne passent pas, modifier la vitesse. Dans mon cas, ça marche à 115200 bauds. Les commandes doivent être terminées avec CR + LF. Dans CoolTerm, il n’y a rien à configurer, par contre si on utilise le moniteur série de l’IDE Arduino au lieu de CoolTerm, il faut sélectionner l’option Les deux, NL et CR.

La première commande à tester est

AT

Et l’ESP doit répondre

OK

Ensuite on peut envoyer un reset

AT+RST

et l’ESP répond

ESP8266-01 réponse commande AT+RST

Enfin, il peut être utile de savoir quelle version du firmware est installée avec la commande

AT+GMR

Sur mon ESP, la réponse est

AT version:0.40.0.0(Aug  8 2015 14:45:58)
SDK version:1.3.0
Ai-Thinker Technology Co.,Ltd.
Build:1.3.0.2 Sep 11 2015 11:48:04
OK

Utilisation d’autres moniteurs série

À la place de CoolTerm, on peut utiliser n’importe quel autre logiciel, comme le moniteur série de l’IDE Arduino ou ESPlorer

Moniteur série de l’IDE Arduino

ESPlorer

À lire aussi

Sparkfun a un PDF avec toutes les commandes AT possibles.

Pour continuer avec les commandes AT, lire les pages suivantes :

J’ai compilé les informations de ces deux pages télégraphiquement ici :

../esp_commandes_at_utiles/

Il y a également des informations intéressantes sur ces pages :

Programmation du microcontrôleur de l’ESP-01 en Arduino C

Préalable

Comme la programmation avec l’IDE Arduino va écraser le firmware NodeMCU préinstallé sur l’ESP, il peut être utile de noter la réponse de la commande AT+GMR quelque part. Ceci permettra de retrouver la configuration d’origine si nécessaire.

Préparation de l’IDE Arduino

La procédure pour préparer l’IDE Arduino à la programmation d’un ESP-01 est la même que pour un ESP-12E :

ouilogique.com — Programmation de l’ESP8266 en Arduino C

J’ai utilisé la version 1.6.9 de l’IDE Arduino pour ces tests.

Les réglages de l’IDE sont les suivants :

Paramètres de l’IDE Arduino pour la programmation de l’ESP8266-01

Deux paramètres sont spécialement importants :

  • Le paramètre “Type de carte” doit être réglé à “Generic ESP8266 Module”.
  • Le paramètre “Flash size” doit être réglé en fonction de l’ESP utilisé. Le programme de test get-esp8266-info.ino permettra de lire les informations de l’ESP.

Câblage

Lors de la programmation, GPIO 0 doit être tiré à la masse. Par mesure de précaution, il est préférable de mettre une résistance de 330 Ω en série qui évitera des dégâts si d’aventure GPIO 0 venait à prendre un état logique haut lors de la programmation. Sur l’image ci-dessous, on voit que le fil bleu peut être déplacé en mode programmation vers la résistance de 330 Ω (colonne 39 du breadboard) ou en mode utilisation vers la LED rouge (colonne 41). La broche RST peut être mise à la masse à l’aide du fil blanc, ce qui permet de redémarrer l’ESP. Toutes les autres connexions sont identiques que pour la programmation AT.

Montage programmation ESP8266-01

Procédure de programmation

  • Déconnecter les alimentations
  • Mettre GPIO 0 à la masse
  • Reconnecter les alimentations
  • Compiler et téléverser le programme get-esp8266-info.ino
  • Déconnecter les alimentations
  • Connecter GPIO 0 à la LED rouge
  • Reconnecter les alimentations

Voici les résultats de get-esp8266-info.ino pour mon ESP-01. On voit que ESP.getFlashChipRealSize() retourne 1 Mo (1048576 octets). C’est donc la valeur maximum que l’on peut utiliser pour le paramètre “Flash Size” de l’IDE Arduino.

ESP8266 INFORMATION
===================
ESP.getFreeHeap()              : 46000
ESP.getChipId()                : 0xD48ED5
ESP.getSdkVersion()            : 1073644416
ESP.getBootVersion()           : 4
ESP.getBootMode()              : 1
ESP.getCpuFreqMHz()            : 80
ESP.getFlashChipId()           : 0x1440E0
ESP.getFlashChipRealSize()     : 1048576
ESP.getFlashChipSize()         : 1048576
ESP.getFlashChipSpeed()        : 40000000
ESP.getFlashChipMode()         : 2
ESP.getFlashChipSizeByChipId() : 0x100000
ESP.getSketchSize()            : 231264
ESP.getFreeSketchSpace()       : 270336
ESP.getCycleCount()            : 23327555
ESP.getResetInfoPtr()
6
0
0
0
0
0
0

Programme simple-websocket.ino

Si le programme get-esp8266-info.ino a fonctionné, on peut maintenant jouer avec le WiFi grâce au programme simple-websocket.ino.

La procédure de mise en route est indiquée dans le README du programme. Il y a deux lignes à modifier suivant le type d’ESP utilisé :

ligne 26 de ws_functions.h, indiquer #define ESP_MODULE_TYPE 'ESP-01'

ligne 7 de websocket.js, indiquer var ESP_MODULE_TYPE = 'ESP-01'

Et si tout à fonctionné, voici ce que le navigateur doit montrer :

Capture d’écran simple-websocket.ino

À lire aussi

Revenir à NodeMCU

Voir ouilogique.com — Mise à jour du firmware