← Retour
Électronique

ESP8266 : prise en main des commandes AT

Cédrix · 13/12/2020

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.1 par 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 ; 0 est l'identifiant de connexion (link ID), utile en mode multi-connexion ;
  • +IPD,0,341: : l'ESP a reçu 341 octets sur la connexion 0 ; 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 (toujours 192.168.4.1 par 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 : 1 pour démarrer, 0 pour 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
Un code de vérification sera envoyé à votre adresse email.