jeudi 27 août 2015

Réinstallation du firmware de l'ESP8266 (Windows)

Ayant de la suite dans les idées, je vous propose aujourd'hui un quatrième article consécutif portant sur le module WiFi ESP8266.  Cette fois, je vous indique une méthode pour réinstaller le firmware AT dans l'ESP8266.

1) Pourquoi voudrait-on réinstaller le firmware?
  • Parce que le module ne fonctionne pas, ou a cessé de fonctionner correctement (ça m'est personnellement arrivé, et j'ai ressuscité mon module récalcitrant par cette méthode).
  • Parce qu'on possède un ancien module muni d'un firmware désuet
  • Parce qu'on a programmé l'ESP8266 (par exemple avec l'IDE Arduino)  mais nous voulons remettre le module dans son état initial (afin d'envoyer à l'ESP8266 des commandes AT à partir d'un autre microcontrôleur, par exemple).
Notez qu'il existe plusieurs catégories différentes de firmware:  le "firmware AT" est le plus classique; c'est celui qui fait en sorte que l'ESP8266 répond aux commandes AT.  Mais il existe aussi un firmware permettant de programmer l'ESP8266 avec le langage LUA, et un autre pour le programmer en micropython.


2) Télécharger le logiciel et le firmware

Il existe pour Windows un certain nombre de "firmware flashers", c'est à dire des logiciels spécialement conçus pour réinstaller le firmware de l'ESP8266.  Parmi ceux qui sont disponibles, celui-ci m'a semblé particulièrement facile à utiliser. Le lien mène à un répertoire Google Drive que vous pouvez le télécharger au complet en cliquant sur le bouton situé en haut de la fenêtre qui prend la forme d'une flèche pointant vers le bas.



Une fois le fichier zip téléchargé, vous le décompressez sur votre disque rigide (l'application ne requiert pas d'installation particulière, il s'agit d'un simple fichier exécutable intitulé "esp8266_flasher.exe").


Ensuite, il faut trouver une version récente du firmware.  J'ai trouvé la mienne à cet endroit (un autre répertoire Google drive).


J'ai téléchargé le fichier intitulé "AI-v0.9.5.0 AT Firmware.bin".

3) Brancher l'ESP8266 à l'ordinateur

Si ce n'est pas déjà fait, on branche l'ESP8266 à l'ordinateur au moyen d'un convertisseur USB - UART, ou au moyen d'une carte Arduino Uno comme je l'ai fait dans mes articles précédents.  La pin GPIO0 de l'ESP8266 doit être reliée à GND lors de son démarrage, pour le mettre en mode "mise à jour du firmware".

Le schéma ci-dessous montre le circuit que j'ai utilisé.


4) Réinstallation du firmware

Ensuite, on démarre l'application  "esp8266_flasher.exe".



On clique sur le bouton "Bin" et on localise le fichier du firmware (dans mon cas, c'était "AI-v0.9.5.0 AT Firmware.bin"), on remplace "COM1" par le nom du port série occupé par notre ESP8266 (j'ai utilisé l'IDE Arduino pour le connaître), et on clique finalement sur le bouton "Download" pour débuter la gravure du firmware.

Si tout se passe correctement, la fenêtre du logiciel affiche les messages "Connecting...", puis "Erasing flash...", suivi d'un grand nombre de lignes indiquant à quelle adresse il est en train d'écrire, ainsi que le pourcentage déjà enregistré.

Finalement, les mots "Leaving..." et "Failed to leave Flash mode" dont il ne faut pas s'inquiéter:  la mise à jour du firmware a réussi!


Si vous obtenez plutôt le message "Connecting...failed to connect.", vérifiez si votre ESP8266 est adéquatement branché (avec la pin GPIO0 branchée à GND).   S'il ne se passe rien, ça pourrait être parce que le port série est incorrectement identifié.

Yves Pelletier   (TwitterFacebook)

dimanche 16 août 2015

ESP8266: Contrôler une LED à partir d'une page WEB


N.B.: Avec les années, cet article est devenu quelque peu désuet. Je vous conseille de consulter cette version plus récente et améliorée: Piloter des LEDs par WiFi (ESP32 / ESP8266).

Hé oui: comme vous l'avez deviné en lisant le titre, l'ouverture d'une page WEB à partir de n'importe quel appareil (ordinateur, tablette) nous permettra d'allumer ou d'éteindre une LED branchée à un module WiFi ESP8266 situé sur le même réseau.

Ce que le titre ne dit pas (sinon, il serait trop long), c'est que nous allons programmer le module ESP8266 au moyen de l'IDE Arduino pour que l'ESP8266 agisse ensuite de façon autonome.   La LED sera branchée à la pin GPIO2 de l'ESP8266.

Une autre possibilité (que j'espère bien avoir l'occasion d'explorer dans un futur article) serait d'utiliser l'ESP8266 comme périphérique d'une carte Arduino (nous programmerions alors l'Arduino et non l'ESP8266, et la LED serait branchée à l'Arduino).

Préparation de l'IDE

Tout d'abord, si vous n'avez jamais programmé l'ESP8266 au moyen de l'IDE Arduino, il faut télécharger et installer dans l'IDE les composants nécessaires (ils ne sont pas inclus au départ dans l'IDE).  Vous trouverez ici une marche à suivre détaillée.


Circuit permettant d'uploader le sketch dans l'ESP8266

Le même article vous présente un circuit comportant une carte Arduino et un convertisseur de niveau logique 4050 qui permettra de télécharger un sketch dans l'ESP8266 (il ne s'agit que d'une des façons possibles de procéder; une méthode plus conventionnelle consisterait à utiliser un convertisseur USB/UART de 3,3 V).

N'oubliez pas que la pin "GPIO0" de l'ESP8266 doit être liée au GND pendant l'upload du sketch.



Ouverture, modification et upload du sketch

À cette étape, inutile de réinventer la roue:  nous allons simplement ouvrir l'exemple intitulé "WiFiWebServer" (vous y accédez par le menu Fichier - Exemples - ESP8266WiFi - WiFiWebServer)


Avant de pouvoir utiliser ce sketch, il est important le remplacer la mention your-ssid par le nom de votre réseau WiFi, et your-password par le mot de passe de votre réseau WiFi (conservez les guillemets).


Vous êtes maintenant prêts à téléverser le sketch dans l'ESP8266:  avant de déclencher l'upload, assurez-vous que vous avez sélectionné "Generic ESP8266 Module" comme "Type de carte", que vous avez sélectionné le bon port série, que la pin GPIO0 de l'ESP8266 est reliée à GND, et que l'ESP8266 est alimenté.  C'est une bonne idée aussi de faire un petit reset de l'ESP8266 (en reliant temporairement la pin RST à GND) avant de faire l'upload.

Utilisation du sketch

Maintenant que le sketch a été téléversé dans l'ESP8266, nous allons devoir apporter quelques modifications au circuit:  après avoir coupé l'alimentation de l'ESP8266, déconnectez la pin GPIO0 de GND (vous pouvez la brancher à 3,3 volts, ou la laisser débranchée).  Il faut aussi brancher une LED ainsi qu'une résistance de protection à la pin GPIO2 de l'ESP8266.



Au départ, j'avais utilisé une résistance de 150 Ω et j'ai fait face à tout un tas de problèmes: impossible d'uploader un sketch dans l'ESP8266 pendant que la LED était branchée, impossible pour l'ESP8266 de se connecter au réseau WiFi pendant que la LED était branchée, et connexion au réseau WiFi plutôt instable pendant que la LED était branchée...  En supposant qu'il s'agissait d'un problème liée à l'alimentation de l'ESP8266, j'ai augmenté la résistance pour que la LED consomme moins de courant, et ça a fonctionné.  Avec une résistance de 1 kΩ, tout fonctionne à la perfection.

Affichez le moniteur série de l'IDE Arduino (réglé à 115200 bauds puisque c'est ce qui est prévu dans le sketch), puis alimentez à nouveau l'ESP8266:  le moniteur série devrait afficher un message indiquant que l'ESP8266 est en train de se brancher au réseau WiFi.  De plus, l'adresse IP assignée à l'ESP8266 est indiquée.



Il ne vous reste plus qu'à taper cette adresse IP dans n'importe quel fureteur web hébergé par un appareil se trouvant sur votre réseau local.

Dans mon cas, l'adresse IP indiquée est 192.168.1.69 , donc j'écris dans un fureteur :

                 http:/192.168.1.69/gpio/1

La LED s'allume, et une page web (assez minimaliste) me confirme que la pin GPIO est maintenant au niveau logique haut.


Et voici ce qu'affiche le moniteur série s'il est toujours en fonction:


Nous n'avons pas à nous inquiéter concernant la mention "invalid request" qui concerne, si j'ai bien compris, l'absence d'icône associée à notre page web.

Retour à mon fureteur web, ou j'écris maintenant:

                 http://192.168.1.69/gpio/0

... la LED s'éteint, et une nouvelle page web m'indique que la pin GPIO est maintenant au niveau logique bas.



Voilà qui constitue un bon point de départ!  Vous pouvez continuer d'étudier l'exemple WiFiWebServer et le modifier afin qu'il construise une page web convenant mieux à vos besoins.  La LED peut être remplacée par autre chose (un relai!).  J'ai utilisé la carte ESP-01, qui ne comporte que deux pins GPIO, mais d'autres cartes ESP8266 comportent un nombre beaucoup plus grand d'entrées et de sorties.

Si vous désirez plutôt afficher dans une page web l'état de capteurs branchés à l'ESP8266, voir cet article.

Yves Pelletier   (TwitterFacebook)

jeudi 13 août 2015

Programmer l'ESP8266 avec l'IDE Arduino

Comme je l'ai mentionné dans un précédent article, on peut utiliser le module Wi-Fi ESP8266 comme périphérique d'un microcontrôleur (le microcontrôleur envoie alors des commandes à l'ESP8266, qui les exécute) ou on peut programmer directement l'ESP8266 pour qu'il agisse de façon autonome.

C'est cette deuxième option que nous explorons aujourd'hui:  nous allons programmer l'ESP8266 au moyen de l'IDE Arduino, ce qui nous permettra d'utiliser le même langage que nous employons lorsque nous programmons l'Arduino ("IDE", c'est pour "integrated development environment", c'est ainsi qu'on appelle le  logiciel que vous utilisez pour programmer l'Arduino).

Attention!

Si vous téléchargez un sketch dans votre module ESP8266, ce sketch remplacera le firmware qui se trouvait dans l'ESP8266 à l'achat.  Votre ESP8266 ne répondra donc plus aux commandes AT, à moins de réinstaller ensuite le firmware, ce qui n'est pas très compliqué, et qui sera vraisemblablement le sujet d'un prochain article.


Installation des nouvelles extensions dans l'IDE Arduino

L'IDE Arduino ne comporte pas, au départ, la possibilité de programmer l'ESP8266:  nous devons importer des fichiers spécifiques à l'intérieur de l'IDE.  Heureusement, cette tâche est devenue très facile depuis la version 1.6.4 de l'IDE Arduino.

Assurez-vous d'abord que votre version de l'IDE est 1.6.4 ou plus récente; si ce n'est pas le cas, installez une version récente.

Ensuite, vous affichez la boîte de dialogue des préférences, en sélectionnant "Préférences" dans le menu "Fichier".



Dans le dialogue des préférences, vous localisez le champ intitulé "Additional Boards Manager URLs" et vous y collez l'adresse suivante:

http://arduino.esp8266.com/stable/package_esp8266com_index.json



Vous cliquez sur le bouton OK.

Ensuite, dans le menu "Outils", vous sélectionnez "Type de carte" et "Boards Manager...".


Le dialogue "Boards Manager" comporte une entrée intitulée "esp8266 by ESP8266 Community": vous cliquez dans cette zone, puis vous cliquez sur le bouton "Install".  Prévoyez quelques minutes, le temps de télécharger et installer 150 Mo de nouveaux fichiers.





Réglages de l'IDE

Une fois l'installation terminée, plusieurs cartes breakout comportant l'ESP8266 deviennent disponibles dans le menu "Type de carte".


Dans mon cas, puisque j'utilise le module "ESP-01", l'option Generic ESP8266 Module s'avère tout à fait pertinente.  Je n'ai pas eu à modifier les autres paramètres indiqués dans le menu Outils (Flash Mode, Flash Frequency, Upload Speed, etc.).

Circuit

Idéalement, vous utilisez un convertisseur USB - UART produisant un signal de sortie de 3,3 volts. Pour ma part, puisque le seul que j'ai sous la main en ce moment n'est pas fonctionnel (bigre de FT232 contrefait...), j'ai utilisé à la place une carte Arduino en guise de convertisseur USB-série, à laquelle j'ai ajouté un convertisseur de niveau logique afin que le signal entrant dans l'ESP8266 soit abaissé à 3,3 volts.   Il ne faut pas en déduire que vous êtes obligé d'utiliser une carte Arduino lorsque vous programmez avec l'IDE Arduino!

On télécharge dans l'Arduino un sketch vide, puisqu'on ne veut pas que le microcontrôleur Atmega fasse quoi que ce soit:



Voici le brochage du module ESP-01:



L'information en provenance de l'ordinateur sera disponible à la pin 0  (RX) de la carte Arduino. Dans une utilisation normale, ce serait le signal qui entre dans le microcontrôleur, mais ce qui nous intéresse, c'est de l'acheminer à la pin URXD l'ESP8266 après l'avoir abaissé à 3,3 volts (voir cet autre article si vous voulez en savoir plus sur le convertisseur de niveau logique 4050).

Les réponses émises par l'ESP8266 seront acheminées à la pin 1 (TX), là où se trouverait normalement le signal transmis par le microcontrôleur.  Ce signal émis par la pin UTXD de l'ESP8266 sera à 3,3 volts, ce qui ne nécessite pas de conversion de niveau  logique.

Tout comme dans les autres articles sur l'ESP8266, nous alimentons l'ESP8266 avec une alimentation de 3,3 volts autonome (piles, alimentation d'atelier, alimentation ATX, etc) et non avec la sortie 3,3 volts de l'Arduino (car l'ESP8266 consomme beaucoup de courant).

Pendant l'upload du sketch, la pin GPIO0 doit être branchée à GND alors que CH_PD est à 3,3 volts.

Voici le schéma complet du circuit (notez qu'il ne s'agit pas du même circuit quand dans un autre article où j'utilisais l'Arduino pour envoyer des messages AT à l'ESP8266):



N.B.:  pour une raison que j'ignore, le téléchargement d'un sketch a systématiquement échoué lorsque j'ai tenté d'utiliser le convertisseur USB-UART du msp430 Launchpad.


Ouverture d'un fichier d'exemple

Votre exemplaire de l'IDE Arduino comporte maintenant une bonne quantité d'exemples de sketches spécialement conçus pour l'ESP8266.  Personnellement, j'aurais apprécié que ces sketches soient plus abondamment commentés (ne serait-ce que pour nous indiquer clairement ce que le sketch permet de faire!), mais nul doute que cela s'avérera extrêmement utile.

Ici, j'ai choisi l'exemple WiFiScan, qui fournit une liste des réseaux disponibles dans votre voisinage.



Upload du sketch dans l'ESP8266

Comme d'habitude, vous sélectionnez le bon port série dans le menu "Port".  Après vous être assuré que l'ESP8266 est alimenté et que sa pin GPIO0 est à GND, vous faites un reset de l'ESP8266 (en branchant temporairement la pin RST à GND avant de la remettre à 3,3 volts), et vous cliquez sur le bouton "Téléverser" de l'IDE (la flêche vers la droite).

Ça va prendre un certain temps, mais si tout va bien, de petits points oranges devraient apparaître dans le bas de la fenêtre, en guise de progress bar, et le message "Téléversement terminé" vous indiquera...que le téléversement est terminé.


Bien sûr, il est possible que les choses tournent mal, auquel cas un message d'erreur vous aidera peut-être à diagnistiquer le problème...

Utilisation du sketch

On retire le fil qui reliait la pin GPIO0 au GND, on fait un petit reset du module, on affiche  le moniteur série à l'écran de l'ordinateur, et voilà:  la liste des réseaux disponibles s'affiche dans la fenêtre.  Notre module ESP8266 a été reprogrammé au moyen de l'IDE Arduino.


Yves Pelletier   (TwitterFacebook)