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)

vendredi 7 août 2015

Module WiFi ESP8266: test et configuration avec msp430 Launchpad

Dans un récent article, nous avons vu qu'il est possible d'utiliser un Arduino comme "convertisseur USB-série" afin de contrôler un module Wi-Fi ESP8266 avec un ordinateur.  Un inconvénient de cette procédure, c'est que l'Arduino fonctionne à un niveau logique de 5 V, alors que l'ESP8266 fonctionne à un niveau logique de 3,3 V. Nous avions surmonté ce problème en utilisant un convertisseur de niveau logique 4050.

D'accord, mais pourquoi ne pas plutôt utiliser une carte de développement qui fonctionne déjà à un niveau logique de 3,3 V comme, par exemple, la carte MSP430 Launchpad de Texas Instruments? Aucune conversion de niveau logique n'est nécessaire, et le circuit s'en trouve donc grandement simplifié.

Une première tentative...pas très convaincante

Tout comme l'Arduino Uno, le msp430 Launchpad ne comporte qu'un seul canal de communication série ("hardware UART").  Dans un premier temps, j'ai tenté de répliquer la méthode que j'avais appliquée avec succès avec l'Arduino Uno:  utiliser la bibliothèque Software Serial pour dédier deux autres pins à la communication série entre le Launchpad et l'ESP8266.  Grâce à l'IDE Energia, jue pouvait recycler sans modification le sketch que j'avais utilisé pour l'Arduino.

Ça a semblé fonctionné, à première vue, sauf que les messages affichés dans le moniteur série d'Energia (en provenance de l'ESP8266) n'étaient pas complets:  pour une raison que j'ignore, plusieurs caractères étaient manquants.

Voyez ci-dessous le résultat de ma requête "AT+CWLAP":  chaque ligne de la réponse devrait commencer par "+CWLAP", mais la plupart des lignes commencent par "CWA", "+WA", "CLP", etc.:  plusieurs des caractères semblent avoir été perdus en cours de route!




Changeons de méthode

Suite à ces décevants résultats, j'ai décidé de changer d'approche:  je n'utilise que le convertisseur USB/série inclus sur la carte Launchpad, sans utiliser le microcontrôleur msp430 qui se trouve sur la même carte.

Puisqu'on ne veut pas que le microcontrôleur interfère avec la communication série, nous téléversons un sketch vide dans le microcontrôleur (c'est simplement l'exemple "Bare Minimum" situé dans les exemples "Basic" d'Energia):


Une autre option, inutilement radicale mais tout aussi efficace, aurait été de retirer carrément le microcontrôleur de la carte!

Attention aux jumpers du Launchpad

Les cartes msp430 Launchpad comportent une paire de jumpers qui doivent être orientés différemment selon qu'on souhaite utiliser l'UART en hardware ou en software:  assurez-vous de les placer en position "hardware", comme sur la photographie ci-dessous.



Le pinout du breakout ESP-01



Le circuit complet

Je ne le rappellerai jamais assez: l'ESP8266 consomme beaucoup de courant, et ce ne serait donc pas une bonne idée de l'alimenter au moyen de la sortie 3,3 V du Launchpad.  Vous trouvez donc une alimentation autonome de 3,3 volts capable de fournir au moins 300 mA, et vous branchez la borne positive de cette alimentation à la pin Vcc, et la borne négative de l'alimentation à la pin GND de l'ESP8622 (cette pin doit également être reliée à la pin GND du Launchpad, pour que tous les morceaux de votre circuits mesurent leurs tensions à partir de la même référence).

UTXD (données émises par l'ESP8266) doit être branchée à la sortie UART du Launchpad (P1.2).
URXD (données reçues par l'ESP8266) doit être branchée à l'entrée UART du Launchpad (P1.1)

(On pourrait penser qu'il faut coupler Tx et Rx mais non:  les données envoyées par l'ordinateur son reçues par le msp430 et par l'ESP8622,  alors que les données reçues par l'ordinateur pourraient tout aussi bien être émises par le msp430 que par l'ESP8622).

CH_PD doit être branché à 3,3 volts, et les 3 autres pins (RST, GPIO0 et GPIO2) peuvent l'être aussi.





Réglages du moniteur série d'Énergia

Tout comme nous l'avions fait pour l'Arduino dans l'autre article, nous réglons le moniteur série d'Énergia à 9600 bauds et à "Both NL & CR".



Commencez par brancher le Launchpad et afficher le moniteur série.  Ensuite, alimentez l'ESP8266.

Résultats

Vous pouvez maintenant envoyer des commandes AT à l'ESP8266 en les écrivant dans le champ situé en haut du moniteur série d'Energia.  Référez vous à mon article précédent pour des suggestions de commandes AT, ainsi que les réponses que l'ESP8266 devraient normalement vous retourner.

Voyez ci-dessous les résultats obtenus suite à une requête AT+CWLAP:  cette-fois, il n'y a pas de caractères manquants.


J'ai détecté pas moins de 28 réseaux sans fil dans mon voisinage, soit beaucoup plus que ce que j'avais détecté en utilisant l'Arduino dans mon prédédent article:  c'est probablement parce que cette fois-ci, je me trouvais à un endroit différent dans la maison, deux étages plus haut...


Yves Pelletier   (TwitterFacebook)

jeudi 6 août 2015

Module WiFi ESP8266: test et configuration avec Arduino Uno

L'ESP8266 est un circuit intégré qui vous permet, à très faible coût, de sauter à pieds joints dans le domaine de l'internet des objets en créant  vos propres dispositifs capables de se brancher à l'internet par WiFi.

L'ESP8266 peut répondre aux commandes qui lui sont envoyées par un microcontrôleur auquel on l'a branché, ou on peut programmer directement l'ESP8266 pour qu'il agisse ensuite de façon  autonome.

Dans cet article, je vous explique comment j'ai procédé pour tester mon module ESP8266 et faire en sorte qu'il se branche sur mon réseau WiFi domestique.  Pour ce faire, nous lui enverrons des commandes AT que nous taperons manuellement au claver d'un ordinateur.

Il existe un grand nombre de modèles de breakouts comportant l'ESP8266; j'ai utilisé celui qui semble le plus répandu et le plus facile à trouver sur internet:  l'ESP-01.  Ce module n'est malheureusement pas muni d'un connecteur USB qui nous permettrait de le brancher facilement à un ordinateur.  Pour permettre à l'ordinateur de communiquer avec l'ESP8266, nous devons utiliser un intermédiaire comme, par exemple, un convertisseur série/USB.  Pour ma part, j'ai choisi d'utiliser un Arduino Uno, dont le principal avantage est...que j'en possède un!

La fonction de l'Arduino Uno sera donc de transmettre à l'ESP8266 les commandes que nous taperons dans le moniteur série de l'IDE Arduino, et d'afficher dans le moniteur série les réponses qui seront émises par l'ESP8266.  L'utilisation de l'Arduino Uno comporte cependant quelques inconvénients:
  • L'Arduino Uno fonctionne à un niveau logique de 5 V, alors que l'ESP8266 fonctionne à un niveau logique de 3,3 V:  il faut donc prévoir une conversion de niveau logique.  J'ai utilisé le circuit intégré 4050, que nous avions déjà étudié dans un précédent article; d'autres personnes ont eu du succès avec un simple diviseur de tension constitué de deux résistances.
  • L'ESP8266 nécessite un courant élevé (300 mA), qui ne peut être fourni de façon fiable et sécuritaire par la sortie 3,3 V de l'Arduino: pour cette raison, il faut prévoir une alimentation autonome pour l'ESP8266.  J'ai utilisé une alimentation de laboratoire réglée à 3,3 V, une alimentation ATX aurait certainement fait l'affaire aussi (n'oubliez de relier sa borne négative à une des pins GND de l'Arduino...).  Plusieurs personnes utilisent des piles combinées à un régulateur de tension.  À un moment où mon ESP8266 semblait avoir un comportement étrange, j'ai ajouté un condensateur de 100 µF en parallèle avec l'alimentation, ce qui ne peut pas faire de mal même si, dans mon cas, ça n'a rien changé du tout.
  • L'Arduino Uno ne comporte qu'un seul canal de communication série (les pins 0 et 1), qui sera utilisé pour la communication entre l'ordinateur et l'Arduino.  Pour la communication entre l'Arduino et l'ESP8266, nous utiliserons deux autres pins (10 et 11) qui seront transformées en canal de communication série de façon logicielle grâce à la  bibliothèque software serial.  

Brochage de l'ESP-01

Le breakout ESP-01 comporte 8 pins disposées de telle façon qu'il est impossible de l'insérer directement dans une breadboard:  j'ai donc utilisé des câbles mâle-femelle pour les connexions entre l'ESP8266 et la breadboard.

  • UTXD:  C'est la sortie des données de  l'ESP8266.  Nous la relierons à l'entrée de l'Arduino (pin 10).  Ce signal sera de 3,3 V et sera reconnu sans problème par l'Arduino, sans qu'une  conversion de niveau logique ne soit  nécessaire.
  • CH_PD ("chip power down"):  doit être à 3,3 volts pour permettre le fonctionnement du module.
  • RST ("reset"):  lorsque cette pin est reliée à la masse, il en résulte un reset (redémarrage) du module.   J'ai constaté qu'un tel redémarrage peut s'avérer nécessaire si le module ESP8266 a démarré avant l'Arduino auquel il est branché.
  • Vcc:  alimentation du module:  3,3 V
  • GND:  GND...
  • GPIO2:  "general purpose input output" peut être utilsé pour brancher un capteur si vous programmez directement l'ESP8266 (ce que nous ne ferons pas aujourd'hui)
  • GPIO0:  mise à 3,3 volts en utilisation normale (branchée à GND lorsqu'on veut mettre à jour le firmware de l'ESP8266).
  • URXD:  entrée des données, qui doivent obligatoirement être à un niveau logique de 3,3 volts. Cette pins sera branchée indirectement à la sortie (pin 11) de l'Arduino, par l'intermédiaire d'un convertisseur de niveau logique (4050).


Brochage du 4050

Le circuit intégré 4050 comporte suffisamment d'entrées et de sorties pour abaisser 6 tensions logiques, alors que nous n'en abaisserons qu'une seule...  Les pins 1 (Vcc) et 8 (GND) servent à alimenter le circuit intégré.  La pin 1 devra être à 3,3 V alors que la pin 8, sans trop de surprise, sera  branchée à la masse  (GND).   La pin 3 est une entrée: nous y acheminerons le signal de sortie (pin 11) de l'Arduino. La pin 2 est la sortie associée à la  pin  3:  chaque fois que la pin 3 est à 5 volts, la  pin 2 se met à 3,3 volts.  Nous brancherons donc la pin 2 du 4050 à l'entrée (URXD) de l'ESP8266.


Circuit complet

Ce circuit comporte un bouton "reset" permettant le redémarrage du module en cas de besoin.

4 des pins de l'ESP8266 sont branchées à 3,3 V:  VCC,  CH_PD, GPIO0 et GPIO2.

Je le répète:  l'alimentation 3,3 volts n'est pas la sortie 3,3 volts de l'Arduino.


Sketch

Tel que mentionné précédemment, ce sketch ne comporte rien de spécifique au ESP8266:  tout ce que vous écrivez dans le moniteur série (et que l'Arduino reçoit par par USB ("Serial") est retransmis à la pin 11 (donc vers l'ESP8266, "mySerial").  Inversement, tout ce que l'Arduino reçoit sur sa pin 10 en provenance de l'ESP8266 est recopié dans le moniteur série.



Réglages du moniteur série

Votre ESP8266 est probablement réglé pour communiquer à 9600 bauds, et c'est ce que nous avons supposé dans le sketch proposé plus haut.  Donc, réglez le moniteur série à cette valeur.  (Si vous disposez d'un module équipé d'une vieille version du firmware, il est possible qu'il soit plutôt réglé à 115200 bauds!)  De  plus (c'est très important), choisissez la terminaison de ligne "NL & CR".


Envoi de commandes AT à l'ESP8266

Les commandes AT sont des instructions qu'on peut envoyer à l'ESP8266 dans le but de lui faire accomplir certaines tâches.  Ici, nous écrirons nous-mêmes ces commandes dans le moniteur série, mais on pourrait aussi écrire un sketch pour que l'Arduino les envoie de façon plu automatisée.

Conseil:  assurez-vous que l'Arduino est branché à l'ordinateur et affichez le moniteur série de l'IDE Arduino avant de démarrer l'ESP8266.

Lorsque vous démarrer l'ESP8266 (en branchant son alimentation), vous devriez voir apparaître quelque chose de ce genre sur le moniteur série:


Vous pouvez ensuite écrire vos commandes dans le moniteur série:

Si vous écrivez "AT", l'ESP8266 devrait répondre "OK".

La commande "AT+RST" cause un redémarrage de l'ESP8266 (similaire à  ce qu'on obtient en appuyant sur le bouton, dans le schéma de circuit montré plus haut).

"AT+GMR" permet de connaître le numéro du firmware de l'ESP8266, ce qui peut être bon à savoir.  Le mien retourne "0018000902-AI03".


Passons maintenant aux choses un peu plus sérieuses:  demandons à notre ESP8266 de se brancher à notre réseau Wi-Fi domestique.

La commande "CWMODE" permet de définir l'ESP8266 comme une station (STA), un point d'accès (AP) ou les deux, selon qu'on lui assigne la valeur 1, 2 ou 3.  À moins d'avoir en tête une application précise, il n'y a rien de mal, je suppose, à rendre notre ESP8266 le plus polyvalent possible, alors écrivons la commande "AT+CWMODE=3". L'ESP8266 répondra "OK" s'il a fait le changement, ou "no change" si l'ESP8266 était déjà dans l'état demandé.

Dressons maintenant une liste des réseaux sans fils détectés par l'ESP8266:  il s'agit de la commande "AT+CWLAP".  Après un délai de quelques secondes, une impressionnante liste de 16 réseaux Wi-Fi s'est affichée dans le moniteur série (je suis dans une maison unifamiliale:  la plupart de ces réseaux sont à plusieurs dizaines de mètres de chez moi.)


Avant de demander à mon ESP8266 de se brancher à mon réseau domestique, j'utilise "Fing" pour voir les appareils qui se trouvent déjà sur le réseau:


Il y a déjà 5 adresses IP dans la liste:  des ordinateurs portables, des tablettes, etc.

Maintenant, je demande à mon ESP8266 de joindre mon réseau WiFi en écrivant:

AT+CWJAP="SSID","PSK"

... où vous remplacez SSID par le nom de votre réseau Wi-Fi (tel qu'il apparaît dans la liste des réseaux disponibles affichés avec CWLAP) et PSK par le mot de passe de votre réseau Wi-Fi.  Vous devez gardez les guillemets.  Par exemple, si votre réseau s'appelle Marcel et que votre mot de passe pour y accéder est w83hgdt22, vous écrivez:

AT+CWJAP="Marcel","w83hgdt22"

Pas d'espaces, une virgule entre le nom de réseau et le mot de passe, et vous conservez les guillemets.

L'ESP8266 devrait répondre "OK".

Si maintenant j'écris la commande "AT+CIFSR", l'ESP8266 me fournit l'adresse IP qu'on lui a assigné:

192.168.4.1
192.168.1.75

J'utilise à nouveau "Fing" pour voir ce qui est branché sur mon réseau et, effectivement, un nouvel appareil est apparu dans la liste,  à l'adresse IP 192.168.1.75 !




On peut maintenant quitter le réseau sans fil, grâce à la commande "AT+CWQAP".

Maintenant que l'ESP8266 s'est branché avec succès à votre réseau Wi-Fi, il s'y branchera automatiquement dès son prochain démarrage, sans que vous ayez besoin de le lui  demander au moyen  de la commande CWJAP.  Il conserve en mémoire le nom et le mot de passe de votre réseau.

Dans un prochain article, nous tenterons de faire quelque chose d'utile avec notre ESP8266.  Ce serait chouette.


Yves Pelletier   (TwitterFacebook)