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)

5 commentaires:

  1. Très intéressant comme article. Merci

    RépondreSupprimer
  2. BONJOUR

    J'ai un message d'erreur

    warning: espcomm_sync failed
    error: espcomm_open failed
    error: espcomm_upload_mem failed
    error: espcomm_upload_mem failed

    RépondreSupprimer
    Réponses
    1. J'ai le même message.
      J'ai lu ailleurs qu'il faut changer le BAUD Rate ce que j'ai fait sans succès.

      Supprimer
    2. même erreur en fait c'est tout con il faut que gpio0 soit connecté au gnd pour televerser dans l'eprom sinon moi sur ma carte y'a un bouton Flash à côté du reset et tu le maintien le temps du téléversement et ça marche

      Supprimer