Présentation
L'ESP8266 est un microcontrôleur Wi-Fi développé par Espressif. Lorsqu'il sort d'usine, ou lorsqu'il est flashé avec le firmware AT officiel d'Espressif, il accepte un jeu d'instructions textuelles appelées commandes AT (ou commandes Hayes, du nom du fabricant de modems qui les a popularisées dans les années 1980).
Le module ESP-01, le plus répandu pour découvrir l'ESP8266, est généralement livré avec ce firmware AT préchargé. Il est donc utilisable immédiatement, sans programmation, simplement en lui envoyant des commandes texte sur sa liaison série.
Prérequis matériel : un ESP-01 connecté à un PC via un adaptateur USB-série, et un terminal série (moniteur série de l'IDE Arduino,
minicom,screen, PuTTY…) configuré à 115200 bauds avec fin de ligne CR+LF.
Note sur les versions : la syntaxe et les codes retour des commandes AT varient selon la version du firmware. Les exemples ci-dessous correspondent à un firmware AT v1.x typique sur ESP-01. Pour les firmwares plus récents (AT v2.x sur ESP32), certaines commandes prennent des paramètres supplémentaires.
Travaux pratiques
L'enchaînement ci-dessous permet de mettre l'ESP-01 sur un réseau Wi-Fi, puis de le transformer en serveur HTTP minimaliste. Chaque commande est envoyée depuis le terminal série ; les lignes préfixées par -> représentent la réponse du module.
1. Vérifier le mode Wi-Fi courant
AT+CWMODE?
-> +CWMODE:1
-> OK
Le module répond avec un chiffre indiquant son mode courant (voir glossaire plus bas).
2. Passer en mode dual (client + point d'accès)
AT+CWMODE=3
-> OK
Le mode 3 active simultanément le mode station (le module se connecte à un Wi-Fi existant) et le mode AP (le module expose son propre point d'accès). C'est le mode le plus polyvalent pour expérimenter.
3. Se connecter à un réseau Wi-Fi
AT+CWJAP="ACEGRP_NET","motdepasse"
-> WIFI CONNECTED
-> WIFI GOT IP
-> OK
Trois événements sont remontés successivement :
- WIFI CONNECTED : association réussie au point d'accès ;
- WIFI GOT IP : adresse IP obtenue via DHCP ;
- OK : la commande est terminée avec succès.
4. Lister les adresses IP et MAC du module
AT+CIFSR
-> +CIFSR:APIP,"192.168.4.1"
-> +CIFSR:APMAC,"1a:fe:34:9a:36:13"
-> +CIFSR:STAIP,"192.168.101.20"
-> +CIFSR:STAMAC,"18:fe:34:9a:36:13"
-> OK
En mode dual, le module possède deux interfaces réseau :
- AP (point d'accès) : adresse fixe
192.168.4.1par défaut, sur laquelle se connectent les clients du Wi-Fi exposé par l'ESP ; - STA (station/client) : adresse attribuée par le routeur du réseau auquel l'ESP s'est connecté.
5. Activer les connexions multiples
AT+CIPMUX=1
-> OK
Par défaut, l'ESP n'accepte qu'une seule connexion TCP simultanée. Le mode multi-connexion est obligatoire pour faire fonctionner le module en serveur (étape suivante).
6. Démarrer un serveur TCP sur le port 80
AT+CIPSERVER=1,80
-> OK
Le module écoute désormais sur le port 80 de son adresse STA. Un simple navigateur pointé sur http://192.168.101.20/ (l'adresse retournée par AT+CIFSR) déclenche une connexion HTTP.
7. Observer une requête entrante
Lorsqu'un client se connecte, l'ESP recopie sur la liaison série l'événement de connexion, puis la requête HTTP brute, et enfin la fermeture de la connexion :
0,CONNECT
+IPD,0,341:GET / HTTP/1.1
Host: 192.168.101.20
User-Agent: Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:83.0) Gecko/20100101 Firefox/83.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: fr,fr-FR;q=0.5
Accept-Encoding: gzip, deflate
DNT: 1
Connection: keep-alive
Upgrade-Insecure-Requests: 1
0,CLOSED
Lecture :
0,CONNECT: un client vient de s'associer ;0est l'identifiant de connexion (link ID), utile en mode multi-connexion ;+IPD,0,341:: l'ESP a reçu 341 octets sur la connexion0; ces octets suivent immédiatement (ici, l'en-tête HTTP envoyé par Firefox) ;0,CLOSED: le client a fermé la connexion (ou un timeout est intervenu).
À ce stade, l'ESP ne répond rien au client : il faut explicitement envoyer une réponse avec AT+CIPSEND (voir glossaire). Le navigateur affichera donc une page vide ou un message d'erreur.
Pour aller plus loin : répondre au client
Pour renvoyer une page HTML minimale au client 0 :
AT+CIPSEND=0,44
>HTTP/1.1 200 OK
<html>Bonjour depuis l'ESP</html>
Le module affiche > et attend exactement le nombre d'octets annoncé, puis envoie le tout sur la connexion 0. Il faut ensuite fermer la connexion avec :
AT+CIPCLOSE=0
Glossaire des commandes AT
Conventions
Trois formes coexistent pour la plupart des commandes :
| Forme | Syntaxe | Rôle |
|---|---|---|
| Interrogation | AT+CMD? |
Lire la valeur courante |
| Test | AT+CMD=? |
Lister les valeurs autorisées |
| Affectation | AT+CMD=<valeurs> |
Modifier la valeur |
Les chaînes de caractères (SSID, mot de passe…) sont toujours encadrées par des guillemets droits.
Commandes Wi-Fi
AT+CWMODE — Mode de fonctionnement Wi-Fi
AT+CWMODE? # lire le mode courant
AT+CWMODE=<n> # définir le mode
Valeurs de <n> :
| Valeur | Mode | Description |
|---|---|---|
| 1 | STA | Station/client : le module se connecte à un Wi-Fi existant |
| 2 | AP | Point d'accès : le module expose son propre Wi-Fi |
| 3 | STA+AP | Mode dual : les deux à la fois |
Exemple :
AT+CWMODE?
-> +CWMODE:1
-> OK
AT+CWLAP — Lister les points d'accès visibles
AT+CWLAP
Retourne une ligne par réseau détecté, sous la forme :
+CWLAP:(<ecn>,"<ssid>",<rssi>,"<mac>",<canal>)
| Champ | Signification |
|---|---|
ecn |
Chiffrement : 0 ouvert, 1 WEP, 2 WPA-PSK, 3 WPA2-PSK, 4 WPA/WPA2-PSK |
ssid |
Nom du réseau |
rssi |
Puissance du signal en dBm (plus la valeur est proche de 0, plus le signal est fort) |
mac |
Adresse MAC du point d'accès (BSSID) |
canal |
Canal Wi-Fi (1 à 13 en Europe sur 2,4 GHz) |
Exemple :
AT+CWLAP
-> +CWLAP:(3,"ACEGRP_NET-F2",-22,"f8:9a:78:9b:67:05",4)
-> +CWLAP:(3,"ACEGRP_NET",-68,"50:c7:bf:8c:4f:e9",6)
-> +CWLAP:(3,"ACEGRP_NET",-82,"e0:24:81:49:14:eb",7)
-> OK
Prérequis : AT+CWMODE doit inclure le mode station (1 ou 3).
AT+CWJAP — Se connecter à un point d'accès
AT+CWJAP="<ssid>","<motdepasse>"
Codes d'erreur retournés en cas d'échec via +CWJAP:<n> :
| Code | Signification |
|---|---|
| 1 | Délai de connexion dépassé |
| 2 | Mot de passe incorrect |
| 3 | SSID introuvable |
| 4 | Échec de connexion (autre) |
Exemple d'échec :
AT+CWJAP="ACEGRP_NET","mauvais_mdp"
-> WIFI DISCONNECT
-> +CWJAP:1
-> FAIL
Exemple de réussite :
AT+CWJAP="ACEGRP_NET","motdepasse"
-> WIFI CONNECTED
-> WIFI GOT IP
-> OK
AT+CWQAP — Se déconnecter du point d'accès
AT+CWQAP
-> OK
À ne pas confondre avec une commande de sauvegarde : CWQAP signifie Quit AP, c'est-à-dire déconnexion. Les paramètres de connexion (SSID, mot de passe) sont en revanche automatiquement mémorisés en flash par les commandes CWJAP et CWMODE dans les versions classiques du firmware AT — le module se reconnectera donc au démarrage suivant.
AT+CIFSR — Adresses IP et MAC locales
AT+CIFSR
Renvoie les adresses IP et MAC du module pour chaque interface active :
APIP/APMAC: interface point d'accès (toujours192.168.4.1par défaut) ;STAIP/STAMAC: interface station (attribuée par le DHCP du réseau rejoint).
En mode CWMODE=1, seule la partie STA est retournée ; en mode 2, seule la partie AP.
Commandes TCP/IP
AT+CIPMUX — Activer les connexions multiples
AT+CIPMUX=<mode>
0: connexion unique (mode par défaut) ;1: jusqu'à 5 connexions simultanées, chacune identifiée par un link ID de 0 à 4.
Prérequis pour passer en mode 1 : aucune connexion ne doit être active, et le module ne doit pas déjà être en mode serveur.
AT+CIPSERVER — Démarrer un serveur TCP
AT+CIPSERVER=<mode>[,<port>]
mode:1pour démarrer,0pour arrêter ;port: port d'écoute, optionnel (par défaut 333).
Prérequis : AT+CIPMUX=1 doit avoir été exécuté au préalable.
Après un arrêt (mode=0), un redémarrage du module est nécessaire (AT+RST) pour libérer complètement le port.
AT+CIPSEND — Envoyer des données sur une connexion
AT+CIPSEND=<link_id>,<longueur> # en mode multi-connexion (CIPMUX=1)
AT+CIPSEND=<longueur> # en mode connexion unique
Le module affiche un prompt > et attend exactement <longueur> octets, puis transmet le bloc au client. Indispensable pour répondre à une requête HTTP entrante.
AT+CIPCLOSE — Fermer une connexion
AT+CIPCLOSE=<link_id> # multi-connexion
AT+CIPCLOSE # connexion unique
Commandes générales utiles
| Commande | Rôle |
|---|---|
AT |
Test de présence du module (doit répondre OK) |
AT+RST |
Redémarrer le module |
AT+GMR |
Afficher la version du firmware AT |
AT+UART_CUR=<baudrate>,... |
Changer le débit série (non persistant) |
ATE0 / ATE1 |
Désactiver / activer l'écho des commandes |
Récapitulatif : déclarer un serveur HTTP minimal
Séquence complète depuis un ESP-01 vierge :
AT+CWMODE=3
AT+CWJAP="<ssid>","<motdepasse>"
AT+CIFSR # noter l'adresse STAIP
AT+CIPMUX=1
AT+CIPSERVER=1,80
À partir de cet instant, toute connexion entrante sur http://<STAIP>:80/ est remontée sur le port série sous forme d'événements +IPD, à charge pour le programme côté PC (ou pour un firmware personnalisé) de les analyser et de répondre via AT+CIPSEND.
Limites du firmware AT
Le firmware AT est pratique pour découvrir et tester l'ESP8266, mais il montre vite ses limites :
- latence importante (chaque commande passe par le port série) ;
- pas de TLS correct dans les anciennes versions ;
- complexité pour gérer plusieurs clients simultanés ;
- dépendance à un hôte qui pilote l'ESP en permanence.
Pour des projets plus aboutis, il est préférable de flasher l'ESP avec un firmware personnalisé (Arduino, ESP-IDF, MicroPython, Tasmota, ESPHome…) qui exécute directement la logique applicative sur le microcontrôleur, sans intermédiaire série.
Commentaires
Aucun commentaire pour l'instant. Soyez le premier !
Laisser un commentaire