{"uuid":"6f2639a5-58ed-4102-a6a2-0acbecf01de5","slug":"esp8266-commandes-at","title":"ESP8266 : prise en main des commandes AT","author":"cedric@abonnel.fr","published":true,"published_at":"2020-12-13 08:51","created_at":"2020-12-13 08:51:55","updated_at":"2026-05-13 18:23:54","revisions":[{"n":1,"date":"2026-05-13 18:23:54","comment":"Contenu modifié","title":"ESP8266 : prise en main des commandes AT"}],"cover":"","files_meta":[],"external_links":[],"seo_title":"","seo_description":"","og_image":"","category":"Électronique","content":"# ESP8266 : prise en main des commandes AT\n\n## Présentation\n\nL'**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).\n\nLe 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.\n\n> **Prérequis matériel** : un ESP-01 connecté à un PC via un [adaptateur USB-série](https://amzn.to/3oHZ1Eo), et un terminal série (moniteur série de l'IDE Arduino, `minicom`, `screen`, PuTTY…) configuré à 115200 bauds avec fin de ligne **CR+LF**.\n\n> **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.\n\n## Travaux pratiques\n\nL'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.\n\n### 1. Vérifier le mode Wi-Fi courant\n\n```\nAT+CWMODE?\n-> +CWMODE:1\n-> OK\n```\n\nLe module répond avec un chiffre indiquant son mode courant (voir glossaire plus bas).\n\n### 2. Passer en mode dual (client + point d'accès)\n\n```\nAT+CWMODE=3\n-> OK\n```\n\nLe 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.\n\n### 3. Se connecter à un réseau Wi-Fi\n\n```\nAT+CWJAP=\"ACEGRP_NET\",\"motdepasse\"\n-> WIFI CONNECTED\n-> WIFI GOT IP\n-> OK\n```\n\nTrois événements sont remontés successivement :\n\n- **WIFI CONNECTED** : association réussie au point d'accès ;\n- **WIFI GOT IP** : adresse IP obtenue via DHCP ;\n- **OK** : la commande est terminée avec succès.\n\n### 4. Lister les adresses IP et MAC du module\n\n```\nAT+CIFSR\n-> +CIFSR:APIP,\"192.168.4.1\"\n-> +CIFSR:APMAC,\"1a:fe:34:9a:36:13\"\n-> +CIFSR:STAIP,\"192.168.101.20\"\n-> +CIFSR:STAMAC,\"18:fe:34:9a:36:13\"\n-> OK\n```\n\nEn mode dual, le module possède **deux interfaces réseau** :\n\n- **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 ;\n- **STA** (station/client) : adresse attribuée par le routeur du réseau auquel l'ESP s'est connecté.\n\n### 5. Activer les connexions multiples\n\n```\nAT+CIPMUX=1\n-> OK\n```\n\nPar 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).\n\n### 6. Démarrer un serveur TCP sur le port 80\n\n```\nAT+CIPSERVER=1,80\n-> OK\n```\n\nLe 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.\n\n### 7. Observer une requête entrante\n\nLorsqu'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 :\n\n```\n0,CONNECT\n\n+IPD,0,341:GET / HTTP/1.1\nHost: 192.168.101.20\nUser-Agent: Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:83.0) Gecko/20100101 Firefox/83.0\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\nAccept-Language: fr,fr-FR;q=0.5\nAccept-Encoding: gzip, deflate\nDNT: 1\nConnection: keep-alive\nUpgrade-Insecure-Requests: 1\n\n0,CLOSED\n```\n\nLecture :\n\n- `0,CONNECT` : un client vient de s'associer ; `0` est l'identifiant de connexion (link ID), utile en mode multi-connexion ;\n- `+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) ;\n- `0,CLOSED` : le client a fermé la connexion (ou un timeout est intervenu).\n\nÀ 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.\n\n### Pour aller plus loin : répondre au client\n\nPour renvoyer une page HTML minimale au client `0` :\n\n```\nAT+CIPSEND=0,44\n>HTTP/1.1 200 OK\n\nBonjour depuis l'ESP\n```\n\nLe 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 :\n\n```\nAT+CIPCLOSE=0\n```\n\n---\n\n## Glossaire des commandes AT\n\n### Conventions\n\nTrois formes coexistent pour la plupart des commandes :\n\n| Forme | Syntaxe | Rôle |\n|---|---|---|\n| Interrogation | `AT+CMD?` | Lire la valeur courante |\n| Test | `AT+CMD=?` | Lister les valeurs autorisées |\n| Affectation | `AT+CMD=` | Modifier la valeur |\n\nLes chaînes de caractères (SSID, mot de passe…) sont toujours encadrées par des guillemets droits.\n\n### Commandes Wi-Fi\n\n#### `AT+CWMODE` — Mode de fonctionnement Wi-Fi\n\n```\nAT+CWMODE? # lire le mode courant\nAT+CWMODE= # définir le mode\n```\n\nValeurs de `` :\n\n| Valeur | Mode | Description |\n|---|---|---|\n| 1 | STA | Station/client : le module se connecte à un Wi-Fi existant |\n| 2 | AP | Point d'accès : le module expose son propre Wi-Fi |\n| 3 | STA+AP | Mode dual : les deux à la fois |\n\nExemple :\n\n```\nAT+CWMODE?\n-> +CWMODE:1\n-> OK\n```\n\n#### `AT+CWLAP` — Lister les points d'accès visibles\n\n```\nAT+CWLAP\n```\n\nRetourne une ligne par réseau détecté, sous la forme :\n\n```\n+CWLAP:(,\"\",,\"\",)\n```\n\n| Champ | Signification |\n|---|---|\n| `ecn` | Chiffrement : `0` ouvert, `1` WEP, `2` WPA-PSK, `3` WPA2-PSK, `4` WPA/WPA2-PSK |\n| `ssid` | Nom du réseau |\n| `rssi` | Puissance du signal en dBm (plus la valeur est proche de 0, plus le signal est fort) |\n| `mac` | Adresse MAC du point d'accès (BSSID) |\n| `canal` | Canal Wi-Fi (1 à 13 en Europe sur 2,4 GHz) |\n\nExemple :\n\n```\nAT+CWLAP\n-> +CWLAP:(3,\"ACEGRP_NET-F2\",-22,\"f8:9a:78:9b:67:05\",4)\n-> +CWLAP:(3,\"ACEGRP_NET\",-68,\"50:c7:bf:8c:4f:e9\",6)\n-> +CWLAP:(3,\"ACEGRP_NET\",-82,\"e0:24:81:49:14:eb\",7)\n-> OK\n```\n\n**Prérequis** : `AT+CWMODE` doit inclure le mode station (1 ou 3).\n\n#### `AT+CWJAP` — Se connecter à un point d'accès\n\n```\nAT+CWJAP=\"\",\"\"\n```\n\nCodes d'erreur retournés en cas d'échec via `+CWJAP:` :\n\n| Code | Signification |\n|---|---|\n| 1 | Délai de connexion dépassé |\n| 2 | Mot de passe incorrect |\n| 3 | SSID introuvable |\n| 4 | Échec de connexion (autre) |\n\nExemple d'échec :\n\n```\nAT+CWJAP=\"ACEGRP_NET\",\"mauvais_mdp\"\n-> WIFI DISCONNECT\n-> +CWJAP:1\n-> FAIL\n```\n\nExemple de réussite :\n\n```\nAT+CWJAP=\"ACEGRP_NET\",\"motdepasse\"\n-> WIFI CONNECTED\n-> WIFI GOT IP\n-> OK\n```\n\n#### `AT+CWQAP` — Se déconnecter du point d'accès\n\n```\nAT+CWQAP\n-> OK\n```\n\nÀ 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.\n\n#### `AT+CIFSR` — Adresses IP et MAC locales\n\n```\nAT+CIFSR\n```\n\nRenvoie les adresses IP et MAC du module pour chaque interface active :\n\n- `APIP` / `APMAC` : interface point d'accès (toujours `192.168.4.1` par défaut) ;\n- `STAIP` / `STAMAC` : interface station (attribuée par le DHCP du réseau rejoint).\n\nEn mode `CWMODE=1`, seule la partie STA est retournée ; en mode 2, seule la partie AP.\n\n### Commandes TCP/IP\n\n#### `AT+CIPMUX` — Activer les connexions multiples\n\n```\nAT+CIPMUX=\n```\n\n- `0` : connexion unique (mode par défaut) ;\n- `1` : jusqu'à 5 connexions simultanées, chacune identifiée par un *link ID* de 0 à 4.\n\n**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.\n\n#### `AT+CIPSERVER` — Démarrer un serveur TCP\n\n```\nAT+CIPSERVER=[,]\n```\n\n- `mode` : `1` pour démarrer, `0` pour arrêter ;\n- `port` : port d'écoute, optionnel (par défaut **333**).\n\n**Prérequis** : `AT+CIPMUX=1` doit avoir été exécuté au préalable.\n\nAprès un arrêt (`mode=0`), un redémarrage du module est nécessaire (`AT+RST`) pour libérer complètement le port.\n\n#### `AT+CIPSEND` — Envoyer des données sur une connexion\n\n```\nAT+CIPSEND=, # en mode multi-connexion (CIPMUX=1)\nAT+CIPSEND= # en mode connexion unique\n```\n\nLe module affiche un prompt `>` et attend exactement `` octets, puis transmet le bloc au client. Indispensable pour répondre à une requête HTTP entrante.\n\n#### `AT+CIPCLOSE` — Fermer une connexion\n\n```\nAT+CIPCLOSE= # multi-connexion\nAT+CIPCLOSE # connexion unique\n```\n\n### Commandes générales utiles\n\n| Commande | Rôle |\n|---|---|\n| `AT` | Test de présence du module (doit répondre `OK`) |\n| `AT+RST` | Redémarrer le module |\n| `AT+GMR` | Afficher la version du firmware AT |\n| `AT+UART_CUR=,...` | Changer le débit série (non persistant) |\n| `ATE0` / `ATE1` | Désactiver / activer l'écho des commandes |\n\n---\n\n## Récapitulatif : déclarer un serveur HTTP minimal\n\nSéquence complète depuis un ESP-01 vierge :\n\n```\nAT+CWMODE=3\nAT+CWJAP=\"\",\"\"\nAT+CIFSR # noter l'adresse STAIP\nAT+CIPMUX=1\nAT+CIPSERVER=1,80\n```\n\nÀ partir de cet instant, toute connexion entrante sur `http://: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`.\n\n## Limites du firmware AT\n\nLe firmware AT est pratique pour découvrir et tester l'ESP8266, mais il montre vite ses limites :\n\n- **latence** importante (chaque commande passe par le port série) ;\n- **pas de TLS** correct dans les anciennes versions ;\n- **complexité** pour gérer plusieurs clients simultanés ;\n- **dépendance** à un hôte qui pilote l'ESP en permanence.\n\nPour 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.\n```\n","featured":false,"tags":[]}