Voici le 1er tuto d’une longue liste je l’espère. l’ESP8266 est une très bonne alternative à l’arduino surtout si l’on souhaite utiliser le Wifi.
1. Présentation de l’ESP8266
On ne le présente plus mais je vais le faire quand même ;). L’ESP est à la base un module permettant d’implémenter le Wifi dans ses réalisations. Depuis 2014, devant l’engouement suscité envers ce petit module, la gamme s’est étoffé et notamment le nombre d’entrées/sorties mises à disposition. On est passé d’un ESP01 possèdant 6 pins dont l’alimentation à un ESP14 en possédant 22. Vous retrouverez les principales caractéristiques comparatives sur Wikipédia ou encore les spécifications de l’ESP 12E.
Pourquoi un tel engouement, et bien la petite bête est peu cher (ESP 14 inférieur à 2,5 Euros), peu encombrante, peu consommatrice d’énergie et sacrément puissante. Il n’en faut guère plus pour vouloir s’y frotter.
Sachez qu’à l’heure ou je vous parle, l’ESP8266 possède un successeur venant s’enrichir du Bluetooth notamment, l’ESP32 dont vous trouverez une présentation, on ne joue plus dans la même catégorie tant au niveau performance que prix d’ailleurs.
On retrouve généralement l’ESP sous deux forme. Soit le composant brut (voir l’ESP 14 de la photo) que l’on utilisera pour les montages finaux, soit sous forme de nodeMCU ( MCU pour Micro Controller Unit), soit un ESP montée sur une carte qu’il est possible de relier en USB et d’alimenter avec une tensions de 5V.
a. De quoi la bête est elle capable ?
Voici un petit comparatif
Arduino Uno | ESP8266 | |
Micro-contrôleur | ATmel ATmega328p | Tensilica Xtensa LX106 |
Espace d’adressage | 8bits | processeur 32bits RISC |
Fréquence d’horloge | 16 MHz | 80 MHz – 160 MHz (1) |
Mémoire flash | 32 Ko | aucune de base et de 512 Ko à 4 Mo selon les modèles améliorés (2) |
Mémoire RAM | 2 Ko | 96 Ko |
E/S numérique | 18 (5V) dont 6 capables de PWM | 16 (3,3V), toutes capables de PWM |
Entrées analogiques | 5 (10 bits) | 1 (10 bits, 1V max (3)) |
Communication | 1x UART;1x I2C; 1x SPI | 1,5x UART (4);1x I2C; 1x SPI |
(1) Cadencé à 80 Mhz, il peut être overclocké à 160 Mhz.
(2) il n’y a pas de flash pour stocker le programme dans un module ESP de base (Ca n'est pas vrai sous sa forme de NodeMCU). En revanche, il est possible de l’interfacer avec une mémoire flash externe. L'ESP 14 possède quand à lui 8Kb de mémoire flash pour stocker le programme (Voir description ESP-14 et spécifications techniques ESP-14)
(3) L’ESP8266 supporte une tension de 0 à 1V maximum sur sa broche analogique. 10 bit avec une plage de valeur de 0 à 1024.
(4) 1,5 UART car il y en a un complet (broches RX et TX), et une broche TX uniquement.
Prenons l’exemple de l’ESP12E, fréquence d’utilisation à 80 Mhz, il peut être poussé à 160 Mhz (contre 16 Mhz pour une arduino), l’ESP possède 4 Mo de mémoire flash (contre 32 Kb pour la plupart des arduinos). Déjà, ça laisse rêveur.
Il dispose d’une connectivité Wifi 802.11 b/g/n supportant le WEP, WPA/2/WPS et réseau ouvert et 16 GPIO dont le support du SPI, I²C, UART et un port ADC (pour les I/O analogiques). Le module Wifi peut être également utilisé en tant que « soft-AP », c’est-à-dire configuré en tant que point d’accès Wifi.
Il est alimenté en 3,3V est consomme entre 60mA et 200mA avec le Wifi activé. Pour le détail, vous irez voir le lien le plus haut sur les specs.
b. Comment programmer l’ESP8266 ?
Il existe différentes façon de programmer l’ESP. En effet, différents firmware ont été développé.
Le firmware original « AT »
C’est le firmware d’origine installé par Expressif (La société ayant développé l’ESP). Cela permet d’utiliser l’ESP comme simple module Wifi à l’aide des commandes AT dont vous pouvez retrouver la liste ici.
Votre firmware ? c’est possible avec le SDK Expressif
le firmware AT était la seule méthode d’exploiter les ESP8266. Mais fin 2014, la société Expressif a ouvert le SDK nous permettant de développer nos propres firmwares. Par ailleurs le code du firmware AT a été ouvert. Vous pouvez retrouver le code source de ce firmware sur le compte Github d’Expressif.
C’est ainsi que son apparu différents firmwares :
Le firmware NodeMCU, avec le langage de script Lua
NodeMCU a développé a créé ce firmware embarquant un interpréteur Lua. Langage de plus haut niveau. A l’origine, il n’était pas possible de faire des programmes trop complexe au risque de saturer la mémoire. Les dernières version étant maintenant plus stable.
Le firmware Arduino; développez l’ESP8266 comme un Arduino
La communauté Arduino s’est mise à développer un compilateur et des librairies (notamment ESP8266Wifi.h) permettant d’utiliser l’ESP comme un arduino classique. La compilation du code crée un firmware qui sera installé sur la mémoire flash externe du module.
Il est donc ainsi possible de programmer l’ESP en C++ sans trop changer ses habitudes. Nous allons donc ici explorer cette piste.
2. Objectif
L’objectif est de réaliser un 1er programme avec l’ESP8266 sous sa forme nodeMCU V3. Le montage assez simple consistera à allumer et éteindre une led via HTTP et le clic sur des boutons : On clic sur un bouton allumer (grisé) et la led s’allume, on clic sur un bouton éteindre (grisé lorsque la led est allumé) et la led s’éteint.
Allez hop, action.
a. Pré requis du Tuto
Avoir les bases en programmation Arduino (setup et loop), connaitre l’application arduino (interface de programmation) et posséder des rudiments de HTML (Pour comprendre ce que l’ESP renverra).
Avoir installé l’application Arduino dont nous allons nous servir ici.
b. Librairies utilisées :
ESP8266WiFi.h : Github. Elle existe de base avec l’installation qui va être réalisé.
3. Matériel utilisé
- 1 plaque de prototypage
- 1 nodeMCU v3
- 1 Led bleu
- 2 cables : Un rouge et un bleu
4. Schéma
5. Modification de l’application Arduino.
De base les cartes nodeMCU ne sont pas présentent et visible. Il va donc falloir enrichir l’application Arduino pour pouvoir programmer notre ESP.
Allez dans fichier/préférences
dans url de gestionnaire de cartes supplémentaires rajoutez l’url
http://arduino.esp8266.com/staging/package_esp8266com_index.json
Appuyez sur ok. Allez ensuite dans outils, type de carte, Gestionnaire de carte.
vous arriverez ici, et vous chercher ESP8266. Choisissez la dernière version et cliquez sur Installer.
Après l’installation, vous vous retrouvez avec une jolie liste de cartes
Nous choisirons donc ici NodeMCU 1.0.
6. Programme
On retrouve nos classiques méthodes setup et loop.
L’idée est de connecter le NodeMCU à notre box. Celle çi va lui attribuer une IP (A vous d’avoir configuré correctement votre box, le routeur, …). Nous appellerons alors l’IP. Le nodeMCU en tant que serveur détectera notre demande HTTP et nous servira une page HTML. Cette même page contiendra deux boutons permettant via des appels en Get de lancer des commandes côté nodeMCU (ici l’activation ou non d’un GPIO).
On utilise le port série pour afficher des informations
[pastacode lang= »cpp » manual= »void%20WifiConnexion()%0A%7B%0A%20%20%20Serial.println()%3B%0A%20%20%20Serial.println()%3B%0A%20%20%20Serial.print(%22Connexion%20au%20reseau%20%3A%22)%3B%0A%20%20%20Serial.println(MYSSID)%3B%0A%20%0A%20%20%20WiFi.begin(MYSSID%2C%20PASSWD)%3B%0A%20%0A%20%20%20while%20(WiFi.status()%20!%3D%20WL_CONNECTED)%20%0A%20%20%20%7B%0A%20%20%20%20%20delay(500)%3B%0A%20%20%20%20%20Serial.print(%22.%22)%3B%0A%20%20%20%7D%0A%20%20%20Serial.println(%22%22)%3B%0A%20%20%20Serial.println(%22WiFi%20connecte.%22)%3B%0A%7D » message= »La méthode de connexion à la box » highlight= » » provider= »manual »/]
[pastacode lang= »cpp » manual= »WiFiServer%20serverHttp(80)%3B%20%20%20%20%2F%2F%20D%C3%A9claration%20du%20serveur%20web%0A%0A%2F*%0A%20D%C3%A9marrage%20du%20serveur%20HTTP%20%0A%20*%2F%0Avoid%20StartServer()%0A%7B%0A%20%20%20serverHttp.begin()%3B%0A%20%20%20Serial.println(%22Serveur%20demarre%22)%3B%0A%20%0A%20%20%20Serial.print(%22Url%20de%20connexion%3A%20%22)%3B%0A%20%20%20Serial.print(%22http%3A%2F%2F%22)%3B%0A%20%20%20Serial.print(WiFi.localIP())%3B%0A%20%20%20Serial.println(%22%2F%22)%3B%0A%7D » message= »La déclaration du serveur web ainsi que son démarrage » highlight= » » provider= »manual »/]
La méthode suivante n’est autre que celle qui retourne la page http au client. J’ai volontairement coupé du contenu. l’important, c’est que le contenu de ce html est conditionné par le p_isActive qui changerai la class du bouton en fonction du fait que la led est allumé ou éteinte.
[pastacode lang= »cpp » manual= »void%20WriteHttpRequest(WiFiClient%20p_client%2C%20bool%20p_isActive)%0A%7B%0A%09%20p_client.println(%22HTTP%2F1.1%20200%20OK%22)%3B%0A%09%20p_client.println(%22Content-Type%3A%20text%2Fhtml%22)%3B%0A%09%20p_client.println(%22%22)%3B%20%2F%2F%20do%20not%20forget%20this%20one%0A%09%20p_client.println(%22%3C!DOCTYPE%20HTML%3E%22)%3B%0A%09%20p_client.println(%22%3Chtml%3E%22)%3B%0A%09(…)%0A%09%20p_client.println(%22%3Ca%20href%3D%5C%22%2FLED%3DOFF%5C%22%3E%3Cbutton%20%22)%3B%0A%09%20if(!p_isActive)%20%0A%09%20%7B%0A%09%09p_client.print(%22class%3D%5C%22active%5C%22%22)%3B%0A%09%20%7D%0A%09(…)%0A%09%20p_client.println(%22%3C%2Fbody%3E%3C%2Fhtml%3E%22)%3B%0A%7D » message= » » highlight= » » provider= »manual »/]
Ensuite, vous pouvez téléverser le code dans le nodeMCU. la led à la base de l’antenne de l’ESP va se mettre à clignoter frénétiquement.
Après le téléversement, n’oubliez pas d’ouvrir le moniteur série.
Vous pouvez donc maintenant taper l’adresse de votre serveur nodeMCU
Et voilà le travail, une jolie page web en html 5. L’avantage, c’est qu’on peut en effet appeler cette même page depuis son PC, son smartphone ou pourquoi pas via routage de la box depuis le lieu de ses vacances (Il faudra alors veiller à la sécurité !)
Un monde s’offre à vous !