ESP8266 : Un Arduino pour 2€ avec WIFI !!

Introduction :

Caractéristiques

Arrivé à l’été 2014, l’ESP8266 est un petit module WIFI programmable développé par la société chinoise Espressif Systems.

Il est de taille réduite (environ la taille d’une pièce d’un Euro : (14,3 x 24,8 mm), très bon marché (à peine 2 euros pour le modèle ESP 8266-01) avec un microcontrôleur tournant à 80 MHZ, pouvant se connecter à internet en WIFI, un port série, des GPIO (General Purpose Input Output à savoir des entrées sorties numériques), une entrée analogique ADC (pour certains modèles seulement), etc.

Il existe à ce jour une dizaine de modèles disponibles avec plus ou moins de GPIO (entrées/sorties, etc.), etc.  Le plus basique est l’ESP-01. L’ESP-12 plus complet possède une entrée analogique ADC, etc.

esp8266-lesmodeles.png
Principales caractéristiques :
  • CPU : 32-bit RISCTensilica Xtensa LX106 à 80 MHz
  • WiFi 2.4 GHz (802.11 b/g/n)
  • 64 Ko RAM pour le code et 96 Ko pour les données
  • 512 Ko Flash SPI à 4 Mo (en fonction du modèle)
  • GPIO / PWM / ADC (en fonction du modèle)
  • UART / I2C / SPI
  • Alimentation en 3,3V
  • Consommation : entre 60mA et 215mA en fonctionnement normal, quelques dizaines de µA en veille
On peut donc facilement avec l’ESP construire à moindre coût des capteurs distants ou des actionneurs distants communiquant via WIFI, faire de la domotique, s’initier à l’internet des objets (en anglais IOT=Internet Of Things), etc.

L’ESP peut aussi être utilisé comme client WEB ou héberger un serveur WEB.

Un autre avantage important de l’ESP8266 est qu’il peut facilement être programmé avec l’IDE Arduino moyennant un peu de paramétrage initial.

Pour ce premier essai nous découvrirons les commandes AT (que je détaillerai plus en avant dans cet article) permettant de communiquer avec l’ESP puis le paramétrage de la connexion WIFI.

Puis nous verrons dans des articles ultérieurs comment utiliser les ESP pour des projets divers et variés …

Tensions de fonctionnement

Alimentation

Attention, l’ESP fonctionne en 3.3V ( 3.6 V max) que ce soit pour l’alimentation ou l’interface série ! Il ne faut donc surtout pas utiliser du 5 V au risque de le griller …

En particulier en cas d’utilisation via un Arduino UNO, il faut savoir que la sortie 3,3 V de l’Arduino ne fournit que 30 mA max et l’ESP peut demander jusqu’à 200 mA environ … Elle n’est donc pas utilisable pour alimenter l’ESP …

La solution pour l’alimentation consiste à utiliser par exemple :

  • une alimentation de breadboard fournissant du 3,3 V,
  • l’alimentation 5 V de l’Arduino suivie d’un pont diviseur,
  • des piles avec un régulateur 3,3 V,
  • etc.

Transmission série

Pour la transmission série permettant de communiquer avec l’ESP pour la configuration ou la programmation, on peut par exemple utiliser :
  • soit un Arduino UNO. Il faut alors mettre en place un pont diviseur de tension pour la transmission de l’arduino UNO vers l’ESP afin de transformer le 5 V en 3 V (dans le sens inverse ce n’est pas nécessaire car un niveau haut envoyé par l’ESP qui fonctionne en 3 V sera bien considéré comme tel par l’Arduino même si celui-ci fonctionne en 5 V),
  • soit plus simplement un convertisseur USB – TTL fonctionnant en 3 V.

Dans cet article nous utiliserons un Arduino Uno.

Préparation de l’IDE Arduino

Pour pouvoir utiliser l’IDE Arduino avec les ESP, il est nécessaire de l’adapter comme indiqué ci-dessous :

Via le menu préférences, ajouter l’URL http://arduino.esp8266.com/stable/package_esp8266com_index.json

esp_pref

Ensuite aller dans le menu « outils / type de carte …. / boards manager », puis se placer sur le pavé ESP8266 et cliquer sur install. Le résultat obtenu après quelques secondes doit être le suivant :

esp_install_board.png

Montage

Matériel

Le matériel utilisé est le suivant :

  • Arduino UNO R3,
  • Alimentation de breadboard pour fournir 3V3 à l’ESP,
  • Une résistance de 4,7 K et une résistance 2,2 K pour relier le RX de l’Arduino (patte 0) vers le RX de l’ESP qui doit recevoir du 3 Volts max,
  • Un ESP8266-01 dont on peut voir une photo et le brochage ci-dessous :

esp826-01

ESP8266_brochage

Schéma

phmo_arduino_esp8266-01-arduino_schema

 

Les branchement à réaliser pour l’ESP sont les suivants :

  1. ESP RX                                           <> ARDUINO RX avec un pont diviseur ramenant le 5 V de l’Arduino à 3,3 V pour l’ESP en réception,
  2. ESP GND                                        <> ARDUINO GND,
  3. ESP CH_PD (Chip Power-Down) <> 3,3 V (pour activer l’ESP),
  4. ESP GPIO 2                                    <> Non connecté pour ce premier montage,
  5. ESP RST (Reset)                            <> Non connecté,
  6. ESP GPIO 0                                    <> Non connecté ou à VCC pour ce premier montage afin d’être en mode exécution (sera à brancher à GND pour programmer l’ESP8266 dans des articles ultérieurs),
  7. ESP VCC                                         <> 3,3 V,
  8. ESP TX                                           <> ARDUINO TX de l’Arduino UNO (il n’est pas nécessaire de prévoir une adaptation de niveau).

L’ESP est pourvu de 8 broches dont malheureusement l’espacement entre elles ne permet pas de l’enficher directement sur la breadboard, d’où l’utilisation de fils volants dans mon montage …

Photo

espbis

Tests

Dans sa configuration initiale avec son firmware d’origine programmé en usine (Official AT firmware), l’ESP8266 démarre en mode série. Il est alors possible de communiquer avec lui via un moniteur série à l’aide de commandes AT (comme ATtention) appelées aussi commandes Hayes qui sont un standard dans les communications sans fils (Bluetooth, Wi-Fi, GSM, etc.).

Il est possible de programmer l’ESP avec des firmware alternatifs voire de développer ses propres firmware à l’aide du SDK fourni par Espressif (http://espressif.com/new-sdk-release/).

 Exemples de firmware alternatifs :
  • NodeMCU : Intégre un interpréteur pour les scripts LUA, 
  • MicroPython : Utilisation du langage microPython,
  • frankenstein : Uboot de style prompt,
  • Espduino : Client MQTT pour Arduino,
  • Official FreeRTOS firmware : Système d’exploitation temps réel,
  • Electodragon custom AT firmware : Commandes AT à 9600 baud avec contrôle des GPIO,
  • NodeLua510 : Interpréteur LUA avec un IDE web.
NB : NodeMCU est le firmware le plus utilisé pour les ESP et nous verrons dans des articles ultérieurs comment le mettre en œuvre.
 Nous allons voir maintenant comment envoyer des commandes AT à l’ESP.

Pour communiquer avec l’ESP nous allons utiliser le moniteur série de l’IDE Arduino (Il est aussi possible d’utiliser un terminal série comme Putty ou Coolterm par exemple) avec le paramétrage des éléments suivants :

  • Chaque commande envoyée en mode série à l’ESP doit se terminer par les caractères \r \n (retour chariot, nouvelle ligne),
  • La vitesse de la liaison série doit être paramétrée conformément à celle fixée dans l’ESP en usine, dans mon cas 112500 bauds (suivant la date d’achat du module le baudrate peut être 9600,  115200 ou 57600).

Au final, dans mon cas le paramétrage du moniteur série de l’Arduino est le suivant :

 phmo_esp_mon_serie
Pour une commande AT avec paramètres comme AT+CWMODE, il est possible :
  • d’avoir la liste des paramètres à renseigner pour la commande : AT+CWMODE=?
  • d’avoir la valeur du paramètre actuellement renseignée : AT+CWMODE?
  • positionner une nouvelle valeur, 1 par exemple : AT+CWMODE=1

 

NB : Il faut renseigner les commandes AT en majuscules pour que celles-ci fonctionnent.

Mes résultats de test obtenus sont les suivants :

  • Commande pour vérifier que l’ESP fonctionne bien : AT

Résultat :

OK

  • Commande pour obtenir la version : AT+GMR

Résultat :

AT version:0.40.0.0(Aug  8 2015 14:45:58)
SDK version:1.3.0
Ai-Thinker Technology Co.,Ltd.
Build:1.3.0.2 Sep 11 2015 11:48:04
OK

  • Commande de redémarrage : AT+RST

Résultat :

ets Jan  8 2013,rst cause:1, boot mode:(3,0)

load 0x40100000, len 1396, room 16
tail 4
chksum 0x89
load 0x3ffe8000, len 776, room 4
tail 4
chksum 0xe8
load 0x3ffe8308, len 540, room 4
tail 8
chksum 0xc0
csum 0xc0

2nd boot version : 1.4(b1)
SPI Speed      : 40MHz
SPI Mode       : DIO
SPI Flash Size & Map: 8Mbit(512KB+512KB)
jump to run user1 @ 1000

rl��sl��
Ai-Thinker Technology Co.,Ltd.

ready

  • Commande pour connaître le mode de fonctionnement configuré : AT+CWMODE?

Résultat :

+CWMODE:3

OK

C’est à dire mode « STAtion + Access Point »
Les autres valeurs possibles sont :
  • 1= STAtion,
  • 2= Access Point

 

  • Commande pour avoir la liste des bornes WIFI : AT+CWLAP
  Résultat :
+CWLAP:(4, »Livebox-FB2E »,-90, »18:62:2c:82:fb:2e »,1,-69)
+CWLAP:(0, »orange »,-88, »1a:62:2c:82:fb:2e »,1,-69)
+CWLAP:(0, »FreeWifi »,-91, »14:0c:76:ff:55:a1″,4,-64)
+CWLAP:(0, »FreeWifi_secure »,-95, »14:0c:76:ff:55:a2″,4,-64)
+CWLAP:(2, »Freebox-661025″,-92, »14:0c:76:ff:55:a0″,4,-64)
+CWLAP:(0, »HP-Print-40-Deskjet 3520 series »,-91, »f0:92:1c:99:5a:40″,6,-62)
+CWLAP:(4, »Livebox-E548″,-90, »00:78:9e:8a:e5:48″,6,-74)
+CWLAP:(0, »orange »,-92, »42:78:9e:8a:e5:48″,6,-74)
+CWLAP:(1, »freeboxLM »,-49, »14:0c:76:55:ef:ba »,11,-71)
+CWLAP:(0, »FreeWifi »,-50, »14:0c:76:55:ef:bb »,11,-69)
+CWLAP:(0, »FreeWifi_secure »,-49, »14:0c:76:55:ef:bc »,11,-71)
+CWLAP:(4, »Livebox-03BA »,-87, »8c:10:d4:83:03:ba »,11,-71)
OK
Les paramètres sont retournés sous la forme ecn, ssid, rssi, mac,canal et freq offset :
  • <ecn>
    • 0 : OPEN
    • 1 : WEP
    • 2 : WPA_PSK
    • 3 : WPA2_PSK
    • 4 : WPA_WPA2_PSK
  • <ssid> (ssid = nom du réseau)
    • SSID AP
  • <rssi>
    • Puissance signal
  • <mac> (ou BSSID)
    • adresse MAC de l’équipement
  • <canal>
  • <freq offset>
    • offset fréquence AP, unité: KHz. <freq offset>/ 2.4 pour avoir une unité en ppm
  • Commande pour se connecter à sa box en WIFI : AT+CWJAP= »nom  point d accès WIFI box », »mot de passe » 

Résultat :

WIFI CONNECTED
WIFI GOT IP

OK

  • Commande pour vérifier la bonne connexion à sa box : AT+CWJAP? 

Résultat :

+CWJAP: »freeboxLM », »14:0c:76:55:ef:ba »,11,-55

OK

  • Commande pour obtenir l’adresse IP local affectée à l’ESP par la box : AT+CIFSR  

Résultat :

+CIFSR:APIP, »192.168.4.1″
+CIFSR:APMAC, »5e:cf:7f:10:b5:03″
+CIFSR:STAIP, »192.168.0.44″
+CIFSR:STAMAC, »5c:cf:7f:10:b5:03″OK
  • Commande pour obtenir l’adresse IP de la box : AT+CIPAP?    
 Résultat :
+CIPAP:ip: »192.168.4.1″
+CIPAP:gateway: »192.168.4.1″
+CIPAP:netmask: »255.255.255.0″
  • Commande pour obtenir des infos sur l’ESP en tant que station WIFI : AT+CWSAP?    

Résultat :

+CWSAP: »AI-THINKER_10B503« , » »,11,0,4

OK

avec les éléments retournés positionnées par défaut en usine correspondants à :
  • SSID (nom du réseau) : AI-THINKER_10B503
  • Mot de passe : pas de mot de passe
  • Canal : 11
  • Encryptage : 0 si pas de cryptage (autres valeurs possibles :  1, 23 or 4 pour WEPWPA-PSKWPA2-PSK and WPA/WPA2-PSK with WPA2-PSK

 

  • Commande pour se déconnecter de la box  : AT+CWQAP

WIFI DISCONNECT

OK

Synthèse des résultats dans le moniteur série de l’Arduino :

espmoniteurserie

Ça fonctionne … nous allons pouvoir passer à la programmation … Mais ceci sera l’objet d’un autre article …

Pour avoir le détail des commandes AT : https://acrobotic.com/downloads/ESP8266_at_commands.pdf

 

 

 

Publicités

9 réflexions au sujet de « ESP8266 : Un Arduino pour 2€ avec WIFI !! »

  1. Bonsoir , je suis novice dans le domaine , je viens de commander mon Arduino Méga 2560
    j’aurai aimé , si possible avoir quelque conseil
    Je vous remercie d’avance
    Cordialement
    Baptiste

    J'aime

  2. Super merci.
    Au niveau code ce n’est pas évident pour moi mais soit. Je suis intéressé par ce ESP8266 afin de réaliser la commande d’un relais par wifi depuis un pc d’après ce que j’ai compris l’ESP8286 est programmé via arduino uno, j’en ai une, alim 3.3V aussi mais quel logiciel utiliser pour commander le relais de la carte ESP8286?
    Pourriez-vous me renseigner svp?

    J'aime

    1. Bonjour Didier. Merci pour tes commentaires.

      Les ESP8266 peuvent être programmés de plusieurs façons, mais utiliser l’environnement de développement Arduino est un très bon moyen, facile à mettre en œuvre et à utiliser.
      Tu trouveras un exemple de programmation des ESP8266 avec l’IDE (Integrated Development Environment) Arduino dans l’article à l’adresse suivante : https://phmarduino.wordpress.com/2016/06/04/esp8266-programmation/)

      En ce qui concerne la commande d’un relai à distance d’un relai branché sur un ESP8266 en utilisant une connexion WIFI depuis un PC, je te propose de regarder l’article décrivant comment commander à distance une LED à l’adresse suivante : https://phmarduino.wordpress.com/2016/06/04/694/

      J'aime

  3. J’ai suivi à la lettre toute cette description et n’obtient rien avec mon ESP8266-01 (ESP8266 EX est-il écrit dessus) L’IDE Arduino ne me permet pas de le connecter. Je lis en bas « Generic ESP8266 Module (…) ok, serial, None on COM1 » Même chose None on COM3, les 2 seuls disponibles dans l’IDE. Les branchements son sur une Arduino UNO, sauf alimentation séparée 3.3V.
    Bien évidement pas de réponse AT, pas de téléchargement possible. L’échange RX / TX ne donne rien de plus. Comment contourner ce problème ?

    J'aime

    1. Bonjour. Merci pour votre commentaire. N’ayant jamais utilisé le ESP8266-EX, il est possible que celui-ci nécessite une adaptation 3V3 – 5V en émission comme en réception série contrairement à ce que j’ai fait pour le ESP8266-01 qui ne pose pas de souci. Est-ce que vous avez le même souci avec tous les ESP 8266-EX ? Est-ce que vous avez à votre disposition des ESP-8226-01 pour vérifier que le montage présenté dans cet article fonctionne bien dans votre environnement pour ceux-ci ?

      J'aime

      1. Comme je l’ai écrit c’est bien l’attribution d’un port (donc la reconnaissance à travers l’USB) qui pose problème. Je retrouve un problème similaire avec des « copies » UNO non reconnues sur l’ordi de bureau mais fonctionnant sur l’ordi portable. Il faut juste tâtoner pour attribuer le port qui est attribué automatiquement pour le modèle italien d’origine.

        J'aime

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion /  Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s