Découverte de l'ESP8266
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.
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
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:
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&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.