esp8266-coin.png

Présentation

L'ESP8266 est un petit module Wifi très bon marché (de l'ordre de 2,80€ port compris au jour de l'écriture de ce billet).
Il permet à l'origine de s'interfacer en serial avec d'autres périphériques et donc de faire de l'UART vers Wifi. Par exemple pour qu'un Arduino puisse se connecter à Internet pour récupérer la météo, ou envoyer la température d'un radiateur.
Son faible coût et ses capacités croissantes (firmwares alternatifs, nouvelles versions hardware) ont font un candidat sérieux pour tous les "objets connectés".

Par rapport à un module 433MHz du même ordre de prix, les avantages principaux sont:
- Possibilité de se passer d'Arduino etc.. Le module peut etre flashé pour mettre son propre firmware et donc faire un peu ce qu'on veux (dans la limite de ce qu'autorise 80Mhz).
- On ne se soucie plus d'implémenter un protocole, de mettre du "manchester" etc... On est direct en TCP/IP classique pour nos applications.
- On bénéficie du chiffrement Wifi. (WPA/WPA2)
- Il y a des GPIOs (le nombre dépend des modèles)
- La portée semble tout a fait correcte et on pourra donc installer un module partout ou le signal Wifi peut être capté... Et donc généralement n'importe ou dans la maison.

Le seul bémol, c'est que le Wifi est assez consommateur de courant. Même si le but n'est par exemple de l'allumer que quelques secondes par heure pour envoyer la température etc... Donc a étudier ce que cela donne sur batterie et quels sont les moyens possibles d'optimisation. (Deep Sleep 10µA ?)

Hardware

Il existe à ce jour 12 versions de ce module. Voir ici
Je ne détaillerais donc pas les branchements dans le détail mais en gros, un Vcc, une masse, un TX, un RX et d'autres trucs (GPIOs).

/!\ Ce module est en 3.3V !
Ne PAS y mettre 5V ...j'ai testé par erreur...je confirme... Il n'aime pas ;)

C'est valable pour l'alim et pour les niveaux TX/RX.
L'alimentation doit semble t-il pouvoir founir jusqu'à 215 mA suivant les paramètres et phases Wifi.

La plupart des versions n'ont pas le classique pas de 2.54 pour les connecteurs.. il faut donc bidouiller un peu pour les mettre sur nos breadboards ou se procurer une carte adaptateur.

adapteurDIYESP8266.jpg

adapterESP8266.png

Software

Il faut donc s'interfacer avec le module en sérial.

Tous les modules ne sont pas fournis avec la même version de firmware, et d'ailleurs on peut modifier le firmware.

Mon 1er module est arrivé en 9600 bauds. D'autres semblent etre en 57600 ou 115200.
Toutes les versions n'ont pas non plus les même CR/LF.

J'ai testé d'abord avec GNU Screen

esp8266GnuScreen.png

Avec la version par défaut de mon 1er module, avec screen, il faut alors utiliser Crtl + m puis Ctrl + j pour indiquer les fin de lignes, et valider les commandes.

Sinon on peut utiliser un peu n'importe quel logiciel (minicom, picocom etc..)
En graphique, il y a aussi cutecom moins connu:

esp8266CuteCom.png



Commandes AT principales avec le firmware de base

- Test

AT
doit renvoyer
-> OK

Sinon vérifier le cablage, le baudrate, les fins de ligne etc...

- ReStarT du module

Permet également de voir version de firmware.

AT+RST

\0x04Z\0xcb
@\0xfd\0x13:6\0xa0;\0xd8@\0xae\0xea\0xfa\0x11\0xc8V\0x0c.\0xea\0xaa\0xfe
Vendor:www.ai-thinker.com Version:0.9.2.4

- Version du firmware

Get firMwaRe ?

AT+GMR

0018000902-AI03

- Mode de fonctionnement du Wifi

Wifi MODE

Il y a 3 modes: Station pour se connecter à un AP (1) / AP pour que des machines se connectent au module (2) / Combinaison des 2 ? (3)

AT+CWMODE=1

- Voir le mode de fontionnement

AT+CWMODE?
+CWMODE:1

- Lister les SSID

Wifi ListAP

AT+CWLAP

+CWLAP:(0,"SFR WiFi Mobile",-69,"xx:xx:xx:xx:xx:xx",1)
+CWLAP:(2,"NEUF_1234",-69,"xx:xx:xx:xx:xx:xx",1)
+CWLAP:(0,"SFR WiFi FON",-69,"xx:xx:xx:xx:xx:xx",1)
+CWLAP:(2,"DartyBox_1234",-80,"xx:xx:xx:xx:xx:xx",6)
+CWLAP:(4,"Livebox-1234",-76,"xx:xx:xx:xx:xx:xx",6)
+CWLAP:(0,"orange",-77,"xx:xx:xx:xx:xx:xx",6)
+CWLAP:(0,"FreeWifi",-46,"xx:xx:xx:xx:xx:xx",11)
+CWLAP:(0,"FreeWifi_secure",-47,"xx:xx:xx:xx:xx:xx",11)

Le 1er chiffre indique:

0: OPEN
1: WPA_PSK
2: WPA2_PSK
4: WPA_WPA2_PSK

- Se connecter à un SSID

Wifi Join AP

AT+CWJAP="NomSSID","motDePasse"

- Voir sur quel SSID on est connecté

AT+CWJAP?
+CWJAP:"NomSSID"

- Voir son adresse IP

AT+CIFSR
192.168.1.218

- Mode Client TCP:

Ce mode permet au module d'aller se connecter vers un serveur.
Par exemple d'aller demander le contenu d'une page sur Internet.

- Activation des connexions multiples

0: Une seule connexion
1: Connexions multiples

Connection IP MUltiple ConneXions

AT+CIPMUX=1

- Ouvrir une connection vers un serveur

Connection IP START

AT+CIPSTART=4,"TCP","google.com",80

4 est le numéro de canal Le reste parle de lui même.

- Indiquer les données qui vont être envoyées:

Connection IP SEND

AT+CIPSEND=4,18
>

4 pour le numéro de canal
18 est le nombre d'octets qui vont être envoyés (GET / HTTP/1.0\r\n\r\n )
Un > indique que les données vont ensuite pouvoir être envoyées.

- Envoi des données vers le serveur

> GET / HTTP/1.1

SEND OK

-Réception des données depuis le serveur:

+IPD,4,524:HTTP/1.1 302 Found
Cache-Control: private
Content-Type: text/html; charset=UTF-8
Location: http://www.google.fr/?gfe_rd=cr&ei=1jrdVILoHonu8wfClICYBw
Content-Length: 258
Date: Thu, 12 Feb 2015 23:44:22 GMT
Server: GFE/2.0
Alternate-Protocol: 80:quic,p=0.08

<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF="http://www.google.fr/?gfe_rd=cr&amp;ei=1jrdVILoHonu8wfClICYBw">here</A>.
</BODY></HTML>

+IPD,4,524 signifie:
IPD: IP Data
4: Numéro de canal
524: Nombre d'octets de la réponse

- Mode Serveur TCP:

- Activation des connexions multiples

0: Une seule connexion
1: Connections multiples

AT+CIPMUX=1

- Mise en écoute du module sur le port TCP 80

Le 1er paramètre est 1 pour ouvrir le port, 0 pour le fermer.

Connexion IP SERVER

AT+CIPSERVER=1,80

- Test de connexion depuis une autre machine du LAN

$ telnet 192.168.1.218 80
Trying 192.168.1.218...
Connected to 192.168.1.218.
Escape character is '^]'.
AbcdEFGhi

Le module recoit bien les données:

Link
+IPD,0,11:AbcdEFGhi
OK

0 étant le numéro de canal
11 étant le nombre d'octets (avec \r\n\r\n )

- Répondre à la requète du client

Il y a a priori environ 1 minute de timeout pour répondre lors de mes tests (Message Unlink)

On indique le canal de réponse, le nombre d'octets, puis les données à transmettre:

AT+CIPSEND=0,9
> POUET

Coté client, on recoit bien la réponse:

$ telnet 192.168.1.218 80
Trying 192.168.1.218...
Connected to 192.168.1.218.
Escape character is '^]'.
AbcdEFGhi
POUET

- Fermeture de la connexion

On indique le numéro de canal 0

AT+CIPCLOSE=0

$ telnet 192.168.1.218 80
Trying 192.168.1.218...
Connected to 192.168.1.218.
Escape character is '^]'.
aaabbcc
hello worConnection closed by foreign host.
$

Conclusion

Ceci n'est qu'une présentation générale de l'ESP8266, et de son firmware par défaut.
Cela montre quand même qu'avec 2,80€, on peut se connecter "facilement" en Wifi.

Mais grâce au SDK, il est possible d'utiliser d'autres firmwares facilitant l'utilisation, et plusieurs projets sont en cours avec probablement le plus utilisé NodeMCU qui pourra être le sujet d'un autre billet.