Mise en route d’un ESP8266-01
L’ESP-01 présenté ici, m’a été transmis par Didel. Donc merci à Jean-Daniel Nicoud.
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 :
- En lui envoyant des commandes AT sur son port RS232 avec un ordinateur ou un microcontrôleur.
- En programmant directement son microcontrôleur interne en Arduino C.
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
Note : Les LED rouge et verte ne sont pas connectées.
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
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
À lire aussi
Sparkfun a un PDF avec toutes les commandes AT possibles.
Pour continuer avec les commandes AT, lire les pages suivantes :
- alselectro — WiFi Module ESP8266 – 1. Getting started with AT commands
- alselectro — WiFi Module ESP8266 – 2. TCP CLIENT /Server mode
J’ai compilé les informations de ces deux pages télégraphiquement ici :
Il y a également des informations intéressantes sur ces pages :
- Nicolas C. Blog — ESP8266 première partie : Généralités
- Nicolas C. Blog — ESP8266 seconde partie : Le mode Standalone
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 :
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.
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 :
À lire aussi
- hackster.io — Ray Burnette — ESP8266-01 using Arduino IDE
- allaboutcircuits.com — Charles R. Hampton — Breadboard and Program an ESP-01 Circuit with the Arduino IDE
- playground.boxtec.ch — ESP8266 WiFi Module