Esp8266

De Knowledge base
Version du 12 janvier 2018 à 09:21 par Jpinon (discuter | contributions)

(diff) ← Version précédente | Voir la version courante (diff) | Version suivante → (diff)

ESP 8266

Ce module est extraordinaire :

  • Il est pas cher entre 1 et 8 € en fonction de où on l’achète (ne pas hésiter pour chercher sur e-bay!)
  • Il est rapide et a plein de RAM

En revanche :

  • Logique en 3.3v seulement
  • Fragile: ne résiste pas à une erreur de polarité ou de tension (5v le tue)

Brochage

En Détail On essaye dans un premier temps de le brancher simplement.

On l'alimante en +3.3V et GND.

On relie le RX du module au TX d'un PC et inversement (avec une interface 3.3V sinon on crame tout).

Et on relie la broche CP_PD à +3.3V (circuit actif pas en veille)

On peut relier le RESETau +3.3V et placer un bouton reset entre RST et GND. (

Utilisation sur une plaque de test (breadboard)

La connectique du module par deux rangées de 4 broches à 2,54 mm l'une de l'autre interdit l'utilisation sur une "plaque à trous". Il faut disposer d'un petit adaptateur vendu quelques euros mais que l'on peut se faire sois même.

C'est même un bon exercice de gravure de circuit imprimé.

Le PCB

Test

Connectivité

De base le ESP8266 fonctionne à la vitesse :

  • 74880

Mais les ESP-01 sont livrés avec un firmware "AT" dont la vitesse est fonction des fournisseurs:

  • 9600
  • 57600
  • 115200 (c'est mon cas)

Au démarrage on a:

l`rlÂÕMEM CHECK FAIL!!!
ärlrô
Ai-Thinker Technology Co. Ltd.

ready

Pas de panique pour le MEM CHECK FAIL!!! il parait que c'est normal...


Avec Wifi Analyser sur Android on voit:

Wifi-analyser.png On est à la compagne... pas beaucoup de WIFI !

On peut même s'y connecter (pas d'encryption pas de mot de passe). Sur mon téléphone ca me donne quelque chose comme ça:

ESP8266-AP1.png

Ensuite avec PUTTY on a tout simplement l'impression que... ca ne marche pas.

On a bien un "echo" de ce qu'on tapes qui s'affiche mais ... rien ne se passe.

AT

On appuie bien sur <Return> mais le EPS8266 reste muet.

La solution est qu'il faut envoyar, à la fin de la ligne un CR + un LF.

Avec Putty on tape la commande (AT par exemple) puis le touche <Return> + <Ctrl>+J (le code contrôle de LF). Et ca marche!

AT 

OK

Ou plus complexe :

AT+GMR
AT version:0.25.0.0(Jun  5 2015 16:27:16)
SDK version:1.1.1
Ai-Thinker Technology Co. Ltd.
Jun 23 2015 23:23:50 

OK

Test de base wifi

Mode Wifi

Par défaut le module est en mode AP (Point d'access).

On le passe en mode "station" par :

AT+CWMODE_CUR=1
OK

Liste des points d'acces

On liste les AP disponibles par :

AT+CWLAP
+CWLAP:(2,"SFR_AC18",-53,"e0:a1:d7:e8:ac:1c",1)
+CWLAP:(0,"Bouygues Telecom Wi-Fi_2EX",-70,"80:1f:02:d3:ff:fa",1)
+CWLAP:(0,"SFR WiFi FON",-53,"ca:a1:d7:e8:ac:1d",1)
+CWLAP:(0,"SFR WiFi Mobile",-53,"ca:a1:d7:e8:ac:1f",1)
+CWLAP:(4,"Bbox-7CB6895A",-80,"e8:be:81:a3:64:f0",1)
+CWLAP:(4,"NUMERICABLE-6252",-84,"6c:b0:ce:ac:62:56",1)
+CWLAP:(4,"XXXX-12d8",-76,"00:37:b7:52:12:de",1)
+CWLAP:(4,"Bbox-6CB8D261",-73,"c0:ac:54:33:34:10",1)
+CWLAP:(0,"Bouygues Telecom Wi-Fi",-70,"c0:ac:54:33:34:11",1)
+CWLAP:(0,"FreeWifi",-84,"f4:ca:e5:9e:78:e1",5)
+CWLAP:(0,"FreeWifi_secure",-84,"f4:ca:e5:9e:78:e2",5)
+CWLAP:(4,"Livebox-b0f6",-68,"5c:33:8e:cd:f3:d3",6)
+CWLAP:(0,"orange",-68,"52:33:8e:cd:f3:d3",6)
+CWLAP:(0,"SFR WiFi FON",-91,"7a:17:33:7a:6d:e5",6)
+CWLAP:(2,"SFR_1EF0",-91,"30:7e:cb:b9:1e:f4",6)
+CWLAP:(0,"SFR WiFi Mobile",-90,"7a:17:33:7a:6d:e7",6)
+CWLAP:(4,"Livebox-553a",-89,"00:19:70:65:46:a6",6)
+CWLAP:(2,"freebox_WiFiAM",-69,"f4:ca:e5:b4:ae:d0",7)
+CWLAP:(0,"FreeWifi",-68,"f4:ca:e5:b4:ae:d1",7)
+CWLAP:(0,"FreeWifi_secure",-69,"f4:ca:e5:b4:ae:d2",7)
+CWLAP:(2,"mohamedsansfil",-79,"14:0c:76:76:6b:34",7)
+CWLAP:(0,"FreeWifi",-78,"14:0c:76:76:6b:35",7)
+CWLAP:(0,"FreeWifi_secure",-78,"14:0c:76:76:6b:36",7)
+CWLAP:(3,"freebox_WiFiAM_EXT",-84,"a0:63:91:2a:44:f6",7)
+CWLAP:(4,"SFR-0c98",-93,"44:e9:dd:e9:0c:9e",1)
+CWLAP:(4,"Bbox-8AC3CA",-83,"96:fe:f4:8a:c3:cc",11)
+CWLAP:(0,"FreeWifi",-60,"00:24:d4:66:32:f1",11)
+CWLAP:(3,"NUMERICABLE-3475",-83,"00:1a:2b:23:8b:ad",11)
+CWLAP:(0,"FreeWifi_secure",-61,"00:24:d4:66:32:f2",11)
+CWLAP:(3,"NUMERICABLE-2019",-50,"c0:d9:62:ea:b4:39",11)
+CWLAP:(2,"LAX",-61,"00:24:d4:66:32:f0",11)
+CWLAP:(0,"orange",-84,"46:8a:ae:35:45:90",11)
+CWLAP:(3,"HCJ-MED",-81,"88:5b:dd:27:9b:94",13)
+CWLAP:(3,"HCJ",-81,"88:5b:dd:27:9b:95",13) 

OK

Ouahou on est pa Paris on "bouffe" du wifi!

Chaque ligne donne dans l'ordre :

  • Le mode de sécurisation
    • 0 OPEN
    • 1 WEP
    • 2 WPA_PSK
    • 3 WPA2_PSK
    • 4 WPA_WPA2_PSK
  • Le SSID
  • la force du signal (où plutôt attenuation en dB qui en est le log de l'inverse où un truc comme ça)
  • l'adresse mac
  • le canal WIFI

Connexion a un point d'acces

On demande à quel AP on est connecté:

AT+CWJAP_CUR?
No AP

Ho.. a aucun!

On commence à se connecter à un wifi "public":

AT+CWJAP_CUR="FreeWifi",""
WIFI CONNECTED
WIFI GOT IP

OK

Youppie!

On essaie plus dur, une vrai connexion sécurisée en mode 2 c'est a dire WPA_PSK:

AT+CWJAP_CUR="LAX","jevaispasvousdonnermonmotdepasse"
WIFI CONNECTED
WIFI GOT IP 

OK

Ca à l'air de marcher!

Connexion TCP

Connaitre son IP

AT+CIPSTA?
+CIPSTA:ip:"192.168.0.4"
+CIPSTA:gateway:"192.168.0.254"
+CIPSTA:netmask:"255.255.255.0" 

OK

Mon routeur m'a donné 192.168.0.4 comme IP!

Faire une requete http

Voila le vif du sujet! Faire une requete HTTP! on testera un GET / sur 95.142.160.1 (ce serveur). Faisons le par telnet pour voir:

$ telnet 95.142.160.1 80
Trying 95.142.160.1...
Connected to 95.142.160.1.
Escape character is '^]'.
GET /
<html>
<body>
rien...
</body>
</html>
Connection closed by foreign host.
$

Bon maintenat avec le ESP8266!

AT+CIPSTART="TCP","95.142.160.1",80
CONNECT

OK

Jusqu'ici tout va bien!

Maintenant on envoie 7 octets : 'GET /\n\r' (ça fait bien 7)

AT+CIPSEND=7

OK
>

Tiens un ">" ça ressemble a un "prompt".

On tappe alors 'en aveugle' GET / + <ctrl> M + <ctrl> + J.

sous nos yeux ébaillis on voit s'afficher la réponse :

Recv 7 bytes

SEND OK

+IPD,38:<html>
              <body>
                    rien...
                           </body>
                                  </html>
                                         CLOSED

Trop fort !!! Au delta pres de la gestion de CR/LF par putty on a la même chose qu'avec TELNET!

Si on branche le module ESP8266 sur la sortie série d'un arduino on a doté ce dernier d'un acces web!!!!!

C'est énorme non pour des modules à 4,36€ les deux!!!!

Prograppation

Avec l'IDE Arduino

On commence simplement.

On fait les branchements suivants en plus de ceux décrits plus haut.

  • On branche un bouton poussoir entre RESET et GND avec une résistance pull-up de 10k
  • On fait la même chose pour le la broche GPIO 0 (Bouton "program")
  • On reste connecté en Série sur TX et RX.

ATTENTION TOUJOURS EN 3,3V toute tentative de 5v crame définitivement le ESP-01!!!

ESP01-PROG.png

On ouvre l'IDE Arduino et on charge un Scketch quelconque (dans les exemples on a un ESP8266 blink qui est parfait pour le test).

  1. On appuie sur RESET (et on reste appuyé)
  2. On appuie sur PROGRAM (et on reste appuyé)
  3. On relache RESET (PROGRAM reste appuyé)
  4. On relache PROGRAM
  5. On lance la compilation et le transfert.
  6. Dès que compilation est terminée et et que le statu d'avancement passe à upload on la led bleu du ESP01 commence à clignoter.
  7. On attends la fin du téléchargement.

Le programme est dedans et commence à tourner.

Dans notre cas (Sketch ESP8266 blink) la led bleu clignote lentement.

Ajoutez une liaison série

Serial.begin(115200)

et faites quelques println dans la fonction loop. Qu'observe t-ton? Les caractères écrits arrivent bien sur la liaison série mais la LED ne clignote plus lentement mais envoie des petits "flashs".

Que ce passes-t-il? Et bien je ne sais pas trop mais je crois que la led bleu sert aussi pour dire qu'il se passe quelque chose sur le port série... alors il y a conflit dans son utilisation et c'est Serial qui gagne!!!

Exemples

Une liste de réalisations complètes basé sur ESP 8266.

  • Un capteur de température et d'humidité WIFI ESP01-DHT22

Construction de la chaine de programmation sous linux (raspberry bien sur)

Les packages debien/unbuntu/raspbian

sudo apt-get install git 
sudo apt-get install autoconf 
sudo apt-get install build-essential 
sudo apt-get install gperf 
sudo apt-get install bison 
sudo apt-get install flex 
sudo apt-get install texinfo 
sudo apt-get install libtool 
sudo apt-get install libncurses5-dev 
sudo apt-get install wget 
sudo apt-get install gawk 
sudo apt-get install libc6-dev-i386 

ou bien

sudo apt-get install libc6-dev
sudo apt-get install python-serial 
sudo apt-get install libexpat-dev

Xtensa crosstool-NG

sudo su -
mkdir /opt/Espressif
cd /opt/Espressif
git clone -b lx106 git://github.com/jcmvbkbc/crosstool-NG.git 
cd crosstool-NG
./bootstrap && ./configure --prefix=`pwd` && make && make install
./ct-ng xtensa-lx106-elf

./ct-ng build PATH=$PWD/builds/xtensa-lx106-elf/bin:$PATH

TX/RX comme GPIO

L'ESP01 est merveilleux mais il a un gros défaut... il n'a que deux GPIO (GPIO0 et GPIO2). Ca limite les applications. Et bien c'eat faut il en a 4!!! Oui les ports marqués RX et TX sont aussi des GPIO (1 et 3).

Tout d'abord je veux ici metre fin à une légende urbaine : Une fois l'ESP01 programé pour utiliser GPIO1 et GPIO3 comme des ES de base l'ESP serait définitivement perdu à la reprogramation.

C'est faux!!!

D'ailleurs avec l'IDE Arduino la constante LED_BUILTIN correspond bien à TX et donc a GPIO1.

Un petit scketch :

  1. #define GPIO0 0
  2. #define CPIO1 1
  3. #define GPIO3 3
  4.  
  5. void setup() {
  6.   pinMode(CPIO1, OUTPUT);     // Reuse TX
  7.   pinMode(GPIO0, INPUT);      // UART prog 
  8.   pinMode(GPIO3, OUTPUT);     // Reuse RX
  9. }
  10.  
  11. // the loop function runs over and over again forever
  12. void loop() {
  13.   if (!digitalRead(GPIO0)) {
  14.      if ((millis()%1000) >500){
  15.       digitalWrite(CPIO1,LOW);
  16.      }else {
  17.       digitalWrite(CPIO1,HIGH);
  18.      }
  19.   }
  20.   if ((millis()%100) >50)
  21.     digitalWrite(GPIO3,LOW);
  22.   else
  23.     digitalWrite(GPIO3,HIGH);
  24. }

Si l'ESP01 est sur un programateur on observe:

  • La LED RX (GPIO3) clignotte rapidement. (10 par sec)
  • Si on appuie sur le bouton "PROG" (GPIO0) la LED TX (GPIO1) clignotte lentement (1 par sec)

L'ESP01 est toujours prêt pour être reprogramé par un RESET effectué lorsque GPIO0 est enfoncé (LOW).

On pourait imaginer un thermostat à Base d'ESP01:

  • Un afficheur OLED et un capteur de température MCP9808 (GPIO 0 et 2)
  • Un relai sur GPIO3
  • Un bouton sur GPIO1

liens

Utiliser un Esp01 en i2c http://www.forward.com.au/pfod/ESP8266/GPIOpins/ESP8266_01_pin_magic.html