Suite à l’insoutenable pression infligée par @iooner, j’ai quitté mon travail et entamé un jeûne afin de consacrer un peu plus de temps à la rédaction de cet article.

Blague à part, après près d’un an de calme sur le blog, voici enfin l’article sur ce cher ESP8266.

L’ESP8266, qu’est-ce que c’est ?

L’ESP8266 n’est ni plus ni moins qu’un microcontrôleur possédant des capacités Wi-Fi. Rien de très novateur là dedans me direz-vous, mais détrompez-vous : l’ESP8266 a de quoi séduire les plus rabats-joie d’entre vous !

Bien des arguments pour convaincre

Et pour en lister grossièrement quelques-uns :

  • Il est très petit, puisque du haut de sont package QFN32, le microcontrôleur seul ne fait que 5mm de côté.
  • Il ne consomme qu’une dizaine de micro-ampères en mode deep-sleep, ce qui rend aisés les montages sur batterie.
  • Comme nous le verrons au cours de cet article, il s’utilise de manière très simple.
  • Il coûte très peu cher, puisqu’on le trouve sous forme de module autour des 3$.

Toutes ces qualités lui ont permis de se forger une immense communauté qui se fera -je l’espère- un plaisir à répondre aux questions que je n’aurais pas abordées ici.

Pourquoi l’utiliser ?

Ai-je réellement besoin de répondre à cette question ? L’ESP8266 permet aux gens que nous sommes de connecter de manière simple et économique nos montages.

On l’imagine très facilement dans des projets type domotique, dans des sondes autonomes basse consommation (température, ouverture de portes, etc.), dans nos micro-ondes, cafetières, et j’en passe.

Et techniquement, comment ça se passe ?

L’ESP8266, quand vous le recevez, embarque déjà toute la pile TCP/IP. Une bonne partie du travail nous est alors offerte et nous n’avons plus qu’à nous amuser. Nous verrons dans cet article qu’il existe plusieurs façons de l’utiliser, mais pour le moment, il est encore trop tôt pour en parler.

Abordons plutôt dans un premier temps l’aspect hardware ; et permettez-moi à cette occasion de vous montrer cette image :


Schéma de base

Ces petites choses sont des modules embarquant un ESP8266. Ici, vous en voyez deux, mais sachez qu’il en existe -à l’heure où j’écris ces lignes- pas moins de quatorze.

Ces différents modules sont baptisés ESP-01, ESP-02, et ainsi de suite jusqu’à ESP-13 (l’ESP-12-E vient en effet boulverser le classement).

Ils possèdent tous des caractéristiques qui leurs sont propres, et on pourra noter comme différences majeures les points suivants :

  • Nombre d’entrées/sorties mappées,
  • Antenne sur PCB, céramique, ou simple connecteur,
  • Type de socket (DIL, pinhole, etc.),
  • Dimensions,
  • Et certainement d’autres détails qui m’ont echappé.

En résumé, les points qui peuvent être réellement impactants pour vos projets sont le nombre d’entrées sorties mappées et le type d’antenne. En ce sens, j’aurais tendance à vous recommander l’ESP-03 ou l’ESP-12 (avis que je ne peux fonder qu’en en lisant les specs, puisqu’à l’heure actuelle je n’ai en ma possession que l’ESP-01 et l’ESP-02 qui comme nous le verrons un peu plus loin ont quelques défauts pour le moins gênants).

Ce petit tour d’horizon touchant à sa fin, nous pouvons désormais attaquer les choses sérieuses.

Première mise sous tension

Il est temps de faire nos premiers tests, et pour cela il va nous falloir quelques petites choses :

  • Un ordinateur (Linux, OS X, Windows, peu importe),
  • Un module ESP-XX (ici, j’utiliserai un ESP-01),
  • Un bridge USB-UART (type FT232R, mais un Arduino peut faire l’affaire),
  • Si votre bridge ou votre Arduino fonctionne en 5v, un level shifter 5v vers 3.3v,
  • Une breadboard et quelques fils,
  • Screen, Minicom, Putty, le moniteur série de l’IDE Arduino, ou ce qui vous fait plaisir tant que ça vous permet de lire et d’écrire sur votre port série.

Vous l’aurez compris, l’ESP8266 s’utilise à l’aide d’un port série. C’est à travers celui-ci que nous allons lui envoyer des commandes AT.

Notez bien qu’il est impératif de ne pas approcher le 5v de l’ESP8266 ; celui-ci ne tolèrant que le 3.3v, pour son alimentation comme pour son RX.

Schéma de base

Le schéma suivant illustre la configuration que j’utiliserai pour faire les exemples de l’article :


Schéma de base

Comme vous pouvez le constater, mon bridge ne dispose ici que de sorties 5v. J’ai donc dû ajouter un de ces fameux level shifter. L’alimentation n’est pas représentée ici, mais pensez bien à amener du 3.3v sur le fil vert. L’alimentation 5v du level shifter peut quant à elle être tirée du bridge si celui-ci en dispose d’une.

Vous remarquerez que le fil orange relie la broche CH_PD au 3.3v. Cette connexion est nécessaire pour démarrer l’ESP.

Configuration logicielle

J’utiliserai ici le très bon CoolTerm, disponible sur toutes les plateformes. La configuration utilisée est la suivante :


Schéma de base

Nous pouvons à présent nous connecter, puis mettre sous tension le montage. Quelques inscriptions devraient apparaitre à l’écran nous indiquant que le module est prêt :

1
2
3
2Y6—½ý˜2Y<ükDÚ||’Ô¶’.,?$j
[Vendor:www.ai-thinker.com Version:0.9.2.4]

ready

Si tout s’est bien passé, nous pouvons commencer. Autrement, il se peut que votre module ne soit pas pré-configuré à 9600 bauds. À vous de les essayer tous à commencer par 115200.

AT ?

Comme je vous le disais tout à l’heure, il existe plusieurs façons d’utiliser l’ESP8266. La première -la plus répandue sur les forums- consiste à l’utiliser à l’aide d’un jeux de commandes AT.

Ce mode de fonctionnement implique l’utilisation d’un microcontrôleur en plus, et c’est à mon sens une façon bien étrange de l’utiliser quand on sait que l’ESP8266 en est lui même un. Mais puisqu’il existera toujours “des cas où”, et puisque “c’est bon à savoir”, nous allons en parler.

Ce protocole à beau avoir quelques années, il est encore très courant, et les amateurs de Xbee ou de SIM900 y auront déjà eu affaire. Pour les autres, sachez que ces choses ont un point commun : Ils répondent OK à la commande AT. Une façon pour eux de nous signaler qu’ils nous comprennent et qu’ils sont prêts à opérer :

1
2
AT
OK

Nous n’allons pas nous attarder sur ce mode de fonctionnement, mais tentons tout de même de nous connecter à un point d’accès Wi-Fi et d’afficher notre IP. Pour cela, jettons un oeil à la liste des commandes supportées, et plus particulièrement aux commandes suivantes :

  • AT+CWMODE nous permettra de configurer le module en mode station qui contrairement au mode access point autorisera le module à se connecter à un réseau,
  • AT+CWLAP nous permettra d’afficher une liste des points d’accès à portée,
  • AT+CWJAP demandera au module de se connecter au point d’accès spécifié en argument,
  • AT+CIFSR nous permettra enfin de connaitre l’addresse IP que le serveur DHCP aura bien voulu nous céder.

Mode de fonctionnement

Pour configurer le module en mode station, vous devez procéder comme ceci :

1
2
AT+CWMODE=1
OK

Vous pouvez par ailleurs à tout moment connaitre le mode dans lequel le module est configuré en faisant comme ceci :

1
2
AT+CWMODE?
+CWMODE:1

Nous en avons désormais le coeur net : Le module est en mode station.

Lister les points d’accès à portée

Pour afficher une liste des points d’accès auxquels l’ESP8266 peut se connecter, voici la marche à suivre :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
AT+CWLAP

+CWLAP:(4,"Livebox-6DFC",-85,"18:1e:78:4e:6d:fc",1)
+CWLAP:(0,"FreeWifi_secure",-73,"f4:ca:e5:b1:62:22",1)
+CWLAP:(2,"NEUF_5F88",-81,"e0:a1:d7:13:5f:8c",1)
+CWLAP:(0,"FreeWifi",-73,"f4:ca:e5:b1:62:21",1)
+CWLAP:(4,"Bbox-6F675B",-84,"00:1f:9f:e5:94:e7",1)
+CWLAP:(0,"Bouygues Telecom Wi-Fi",-84,"5a:1f:9f:e5:94:e4",1)
+CWLAP:(4,"NC-AP2",-54,"6c:19:8f:09:0d:22",4)
+CWLAP:(4,"NUMERICABLE-AAA6",-71,"28:c6:8e:2d:aa:a6",1)
+CWLAP:(0,"orange",-87,"d6:ae:ec:30:ca:4b",6)
+CWLAP:(4,"Livebox-3676",-87,"d0:ae:ec:30:ca:4b",6)
+CWLAP:(0,"Bouygues Telecom Wi-Fi",-90,"72:1f:9f:e8:4e:4e",1)
+CWLAP:(0,"FreeWifi_secure",-71,"f4:ca:e5:91:1b:ea",11)
+CWLAP:(4,"NC-LVB",-35,"c0:ac:54:7f:4c:16",11)
+CWLAP:(1,"freebox_MJ",-88,"5a:6c:16:f8:80:58",11)
+CWLAP:(3,"Poutre de Bamako",-88,"f4:ca:e5:bb:f5:a8",12)
+CWLAP:(0,"FreeWifi",-88,"5a:6c:16:f8:80:5a",11)
+CWLAP:(1,"freeboxChama",-83,"14:0c:76:fe:a8:58",11)

Plusieurs choses sont à noter ici. Tout d’abord, que mes voisins sont des comiques. Ensuite, que nous avons la liste des SSID à portée ainsi que quelques informations potentiellement utiles.

Dans le cas présent, c’est NC-AP2 qui va nous intéresser. L’atténuation est relativement grande du fait que le point d’accès se situe à bonne distance du module et derrière un mur porteur (ce qui vous donne une vague idée de la portée de l’ESP).

Se connecter à un point d’accès

Encore une fois rien de sorcier, puisque la commande AT+CWJAP se charge de tout :

1
2
AT+CWJAP="NC-AP2","votrepass"
OK

Il semblerait que tout se soit bien passé.

Connaître son IP

Voilà de quoi achever ce court exemple :

1
2
3
AT+CIFSR
172.22.12.49
OK

Le serveur DHCP nous a accordé l’adresse IP 172.22.12.49, vérifions cela dans notre terminal :

1
2
3
4
5
$ ping 172.22.12.49
PING 172.22.12.49 (172.22.12.49): 56 data bytes
64 bytes from 172.22.12.49: icmp_seq=0 ttl=255 time=483.425 ms
64 bytes from 172.22.12.49: icmp_seq=1 ttl=255 time=604.631 ms
64 bytes from 172.22.12.49: icmp_seq=2 ttl=255 time=522.866 ms

Nous sommes connectés !

Et ensuite ?

Il va sans dire que ces différentes commandes n’ont pas pour vocation d’être entrées par un humain et que l’ESP8266 n’a pas grand interêt à être raccordé au port série d’un ordinateur quelconque. C’est donc une tâche de laquelle sera en charge votre Arduino ou que sais-je encore pour lui permettre de réaliser la chose qu’il aura à faire.

Cependant, et je m’excuse par avance envers les personnes qui étaient interessées par ce mode de fonctionnement, je ne m’attarderai pas plus sur ce chapitre. Comme je vous le disais, c’est à mon sens une hérésie que d’utiliser un microcontrôleur pour piloter un autre microcontrôleur au moins aussi peu puissant. L’ESP8266 est plein de ressources, et c’est celles-ci que nous allons exploiter dans la partie 2 : Le mode Standalone.

En attendant, si cet article vous a plu, je vous invite à le partager. Et encore une fois, si vous avez des questions, je me ferai une joie d’y répondre ; que ce soit sur Twitter ou dans les commentaires un peu plus bas.

À très bientôt !