I. Le module WiFi ESP8266 et l'ESP-01 en bref▲
L'aventure ESP8266 a démarré en 2014 et le module a gagné rapidement en popularité. Il existe maintenant de nombreuses cartes à base de processeur ESP8266. Leurs caractéristiques diffèrent notamment en termes de nombres de ports d'entrées-sorties ou de taille de la mémoire flash.
Ces circuits ont beaucoup évolué depuis et de nombreuses informations peuvent être trouvées sur le web pour la plus grande satisfaction des utilisateurs. Malheureusement, beaucoup de ces informations sont maintenant périmées ou tout simplement fausses.
Ainsi, il m'a fallu du temps avant d'obtenir un premier résultat exploitable ! D'autres auront eu plus de chance, mais faire fonctionner correctement ce module fut un vrai combat. À tel point que parfois, j'ai même cru avoir détruit le module avant de le faire revivre à force de persévérance dans mes recherches.
J'ai finalement dompté la bête qui s'avère plus simple d'utilisation que je ne pouvais l'imaginer au départ. Après avoir rassemblé toutes les informations utiles, je vous propose d'en faire la synthèse dans ce tutoriel. En espérant qu'il vous permette de débuter rapidement et d'exploiter les fonctionnalités de base dont vous aurez besoin.
Dans ce tutoriel, le module utilisé est un ESP-01, mais l'approche décrite devrait être identique avec la plupart des modules à base de processeur ESP8266 (si ce n'est la totalité).
L'ESP8266 en bref :
- Supporte les protocoles 802.11 b/g/n ;
- Se connecte à votre routeur et fonctionne comme client ou comme point d'accès ou même les deux en même temps !
- Peut fonctionner comme serveur web avec sa propre adresse IPÂ ;
- Le module ESP-01 comprend deux broches numériques qui peuvent être configurées en entrée ou en sortie (pour piloter des LED, des relais, etc.). Ces broches peuvent être utilisées pour générer un signal modulé en largeur d'impulsion (PWM). D'autres versions du module comportent davantage de broches d'entrées-sorties (l'ESP-12 par exemple), mais ils se programment tous de façon similaire ;
- Possède une entrée analogique (ADC/TOUT), mais qui n'est pas câblée sur l'ESP-01 ;
- Peut fonctionner en communiquant avec une carte Arduino ou être programmé pour fonctionner en toute autonomie ;
- Dispose de nombreux outils et environnements de développement (EDI) pour le programmer ;
- Et plein d'autres choses encore…
Dans la démonstration qui suit, l'ESP8266 est configuré en serveur web générant une page web accessible à l'utilisateur par liaison WiFi. Vous pourrez alors vous inspirer de cette démonstration pour développer votre propre projet domotique et contrôler vos objets connectés.
II. Matériel nécessaire▲
Si vous voulez programmer l'ESP8266 avec votre propre code, ce qu'on propose de faire dans ce tutoriel, vous n'aurez plus besoin du firmware d'origine. Votre code est le firmware. Pour revenir en arrière et flasher une version à jour du firmware dans l'ESP8266 : Loading new firmware onto an ESP8266.
On utilisera l'EDI Arduino comme outil de développement, mais vous n'êtes pas obligé de disposer d'une carte Arduino pour autant. L'ESP8266 est lui-même un microcontrôleur.
Après avoir téléversé votre propre code dans l'ESP8266, celui-ci ne répondra plus aux commandes AT, car votre code a remplacé le firmware d'origine. Développer son propre code avec l'aide de la bibliothèque ESP8266 de l'EDI Arduino vous offre de nombreuses possibilités. Voir la documentation : ESP8266WiFi library.
Vous pouvez restaurer le firmware d'origine de l'ESP8266 à tout moment et reprendre le contrôle avec le jeu de commandes AT si vous le souhaitez. Voir Loading new firmware onto an ESP8266.
Le module ESP8266 s'alimente en 3,3 V, et non en 5 V. Même si l'ESP-01 est plutôt tolérant, il est fortement recommandé d'adapter le niveau de tension si l'alimentation provient d'une source en 5 V. Sans cette précaution, vous risquez tout simplement d'endommager, voire de détruire le module !
Matériel |
Description et commentaires |
|
|
|
|
|
|
|
|
|
On trouve beaucoup de montages sur le Net avec une sortie 5 V du programmateur ou de l'Arduino directement reliée à l'entrée Rx en 3,3 V de l'ESP. Comme dit plus tôt, l'ESP-01 est assez tolérant, c'est à vous de voir si vous prenez le risque… |
III. Schéma du montage▲
Le programmateur FTDI est le circuit en rouge en haut du schéma, l'ESP8266-01 est en bas. Seuls trois fils du programmateur FTDI sont connectés : le retour à la masse GND, et les broches de communication Rx et Tx reliées respectivement au Tx et Rx de l'ESP. À gauche du schéma, le module d'alimentation normalement directement enfiché sur la plaque de câblage.
On insiste une fois de plus sur la qualité nécessaire de l'alimentation de l'ESP. Si vous constatez un fonctionnement erratique du système, il s'agit probablement d'un souci d'alimentation. Remarquez le condensateur de découplage entre les lignes 3,3 V et la masse GND afin de combler les éventuelles chutes de tension dues aux pointes de courant demandées par l'ESP.
IV. Le brochage de l'ESP-01▲
Quelques remarques sur le câblage :
- la broche GPIO 0 doit être maintenue à la masse (GND) pendant le téléversement du code. Elle doit être déconnectée si vous retirez le FTDI et que l'ESP est en mode d'exécution normal ;
- la broche CH_PD doit toujours être maintenue à l'état haut ;
- la broche RESET est tirée à l'état haut avec une résistance de pull-up 10 kΩ, et est reliée à la masse GND sur appui du bouton RESET lorsqu'il faut redémarrer l'ESP. Pressez le bouton RESET à chaque fois avant de téléverser le code, et à chaque fois que vous connectez ou déconnectez la broche GPIO 0. Ce bouton RESET vous évitera bien des tracas.
Quand vous alimentez le circuit, la LED rouge de l'ESP-01 doit s'allumer, et la LED bleue doit s'allumer brièvement. Plus tard, quand vous téléverserez le code dans l'ESP, la LED bleue devrait clignoter pendant le processus. Toute autre combinaison dans l'éclairage des LED suggère un dysfonctionnement.
Si vous souhaitez retirer le programmateur série et démarrer l'ESP en mode d'exécution normal, assurez-vous d'avoir déconnecté la broche GPIO 0 de la masse GND et pressez le bouton RESET, sans cela l'ESP risque de ne pas fonctionner correctement.
V. Utiliser une carte Arduino comme programmateur série▲
À la place de votre programmateur USB-série, vous pouvez vous servir de votre carte Arduino.
Quelques remarques :
- Sur une carte Arduino opérant en 5 V (comme la classique Arduino UNO), les sorties logiques seront au potentiel 5 V (logique TTL), et vous risquez d'endommager votre ESP8266 en les reliant directement. Vous devez donc utiliser une carte Arduino opérant en 3,3 V ou bien rajouter un convertisseur de niveau logique bidirectionnel 3,3 V-5 V (bi-directional logic level converter) entre l'Arduino et l'ESP ;
- La sortie 3,3 V de votre carte Arduino est insuffisante pour alimenter l'ESP qui nécessite un courant élevé. Là encore, pour éviter les comportements erratiques et pour protéger les composants, utilisez une alimentation 3,3 V externe pouvant fournir 0,5 A ;
- Il est recommandé de téléverser un programme vierge dans l'Arduino avant d'y connecter quelques composants, quels qu’ils soient afin d'éviter certains résultats imprévisibles. On entend par programme « vierge » un code ne comprenant qu'un setup() et une boucle loop() vides ;
- L'Arduino UNO ne comprend qu'un seul port série matériel (connecteurs Rx et Tx). Pour communiquer à la fois avec l'ESP8266 et votre ordinateur via le Moniteur Série, vous devrez passer par un port série logiciel et utiliser la bibliothèque Software Serial. Un port série logiciel a forcément quelques limitations, mais la communication devrait théoriquement se dérouler normalement avec un débit allant jusqu'à 115 200 bauds. L'avantage d'une carte Arduino Mega est de disposer de ports série matériels supplémentaires ;
- Enfin, le piège… Quand vous utilisez l'Arduino comme programmateur série d'un autre périphérique comme l'ESP, les données (notamment les commandes AT tapées dans le Moniteur Série de l'EDI Arduino) en provenance de votre ordinateur relié à l'Arduino via le câble USB arrivent sur le port Rx de l'Arduino (l'Arduino reçoit bien les données). Et ces données doivent parvenir sur la broche Rx du périphérique qui doit aussi les recevoir. Dans ce cas précis, il ne faut plus croiser Rx et Tx, vous devez connecter le Rx de l'Arduino au Rx du périphérique, et le Tx de l'Arduino au Tx du périphérique.
VI. Programmer avec l'EDI Arduino▲
VI-A. Installation du gestionnaire▲
De nombreux outils existent pour programmer l'ESP8266, mais l'EDI Arduino (Environnement de Développement Intégré) est sans doute le moyen le plus facile d'y arriver.
Vous aurez besoin de la dernière version de l'EDI Arduino et d'y ajouter le support de l'ESP8266. Notez une fois de plus que même si vous passez par l'EDI Arduino, vous n'êtes pas obligé de posséder une carte Arduino pour autant.
Dans le menu Préférences de l'EDI Arduino, il faut rentrer une URL pour gérer les cartes supplémentaires :
Ici, il faut rentrer l'URLÂ : http://arduino.esp8266.com/stable/package_esp8266com_index.json.
Plus de détails sur le site ESP8266 Arduino Core.
Sélectionnez ensuite le Gestionnaire de cartes (Boards Manager) :
Dans le gestionnaire, sélectionnez le paquet esp8266 :
Vous pouvez maintenant choisir la cible Generic ESP8266 Module :
Des options supplémentaires apparaissent si vous retournez dans le menu Outils :
VI-B. Communiquer avec l'ESP8266 Ã l'aide de commandes AT▲
Une fois l'ESP connecté à votre poste, sélectionnez le port COM correspondant (menu Outils/Port…).
Si le firmware d'origine est toujours présent dans l'ESP8266, vous pouvez communiquer avec lui au travers du Moniteur Série :
- Ouvrez le Moniteur Série (Serial Monitor) ;
- Sélectionnez la vitesse de transmission, normalement 115 200 bauds (baud rate), mais selon le firmware, elle peut être inférieure ;
- Sélectionnez « Les deux, NL et CR » (Both NL & CR), pour envoyer un New Line et Carriage Return à chaque envoi (bouton Envoyer) ;
- Tapez (sans les guillemets) la commande « AT », puis cliquez sur le bouton « Envoyer ». L'ESP devrait renvoyer « OK » dans le Moniteur Série. Si ce n'est pas le cas, pressez le bouton RESET ou essayez à nouveau en redémarrant après avoir débranché le câble USB. Vérifiez aussi que vous avez sélectionné le bon port COM. Si l'ESP ne répond toujours pas, peut-être que le firmware « standard » n'est pas installé et qu'il ne comprend pas les commandes AT. Dans ce cas, cela n'est pas vraiment un problème puisque vous allez réécrire par-dessus le firmware avec votre propre code ;
- Tapez « AT+GMR ». L'ESP retourne le numéro de version du firmware.
VI-C. Le code▲
Copiez et collez le code ci-dessous dans la fenêtre d'édition de l'EDI Arduino. Il faut modifier les variables SSID et password pour que l'ESP se connecte à votre routeur.
Notez que la LED est connectée à la broche GPIO 2 de l'ESP, d'où l'initialisation de la variable int
pinGPIO2 =
2
;.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
/*
This is a demo of ESP8266 WiFi Module in standalone mode (without Arduino) controlling an LED via a Web page.
This code also demostrates that PWM is available on the ESP8266, so we can dim the LED.
Analog Input is available on the ESP8266 but this pin is not wired up on ESP-01 board.
The ESP can also support interrupts.
This demo uses the Arduino IDE and the Arduino Boards Manager to upload the program to the ESP2866 with an FTDI Programmer.
N.B. This overwrites any Firmware that was previously on the ESP8266.
See: http://www.instructables.com/id/ESP8266-WiFi-Module-for-Dummies/ for the details on how to set the board up and upload the code to the ESP8266
Also see: http://www.instructables.com/id/The-Simple-Guide-to-Flashing-Your-ESP8266-Firmware/
*/
// Include the ESP8266 Library. This library is automatically provided by the ESP8266 Board Manager and does not need to be installed manually.
#include
<ESP8266WiFi.h>
String codeVersion =
"Version 1.0 Aug 2016 by TonesB"
;
// WiFi Router Login - change these to your router settings
const
char
*
SSID =
"YourSSID"
;
const
char
*
password =
"YourPassword"
;
// Setup GPIO2
int
pinGPIO2 =
2
; //To control LED
int
ledStatus =
0
; //0=off,1=on,2=dimmed
// Create the ESP Web Server on port 80
WiFiServer WebServer(80
);
// Web Client
WiFiClient client;
void
setup() {
Serial.begin(115200
);
delay(10
);
Serial.println();
Serial.println();
Serial.println(codeVersion);
// Setup the GPIO2 LED Pin - this demo also uses PWM to dim the LED.
pinMode(pinGPIO2, OUTPUT);
digitalWrite(pinGPIO2, LOW);
ledStatus =
0
;
// Connect to WiFi network
Serial.println();
WiFi.disconnect();
WiFi.mode(WIFI_STA);
Serial.print("Connecting to "
);
Serial.println(SSID);
WiFi.begin(SSID, password);
while
(WiFi.status() !=
WL_CONNECTED) {
delay(500
);
Serial.print("."
);
}
Serial.println(""
);
Serial.println("Connected to WiFi"
);
// Start the Web Server
WebServer.begin();
Serial.println("Web Server started"
);
// Print the IP address
Serial.print("You can connect to the ESP8266 at this URL: "
);
Serial.print("http://"
);
Serial.print(WiFi.localIP());
Serial.println("/"
);
}
void
loop() {
// Check if a user has connected
client =
WebServer.available();
if
(!
client) {
//restart loop
return
;
}
// Wait until the user sends some data
Serial.println("New User"
);
while
(!
client.available()) {
delay(1
);
}
// Read the first line of the request
String request =
client.readStringUntil('
\r\n
'
);
Serial.println(request);
client.flush();
// Process the request:
if
(request.indexOf("/LED=ON"
) !=
-
1
) {
analogWrite(pinGPIO2, 1023
);
ledStatus =
1
;
}
if
(request.indexOf("/LED=OFF"
) !=
-
1
) {
analogWrite(pinGPIO2, 0
);
ledStatus =
0
;
}
if
(request.indexOf("/LED=DIM"
) !=
-
1
) {
analogWrite(pinGPIO2, 512
);
ledStatus =
2
;
}
// Return the response
client.println("HTTP/1.1 200 OK"
);
client.println("Content-Type: text/html; charset=UTF-8"
);
client.println(""
);
client.println("<!DOCTYPE HTML>"
);
client.println("<html>"
);
client.println("<head>"
);
client.println("<title>ESP8266 Demo</title>"
);
client.println("</head>"
);
client.println("<body>"
);
client.println("<a href=
\"
/
\"
>Refresh Status</a>"
);
client.println("</br></br>"
);
//check the LED status
if
(ledStatus ==
0
) {
client.print("LED is Off</br>"
);
client.println("Turn the LED <a href=
\"
/LED=ON
\"
>ON</a></br>"
);
client.println("Set LED to <a href=
\"
/LED=DIM
\"
>DIM</a></br>"
);
}
else
if
(ledStatus ==
1
) {
client.print("LED is On</br>"
);
client.println("Turn the LED <a href=
\"
/LED=OFF
\"
>OFF</a></br>"
);
client.println("Set LED to <a href=
\"
/LED=DIM
\"
>DIM</a></br>"
);
}
else
if
(ledStatus ==
2
) {
client.print("LED is Dimmed</br>"
);
client.println("Turn the LED <a href=
\"
/LED=OFF
\"
>OFF</a></br>"
);
client.println("Turn the LED <a href=
\"
/LED=ON
\"
>ON</a></br>"
);
}
client.println("</br>"
);
client.println("<a href=
\"
http://www.instructables.com/id/ESP8266-WiFi-Module-for-Dummies/
\"
target=
\"
_blank
\"
>See the Instructables Page: ESP8266 WiFi Module for Dummies</a></br>"
);
client.println("<a href=
\"
http://www.instructables.com/id/The-Simple-Guide-to-Flashing-Your-ESP8266-Firmware/
\"
target=
\"
_blank
\"
>See the Instructables Page: The Simple Guide to Flashing Your ESP8266 Firmware</a></br>"
);
client.println("</br>"
);
client.println("</body>"
);
client.println("</html>"
);
delay(1
);
Serial.println("User disconnected"
);
Serial.println(""
);
}
Vérifiez une dernière fois que votre montage est au point et connectez votre câble USB au programmateur série.
VI-D. Téléverser le code dans l'ESP8266▲
Quand vous téléversez le code, il faut que la broche GPIO 0 soit reliée à la masse GND. Vous pourrez retirer le fil de câblage correspondant une fois le téléversement effectué. Pressez le bouton RESET avant de téléverser. Si le téléversement échoue, déconnectez et reconnectez le câble USB puis recommencez. En dernier recours, redémarrez votre PC, il arrive parfois que le port COM perde pied.
La progression du téléversement s'affiche dans la fenêtre de notification de l'EDI comme ci-dessous :
La LED bleue de l'ESP doit clignoter pendant le téléversement.
Quand vous retirerez le programmateur série une fois le code téléversé, vous devrez retirer le câble reliant la broche GPIO 0 à la masse, puis presser le bouton RESET pour que l'ESP démarre correctement.
VI-E. L'ESP8266, serveur web▲
Ouvrez le Moniteur Série, vous devriez voir apparaître l'adresse IP prise par l'ESP. Vous pouvez également regarder dans l'interface d'administration de votre routeur pour découvrir les périphériques qui y sont connectés. L'ESP devrait apparaître dans la liste avec un nom du type : ESP_1A64CA. Tant que vous y êtes, vous pourriez réserver une adresse fixe pour l'ESP et paramétrer le port (port forwarding) pour pouvoir vous connecter à l'ESP en dehors de votre domicile sur Internet.
Ouvrez maintenant votre navigateur et saisissez l'adresse IP de l'ESPÂ :
Testez le bon fonctionnement en cliquant sur les liens ON ou OFF pour allumer ou éteindre la LED. En cliquant sur le lien DIM, la LED devrait s'allumer, mais avec une luminosité plus faible.
VII. Sitographie sur l'ESP8266▲
ESP8266
- Pour les plus motivés d'entre vous, l'ouvrage Kolban's book on ESP8266 est une mine d'informations inscrite dans un pavé de plus de 400 pages ;
- Le site de référence : esp8266.com, et le Wiki de la communauté ESP8266 ;
- Des ressources sur le site expressif.com, le fabricant chinois de l'ESP8266Â ;
- Pour programmer l'ESP8266 dans l'EDI Arduino : ESP8266 Arduino Core ;
- Pour flasher un nouveau firmware dans l'ESP8266Â : Loading new firmware onto an ESP8266.
Commandes AT
Gestionnaire de cartes Arduino ( Arduino boards manager )
VIII. Notes de la rédaction Developpez.com▲
Ce tutoriel est basé sur les travaux de TonesB, membre du site instructables.com.
Version originale du tutoriel : ESP8266 WiFi module for dummies.
Nous remercions les membres de la Rédaction de Developpez.com pour le travail de traduction et de relecture qu'ils ont effectué, en particulier : f-leb, Claude Leloup et François DORIN.