ESP-01 avec Arduino : commandes AT, programmation et relais
Branche l'ESP-01 (ESP8266) sur Arduino : 8 broches, alimentation 3,3 V, Wi-Fi par commandes AT, programmation avec GPIO0 à la masse, module relais ESP-01S.
L'ESP-01 est un module minuscule (24,8 × 14,3 mm) et très bon marché construit autour de la puce Wi-Fi ESP8266. En branchant l'ESP-01 sur un Arduino, tu ajoutes le Wi-Fi avec quelques fils à une carte sans liaison sans fil comme l'Uno ou la Nano. Le module est livré avec un firmware de commandes AT : l'Arduino envoie par la liaison série de courtes commandes texte comme "AT+CWJAP", et l'ESP-01 se connecte au réseau, envoie et reçoit des données. Si tu préfères, tu peux aussi programmer l'ESP-01 comme un microcontrôleur autonome, sans aucun Arduino ; son processeur est bien plus rapide que celui de l'Uno.
Dans ce guide, tu vas découvrir les 8 broches de l'ESP-01 et comprendre pourquoi il lui faut absolument une alimentation 3,3 V solide. Tu verras ensuite étape par étape les commandes AT avec un Arduino Uno, une page web qui allume une LED depuis ton téléphone, la programmation directe avec un adaptateur USB-TTL (la méthode GPIO0 à la masse), la commande d'une lampe avec le module relais ESP-01S et l'utilisation avec un Raspberry Pi Pico. À la fin, tu trouveras les solutions aux erreurs les plus fréquentes et quand un NodeMCU ou un ESP32 est un meilleur choix.

Qu'est-ce que l'ESP-01 et comment fonctionne-t-il ?
L'ESP-01 est le premier et le plus petit module conçu par Ai-Thinker autour de la puce ESP8266EX. La carte porte la puce, un quartz de 26 MHz, la mémoire flash qui stocke le programme et les réglages, et une antenne imprimée en méandres ; il n'y a ni port USB, ni régulateur de tension, ni bouton. C'est pourquoi l'ESP-01 ne se branche pas directement sur l'ordinateur : c'est à toi de fournir l'alimentation et la liaison série. Tu peux utiliser le module de deux façons : comme modem Wi-Fi (le firmware AT est installé, l'Arduino envoie des commandes) ou comme microcontrôleur autonome (tu téléverses ton propre programme depuis l'Arduino IDE et le firmware AT est effacé). La plupart des modules vendus aujourd'hui sont la version noire ESP-01S.
| Caractéristique | Valeur |
|---|---|
| Puce | ESP8266EX (Tensilica L106, 32 bits) |
| Fréquence | 80 MHz (peut monter à 160 MHz) |
| Mémoire flash | ESP-01 : 512 Ko, ESP-01S : 1 Mo |
| RAM | Environ 80 Ko de RAM de données ; ~50 Ko restent au programme avec le Wi-Fi connecté |
| Wi-Fi | 802.11 b/g/n, 2,4 GHz uniquement, antenne imprimée |
| Tension de fonctionnement | 3,0–3,6 V (3,3 V recommandé) |
| Courant | 70–80 mA en moyenne connecté, ~170 mA en émission, pics au-delà de 300 mA |
| Courant en deep sleep | Environ 20 µA (puce) |
| GPIO utilisables | 4 : GPIO0, GPIO2, GPIO1 (TX), GPIO3 (RX) |
| Entrée analogique | Aucune (la broche ADC n'est pas sortie) |
| Dimensions | 24,8 × 14,3 mm |
| Firmware d'usine | Firmware de commandes AT (souvent 115200 bauds) |
Différences entre ESP-01 et ESP-01S
| Caractéristique | ESP-01 | ESP-01S |
|---|---|---|
| Couleur de la carte | Généralement bleue | Noire |
| Mémoire flash | 512 Ko (1 Mo sur les versions noires plus récentes) | 1 Mo |
| LED d'alimentation | Rouge, toujours allumée | Aucune |
| LED bleue | Sur la ligne TX (GPIO1), clignote pendant l'envoi | Sur GPIO2, s'allume quand la broche est à LOW |
| Brochage | 8 broches | Les mêmes 8 broches, totalement compatible |
| Consommation | Quelques mA de plus à cause de la LED d'alimentation | Plus faible, mieux pour les projets sur pile |
Brochage de l'ESP-01 : le rôle des 8 broches
L'ESP-01 possède 8 broches en connecteur 2×4, et seules quatre d'entre elles servent d'entrées-sorties. Les noms des broches ne sont pas imprimés sur toutes les cartes ; compare ton module avec le brochage du vendeur avant de le câbler, car inverser VCC et GND détruit le module en quelques secondes. Voici le rôle de chaque broche et son branchement en fonctionnement normal :
| Broche | Rôle | Branchement en fonctionnement normal |
|---|---|---|
| VCC | Entrée d'alimentation 3,3 V | Une source 3,3 V solide (au moins 300 mA) |
| GND | Masse | Masse commune avec l'Arduino et l'alimentation |
| TX (GPIO1) | Sortie de données série | Vers la ligne RX de l'Arduino |
| RX (GPIO3) | Entrée de données série | Vers la ligne TX de l'Arduino (via un pont diviseur sur les cartes 5 V) |
| EN (CH_PD) | Active la puce | À 3,3 V (directement ou via 10 kΩ) |
| RST | Redémarre la puce à LOW | En l'air ou tirée à 3,3 V via 10 kΩ |
| GPIO0 | Choisit le mode de démarrage, puis entrée-sortie | À HIGH (en l'air) au démarrage ; à la masse pour programmer |
| GPIO2 | Entrée-sortie (LED bleue sur l'ESP-01S) | Doit rester à HIGH au démarrage |
Consommation : pourquoi la broche 3,3 V de l'Arduino ne suffit pas
La plupart des problèmes qui détruisent l'ESP-01 ou le font redémarrer sans cesse viennent de l'alimentation. Connecté au Wi-Fi, le module consomme en moyenne 70–80 mA et environ 170 mA en émission ; au démarrage et pendant la connexion au réseau, de brefs pics peuvent dépasser 300 mA. La broche 3,3 V de l'Arduino Uno, elle, ne fournit officiellement que 50 mA. Un ESP-01 alimenté par cette broche répond souvent à la commande "AT", mais dès qu'il tente de se connecter au réseau la tension s'effondre et le module redémarre, ce qui ressemble à un bug logiciel. La solution : un régulateur AMS1117-3.3 (1 A) alimenté en 5 V, plus un condensateur électrolytique de 100–470 µF entre VCC et GND du module. Tu trouveras le fonctionnement des régulateurs dans l'article sur le régulateur de tension 7805.
| Source d'alimentation | Convient ? | Remarque |
|---|---|---|
| Broche 3,3 V de l'Arduino Uno | Non | Officiellement 50 mA ; le module redémarre en se connectant au Wi-Fi |
| Broche 3,3 V d'un adaptateur USB-TTL | Rarement | Le régulateur interne de la puce fournit en général 50–100 mA |
| Régulateur AMS1117-3.3 (entrée 5 V) | Oui | Jusqu'à 1 A ; 10 µF en sortie, 100–470 µF près du module |
| Adaptateur USB pour ESP-01 | Oui | Avec CH340 et AMS1117, le module s'enfiche directement |
| 2 piles AA (3 V) | Limite | En se déchargeant, la tension passe sous 3 V et le module devient instable |
| Accu Li-ion une cellule (3,7–4,2 V) | Pas directement | Dépasse la limite de 3,6 V ; il faut un régulateur LDO 3,3 V |
Brancher l'ESP-01 sur l'Arduino Uno (pour les commandes AT)
L'unique port série matériel de l'Arduino Uno (D0 et D1) est partagé avec la liaison USB. Le plus pratique est donc de relier l'ESP-01 aux broches D2 et D3 avec la bibliothèque SoftwareSerial : tu n'as pas à débrancher l'ESP-01 pour téléverser sur l'Uno, et le Moniteur série reste libre pour le débogage. Le Raspberry Pi Pico fonctionne déjà en 3,3 V, il n'a donc pas besoin de pont diviseur :
| Broche ESP-01 | Arduino Uno | Raspberry Pi Pico | Remarque |
|---|---|---|---|
| VCC | Sortie de l'AMS1117-3.3 | AMS1117-3.3 ou 3V3(OUT) | La broche 3,3 V de l'Uno ne suffit pas ; pour la sortie 3V3 du Pico, 300 mA maximum sont conseillés |
| GND | GND | GND | Régulateur, carte et module à masse commune |
| TX | D2 | GP1 (UART0 RX) | Branchement direct |
| RX | D3 (via un pont 1 kΩ / 2 kΩ) | GP0 (UART0 TX) | Pas de pont nécessaire sur le Pico |
| EN (CH_PD) | 3,3 V | 3,3 V | Directement ou via 10 kΩ |
| RST | Non branchée | Non branchée | En option, tirée à 3,3 V via 10 kΩ |
| GPIO0 | Non branchée | Non branchée | Ne pas la relier à la masse en fonctionnement normal |
| GPIO2 | Non branchée | Non branchée | Doit rester à HIGH au démarrage |
Pour abaisser le signal 5 V qui sort de la broche D3 de l'Uno, place une résistance de 1 kΩ entre D3 et le RX de l'ESP-01, et une de 2 kΩ entre le RX de l'ESP-01 et la masse. La tension obtenue vaut 5 × 2 / (1 + 2) = 3,33 V ; avec 2,2 kΩ au lieu de 2 kΩ tu obtiens 3,44 V, et les deux sont sûres. Tu peux calculer d'autres valeurs avec le calculateur de pont diviseur. Dans l'autre sens, pas besoin de pont : les 3,3 V de la broche TX de l'ESP-01 dépassent le seuil de 3 V à partir duquel l'Uno lit un HIGH. Nous expliquons en détail les bases de la communication série dans l'article sur la communication série UART.
Premier test : envoyer des commandes AT depuis le Moniteur série
- Téléverse sur l'Uno le sketch passerelle ci-dessous ; pour le premier essai, mets ESP_BAUD à 115200, car la plupart des modules sont livrés à cette vitesse (les anciens peuvent être à 9600).
- Ouvre le Moniteur série à 115200 bauds et règle la fin de ligne sur Both NL & CR ; sans ce réglage, le module ne sait pas que la commande est terminée.
- Tape AT et envoie-le ; tu dois voir OK. Si des caractères incompréhensibles s'affichent, les vitesses ne correspondent pas.
- SoftwareSerial ne lit pas de façon fiable à 115200, alors passe la vitesse du module à 9600 de façon permanente avec AT+UART_DEF=9600,8,1,0,0. Même si la réponse paraît brouillée, la commande arrive en général.
- Mets ESP_BAUD à 9600 dans le sketch, téléverse-le à nouveau et refais la commande AT ; la réponse OK doit maintenant être propre.
- Vérifie que le module fonctionne bien en lisant la version du firmware avec AT+GMR et la liste des réseaux Wi-Fi voisins avec AT+CWLAP.
1#include <SoftwareSerial.h>
2
3SoftwareSerial esp(2, 3); // D2 = RX, D3 = TX (bölücüyle ESP RX'e) / D3 to ESP RX via divider
4
5const long ESP_BAUD = 9600; // ilk denemede 115200 yap / use 115200 on the first try
6
7void setup() {
8 Serial.begin(115200); // Seri Monitör hızı / Serial Monitor speed
9 esp.begin(ESP_BAUD);
10 Serial.println("AT komutu yaz / type an AT command");
11}
12
13void loop() {
14 if (esp.available()) { // ESP-01'den geleni ekrana yaz / ESP-01 -> screen
15 Serial.write(esp.read());
16 }
17 if (Serial.available()) { // klavyeden yazılanı ESP-01'e gönder / keyboard -> ESP-01
18 esp.write(Serial.read());
19 }
20}Les commandes AT les plus utiles de l'ESP-01
| Commande | Ce qu'elle fait | Exemple de réponse |
|---|---|---|
| AT | Teste la liaison | OK |
| AT+RST | Redémarre le module | OK ... ready |
| AT+GMR | Affiche la version du firmware | AT version:... SDK version:... OK |
| AT+UART_DEF=9600,8,1,0,0 | Change la vitesse de façon permanente | OK |
| AT+CWMODE=1 | Mode station ; 2 = point d'accès, 3 = les deux | OK |
| AT+CWLAP | Liste les réseaux Wi-Fi voisins | +CWLAP:(3,"AgAdi",-58,...) |
| AT+CWJAP="AgAdi","Sifre123" | Se connecte à un réseau Wi-Fi | WIFI CONNECTED, WIFI GOT IP, OK |
| AT+CIFSR | Affiche l'adresse IP obtenue | +CIFSR:STAIP,"192.168.1.45" |
| AT+CIPMUX=1 | Active les connexions multiples (obligatoire pour un serveur) | OK |
| AT+CIPSERVER=1,80 | Démarre un serveur TCP sur le port 80 | OK |
| AT+CIPSTART=0,"TCP","192.168.1.10",80 | Se connecte à un serveur sur la connexion 0 | 0,CONNECT et OK |
| AT+CIPSEND=0,20 | Envoie 20 octets sur la connexion 0 | > ... SEND OK |
| AT+CIPCLOSE=0 | Ferme la connexion 0 | 0,CLOSED et OK |
Commander une LED depuis ton téléphone avec Arduino Uno et ESP-01
Transformons maintenant les commandes AT en programme. Le code ci-dessous connecte l'ESP-01 à ton réseau, ouvre un petit serveur web sur le port 80 et affiche l'adresse IP dans le Moniteur série. Si tu tapes cette adresse dans le navigateur d'un téléphone connecté au même Wi-Fi, une page à deux boutons s'ouvre ; les boutons allument et éteignent la LED intégrée sur la broche 13 de l'Uno. Branche un module relais à la place de la LED et tu commandes une lampe de la même façon. Avant de téléverser, assure-toi d'avoir réglé la vitesse du module à 9600 à l'étape précédente.
1#include <SoftwareSerial.h>
2
3SoftwareSerial esp(2, 3); // D2 = RX, D3 = TX (bölücüyle) / D3 via divider
4const int LED_PIN = 13; // Uno'nun dahili LED'i / Uno onboard LED
5
6const char* WIFI_SSID = "AgAdi"; // Wi-Fi adın / your Wi-Fi name
7const char* WIFI_PASS = "Sifre123"; // Wi-Fi şifren / your Wi-Fi password
8
9bool ledOn = false;
10bool pending = false; // cevap bekleyen istek var mı / request waiting for a reply
11int linkId = 0; // ESP-01'in bağlantı numarası (0-4) / connection id (0-4)
12char line[64];
13byte lineLen = 0;
14
15// Beklenen yazıyı süre dolana kadar ara / wait until the expected text arrives or time runs out
16bool waitFor(const char* expect, unsigned long timeout) {
17 unsigned long start = millis();
18 size_t idx = 0;
19 size_t len = strlen(expect);
20 while (millis() - start < timeout) {
21 if (esp.available()) {
22 char c = esp.read();
23 Serial.write(c); // gelen her şeyi göster / echo everything
24 if (c == expect[idx]) {
25 idx++;
26 if (idx == len) return true;
27 } else {
28 idx = (c == expect[0]) ? 1 : 0;
29 }
30 }
31 }
32 return false;
33}
34
35bool sendAT(const char* cmd, const char* expect, unsigned long timeout) {
36 esp.println(cmd); // println sonuna \r\n ekler / println adds \r\n
37 return waitFor(expect, timeout);
38}
39
40void sendPage(int id) {
41 char body[220];
42 snprintf(body, sizeof(body),
43 "<meta name='viewport' content='width=device-width'>"
44 "<h2>LED: %s</h2>"
45 "<a href='/on'><button>AC / ON</button></a> "
46 "<a href='/off'><button>KAPAT / OFF</button></a>",
47 ledOn ? "ACIK / ON" : "KAPALI / OFF");
48 char head[110];
49 snprintf(head, sizeof(head),
50 "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n"
51 "Content-Length: %d\r\nConnection: close\r\n\r\n",
52 (int)strlen(body));
53
54 esp.print("AT+CIPSEND="); // önce kaç bayt gideceğini söyle / announce the length first
55 esp.print(id);
56 esp.print(',');
57 esp.println(strlen(head) + strlen(body));
58 if (waitFor(">", 2000)) { // ">" gelince veriyi yolla / send data after ">"
59 esp.print(head);
60 esp.print(body);
61 waitFor("SEND OK", 5000);
62 }
63 esp.print("AT+CIPCLOSE="); // bağlantıyı kapat / close the connection
64 esp.println(id);
65 waitFor("OK", 2000);
66}
67
68void handleLine() {
69 if (strncmp(line, "+IPD,", 5) == 0) { // yeni istek / new request: +IPD,0,384:GET /on ...
70 linkId = line[5] - '0';
71 if (strstr(line, "GET /on ")) ledOn = true;
72 else if (strstr(line, "GET /off ")) ledOn = false;
73 digitalWrite(LED_PIN, ledOn ? HIGH : LOW);
74 pending = true;
75 } else if (pending && lineLen == 0) { // boş satır = isteğin sonu / empty line = end of request
76 pending = false;
77 sendPage(linkId);
78 }
79}
80
81void setup() {
82 pinMode(LED_PIN, OUTPUT);
83 Serial.begin(115200);
84 esp.begin(9600); // AT+UART_DEF=9600,8,1,0,0 ile ayarlanmış olmalı / set with AT+UART_DEF
85
86 sendAT("AT+RST", "ready", 5000); // temiz başlangıç / clean restart
87 sendAT("AT+CWMODE=1", "OK", 2000); // istemci modu / station mode
88
89 esp.print("AT+CWJAP=\""); // AT+CWJAP="ad","şifre" / AT+CWJAP="ssid","password"
90 esp.print(WIFI_SSID);
91 esp.print("\",\"");
92 esp.print(WIFI_PASS);
93 esp.println("\"");
94 if (!waitFor("OK", 20000)) {
95 Serial.println(F("\nWi-Fi baglanamadi / Wi-Fi failed"));
96 }
97
98 sendAT("AT+CIPMUX=1", "OK", 2000); // sunucu için çoklu bağlantı / multiple connections
99 sendAT("AT+CIPSERVER=1,80", "OK", 2000); // 80 portunda sunucu / server on port 80
100 sendAT("AT+CIFSR", "OK", 2000); // IP adresini yaz / print the IP address
101}
102
103void loop() {
104 while (esp.available()) { // ESP-01'den gelenleri satır satır oku / read line by line
105 char c = esp.read();
106 if (c == '\n') {
107 line[lineLen] = '\0';
108 handleLine();
109 lineLen = 0;
110 } else if (c != '\r' && lineLen < sizeof(line) - 1) {
111 line[lineLen++] = c;
112 }
113 }
114}Voici la logique du code : quand un navigateur se connecte, l'ESP-01 transmet la requête à l'Arduino sous la forme +IPD,0,384:GET /on HTTP/1.1, où 0 est le numéro de connexion et 384 le nombre d'octets reçus. L'Arduino cherche "GET /on" ou "GET /off" dans cette ligne et règle la LED. Quand arrive la ligne vide qui marque la fin de la requête, il annonce avec AT+CIPSEND=0,longueur combien d'octets il va envoyer, transmet la page dès que le module affiche le signe ">" et ferme la connexion avec AT+CIPCLOSE après la réponse "SEND OK". Nous avons volontairement gardé la page courte : les 2 Ko de RAM de l'Uno ne suffisent pas pour de longs textes HTML, et un seul CIPSEND envoie au maximum 2048 octets. Pour des projets plus complexes, une bibliothèque comme WiFiEspAT t'évite de gérer toi-même les commandes AT.
Programmer l'ESP-01 directement : la méthode GPIO0 à la masse
L'ESP8266 de l'ESP-01, avec son processeur 32 bits à 80 MHz, est bien plus puissant qu'un Arduino Uno. Si ton projet ne comporte qu'un relais, un capteur ou une LED, tu n'as pas besoin d'Arduino : tu téléverses le programme directement dans l'ESP-01. Au démarrage, l'ESP8266 lit les niveaux de GPIO0, GPIO2 et GPIO15 pour décider quoi faire. Sur la carte ESP-01, GPIO15 est déjà relié à la masse et GPIO2 doit rester à HIGH ; le mode de démarrage dépend donc uniquement de GPIO0 :
| GPIO0 | GPIO2 | GPIO15 | Mode de démarrage | Message de démarrage à 74880 bauds |
|---|---|---|---|---|
| HIGH (en l'air) | HIGH | LOW | Fonctionnement normal : le programme en flash démarre | boot mode:(3,x) |
| LOW (masse) | HIGH | LOW | Mode programmation (téléchargement UART) | boot mode:(1,x) et waiting for host |
| Broche ESP-01 | Branchement | Remarque |
|---|---|---|
| VCC | Sortie du régulateur 3,3 V | La broche 3,3 V de l'adaptateur USB-TTL suffit rarement |
| GND | GND de l'USB-TTL et du régulateur | Tout à la même masse |
| TX | RXD de l'USB-TTL | Branchement croisé |
| RX | TXD de l'USB-TTL | Le cavalier doit être sur 3,3 V |
| EN (CH_PD) | 3,3 V | Directement ou via 10 kΩ |
| RST | Non branchée (brièvement à la masse pour un reset) | En option, tirée à 3,3 V via 10 kΩ |
| GPIO0 | Masse (GND) | Uniquement pendant le téléversement ; à débrancher ensuite |
| GPIO2 | Non branchée | Doit rester à HIGH au démarrage |
- Dans l'Arduino IDE, ouvre Fichier > Préférences et ajoute https://arduino.esp8266.com/stable/package_esp8266com_index.json dans le champ "URL de gestionnaire de cartes supplémentaires".
- Dans le Gestionnaire de cartes, cherche esp8266 et installe le paquet ESP8266 Community.
- Choisis Generic ESP8266 Module dans Outils > Type de carte. Règle Flash Size sur 1MB (FS:64KB OTA:~470KB) pour l'ESP-01S, ou sur l'une des options 512KB pour l'ancien ESP-01 bleu.
- Mets le cavalier de l'adaptateur USB-TTL sur 3,3 V, câble le module selon le tableau ci-dessus et garde GPIO0 relié à la masse.
- Coupe puis rétablis l'alimentation du module, ou touche brièvement RST avec la masse ; le module démarre alors en mode programmation.
- Choisis le port de l'USB-TTL dans Outils > Port et téléverse le code. Pour un premier essai, Fichier > Exemples > ESP8266 > Blink convient ; sur l'ESP-01S, la LED bleue est sur GPIO2.
- Quand "Hard resetting via RTS pin..." s'affiche, débranche GPIO0 de la masse et redémarre le module. Si GPIO0 reste à la masse, ton programme ne tourne pas et le module redémarre en mode programmation.
Commander un relais avec GPIO0 et GPIO2 : le module relais ESP-01S
Les broches d'usage général de l'ESP-01 sont GPIO0 et GPIO2, mais toutes deux doivent être à HIGH au démarrage. Ce que tu y branches ne doit donc pas tirer la broche à LOW pendant que la carte démarre. La solution la plus sûre est une commande active à l'état bas : au démarrage, la broche est à HIGH et le relais reste au repos ; quand ton programme met la broche à LOW, le relais colle. Le module relais ESP-01S vendu tout fait est conçu exactement ainsi : il s'alimente en 5 V, son régulateur fournit le 3,3 V de l'ESP-01S et GPIO0 pilote, via un transistor, un relais aux contacts 10 A 250 V AC. Sur les cartes v4.0 et suivantes, le relais colle quand GPIO0 est à LOW ; les anciennes cartes v1.0 peuvent demander une petite modification pour fonctionner avec l'ESP-01S, vérifie donc la version de ta carte.

1#include <ESP8266WiFi.h>
2#include <ESP8266WebServer.h>
3#include <ESP8266mDNS.h>
4
5const char* ssid = "AgAdi"; // Wi-Fi adın / your Wi-Fi name
6const char* password = "Sifre123"; // Wi-Fi şifren / your Wi-Fi password
7
8const int RELAY_PIN = 0; // ESP-01S röle kartında GPIO0 / GPIO0 on the ESP-01S relay board
9const int RELAY_ON = LOW; // çoğu kartta LOW = çeker; tersse değiştir / LOW = on, swap if yours is inverted
10const int RELAY_OFF = HIGH;
11
12ESP8266WebServer server(80);
13bool relayOn = false;
14
15void sendPage() {
16 String html = F("<!DOCTYPE html><html><head><meta charset='utf-8'>"
17 "<meta name='viewport' content='width=device-width,initial-scale=1'>"
18 "<title>ESP-01</title></head>"
19 "<body style='font-family:sans-serif;text-align:center'>"
20 "<h1>ESP-01 Röle / Relay</h1><p><b>");
21 html += relayOn ? "AÇIK / ON" : "KAPALI / OFF";
22 html += F("</b></p><p><a href='/on'><button>AÇ / ON</button></a> "
23 "<a href='/off'><button>KAPAT / OFF</button></a></p></body></html>");
24 server.send(200, "text/html", html);
25}
26
27void setRelay(bool on) {
28 relayOn = on;
29 digitalWrite(RELAY_PIN, on ? RELAY_ON : RELAY_OFF);
30 server.sendHeader("Location", "/"); // ana sayfaya dön / back to the main page
31 server.send(303, "text/plain", "");
32}
33
34void setup() {
35 digitalWrite(RELAY_PIN, RELAY_OFF); // önce kapalı seviye / off level first
36 pinMode(RELAY_PIN, OUTPUT);
37 Serial.begin(115200);
38
39 WiFi.mode(WIFI_STA);
40 WiFi.begin(ssid, password);
41 while (WiFi.status() != WL_CONNECTED) {
42 delay(500);
43 Serial.print('.');
44 }
45 Serial.println();
46 Serial.println(WiFi.localIP()); // bu adresi tarayıcıda aç / open this address in a browser
47 MDNS.begin("esp01"); // ya da http://esp01.local / or http://esp01.local
48
49 server.on("/", sendPage);
50 server.on("/on", []() { setRelay(true); });
51 server.on("/off", []() { setRelay(false); });
52 server.begin();
53}
54
55void loop() {
56 server.handleClient();
57 MDNS.update();
58}Après avoir téléversé le code dans l'ESP-01S avec la méthode ci-dessus, enfiche le module sur la carte relais et alimente-la en 5 V. Tu peux lire l'adresse IP dans le Moniteur série tant que l'USB-TTL est branché, ou la trouver dans la liste des appareils connectés de ta box ; depuis un ordinateur compatible mDNS, http://esp01.local fonctionne aussi. Si tu veux ajouter une entrée comme un bouton, la meilleure broche est GPIO3 (RX), car son niveau n'a pas d'importance au démarrage. Dans ce cas, utilise Serial.begin(115200, SERIAL_8N1, SERIAL_TX_ONLY) pour ouvrir le port série en émission seule.
ESP-01 avec le Raspberry Pi Pico (MicroPython)
Tu peux aussi ajouter une liaison sans fil à un Raspberry Pi Pico sans Wi-Fi grâce à l'ESP-01. Comme le Pico fonctionne en 3,3 V, aucun pont diviseur n'est nécessaire : le RX de l'ESP-01 va sur GP0 (UART0 TX) et son TX sur GP1 (UART0 RX). L'UART matériel du Pico lit 115200 bauds sans difficulté, tu n'as donc pas non plus à changer la vitesse du module ; si tu l'as déjà passée à 9600 dans la partie Uno, mets aussi baudrate à 9600 dans le code. Lance le code MicroPython ci-dessous avec Thonny ; le module se connecte au réseau, affiche son adresse IP et liste les réseaux voisins toutes les 30 secondes. Si tu as un Pico W, son Wi-Fi intégré est plus simple à utiliser ; consulte l'article sur le serveur web Wi-Fi avec le Pico W.
1from machine import UART, Pin
2import time
3
4# GP0 (TX) -> ESP-01 RX, GP1 (RX) <- ESP-01 TX
5uart = UART(0, baudrate=115200, tx=Pin(0), rx=Pin(1))
6
7def at(cmd, timeout=2000):
8 uart.write(cmd + "\r\n") # her komut \r\n ile biter / every command ends with \r\n
9 start = time.ticks_ms()
10 resp = b""
11 while time.ticks_diff(time.ticks_ms(), start) < timeout:
12 if uart.any():
13 resp += uart.read()
14 if b"OK" in resp or b"ERROR" in resp or b"FAIL" in resp:
15 break
16 print(cmd, "->", resp) # cevabı göster / show the reply
17 return resp
18
19at("ATE0") # komut yankısını kapat / turn off echo
20at("AT") # OK gelmeli / should answer OK
21at("AT+CWMODE=1") # istemci modu / station mode
22at('AT+CWJAP="AgAdi","Sifre123"', 20000) # Wi-Fi'ye bağlan / join Wi-Fi
23at("AT+CIFSR") # IP adresini sor / ask for the IP
24
25while True:
26 at("AT+CWLAP", 10000) # çevredeki ağları tara / scan nearby networks
27 time.sleep(30)ESP-01, NodeMCU ou ESP32 ?
| Caractéristique | ESP-01 | NodeMCU (ESP8266) | ESP32 DevKit |
|---|---|---|---|
| Puce | ESP8266 | ESP8266 | ESP32 (double cœur) |
| GPIO utilisables | 4 (dont TX/RX) | Environ 11 | Environ 25 |
| Entrée analogique | Aucune | 1 (A0) | 18 canaux, 12 bits |
| Programmation par USB | Non, il faut un USB-TTL | Oui | Oui |
| Alimentation | 3,3 V uniquement | USB 5 V ou VIN | USB 5 V ou VIN |
| Bluetooth | Non | Non | Oui (Classic et BLE) |
| Dimensions | 24,8 × 14,3 mm | Carte qui s'enfiche sur breadboard | Carte qui s'enfiche sur breadboard |
| Idéal pour | Ajouter le Wi-Fi à un Arduino, un relais ou un capteur | Débuter en Wi-Fi, quelques capteurs | Projets avec beaucoup de broches et Bluetooth |
Les grands atouts de l'ESP-01 sont sa taille et son prix ; il est idéal pour ajouter le Wi-Fi à un projet Arduino existant ou rendre sans fil un relais ou un capteur. Mais comme il n'a pas d'USB, changer les fils, ajouter un régulateur et mettre GPIO0 à la masse à chaque téléversement devient vite fastidieux. Il n'a pas d'entrée analogique et, comme GPIO16 n'est pas sortie, le réveil temporisé du deep sleep ne fonctionne qu'en soudant un fil fin sur une patte de la puce. Si tu prévois un projet sur batterie, entre la consommation moyenne dans le calculateur d'autonomie de batterie pour voir combien de jours il tiendra. Si tu apprends encore ou s'il te faut plus de trois broches, le NodeMCU ESP8266 offre la même puce avec USB et régulateur. S'il te faut le Bluetooth, plus de broches et plus de puissance, l'ESP32 est le bon choix ; nous comparons les cartes dans Arduino ou ESP32 ?
Idées de projets avec l'ESP-01
- Prise connectée Wi-Fi : allume et éteins une lampe depuis ton téléphone avec le module relais ESP-01S et le code ci-dessus ; ajoute une minuterie pour qu'elle s'allume seule le soir.
- Capteur de température sans fil : branche un capteur DS18B20 sur GPIO2 ; la résistance de tirage de 4,7 kΩ de la ligne de données fournit aussi le niveau HIGH nécessaire au démarrage.
- Suivi d'humidité et de température : affiche les mesures d'un DHT11 sur une page web que tu ouvres sur ton téléphone.
- Alerte de mouvement : branche un capteur PIR sur GPIO3 et envoie un message Telegram quand un mouvement est détecté ; la méthode ressemble beaucoup à celle de l'article sur le bot Telegram avec ESP32.
- Wi-Fi pour un projet Arduino : envoie avec les commandes AT les mesures d'une station météo réalisée avec l'Uno vers un programme sur ton ordinateur ou vers un serveur.
- Télécommande de porte de garage : branche les contacts du relais en parallèle sur le bouton du moteur de porte et ouvre-la depuis ton téléphone.
Erreurs fréquentes et solutions
| Symptôme | Cause probable | Solution |
|---|---|---|
| "Failed to connect to ESP8266: Timed out waiting for packet header" | Le module n'est pas en mode programmation ou TX et RX sont inversés | Relie GPIO0 à la masse, coupe et rétablis l'alimentation, branche TX sur RXD et RX sur TXD |
| Caractères incompréhensibles dans le Moniteur série | Vitesse incorrecte ; les messages de démarrage sont à 74880 bauds | Essaie 115200 et 9600 ; choisis 74880 pour voir le message de démarrage |
| Aucune réponse à AT | Mauvaise fin de ligne, TX et RX inversés ou EN non branchée | Choisis Both NL & CR, croise les lignes, relie EN à 3,3 V |
| Le module redémarre sans cesse, décroche en se connectant au Wi-Fi | Courant insuffisant | Utilise un AMS1117-3.3 séparé et un condensateur de 100–470 µF, raccourcis les fils |
| Réponse "busy p..." | Une nouvelle commande a été envoyée avant la fin de la précédente | Attends OK ou ERROR après chaque commande |
| +CWJAP:3 et FAIL | Réseau introuvable (réseau 5 GHz ou mauvais nom) | Utilise un réseau 2,4 GHz et respecte majuscules et minuscules |
| Le module chauffe beaucoup, la LED reste éteinte | 5 V appliqués sur VCC ou VCC et GND inversées | Coupe tout de suite l'alimentation ; le module est très probablement endommagé |
| Le module ne démarre pas avec le relais branché | Le circuit sur GPIO0 ou GPIO2 tire la broche à LOW au démarrage | Utilise une commande active à l'état bas ou déplace l'entrée sur GPIO3 |
| Le module relais 5 V ne se coupe jamais | Un HIGH de 3,3 V n'éteint pas complètement l'optocoupleur du module 5 V | Utilise un module relais compatible 3,3 V ou un étage à transistor |
| Les commandes AT ne marchent plus après un téléversement depuis l'Arduino IDE | Ton programme a remplacé le firmware AT | Reflashe le firmware AT d'Espressif avec esptool ou Flash Download Tool |
Malgré sa petite taille, l'ESP-01 est un excellent module pour apprendre toutes les notions de base du Wi-Fi : adresses IP, connexions TCP, serveurs web et communication série. Si quelque chose ne marche pas, vérifie d'abord l'alimentation, puis les lignes TX-RX et le niveau de GPIO0 ; la grande majorité des problèmes se situent à ces trois endroits. Dans l'application BlueGrays, tu trouveras des projets comme la connexion Wi-Fi, le serveur web, le mDNS, la mise à jour sans fil (OTA) et l'éclairage intelligent avec relais, avec schémas et code étape par étape.
Questions fréquentes
L'ESP-01 fonctionne-t-il en 5V ?
Non. L'ESP-01 fonctionne entre 3,0 et 3,6 V, et relier 5 V à sa broche VCC peut le détruire définitivement. Pour l'alimenter avec le 5 V de l'Arduino, intercale un régulateur comme l'AMS1117-3.3, et abaisse à 3,3 V le signal 5 V de la ligne TX de l'Uno avec un pont diviseur de tension.
Peut-on alimenter l'ESP-01 avec la broche 3.3V de l'Arduino ?
Ce n'est pas conseillé. La broche 3,3 V de l'Uno fournit officiellement 50 mA, alors que l'ESP-01 consomme 170 mA en émission et plus de 300 mA lors de brefs pics. Même si le module répond aux commandes AT, il redémarre en se connectant au réseau ; utilise un régulateur 3,3 V séparé capable de fournir au moins 300 à 500 mA.
Pourquoi mon ESP-01 ne répond pas aux commandes AT ?
Les causes les plus fréquentes sont une mauvaise vitesse, une fin de ligne du Moniteur série qui n'est pas sur Both NL & CR, des lignes TX et RX non croisées et une broche EN (CH_PD) non reliée à 3,3 V. Si un programme a déjà été téléversé depuis l'Arduino IDE, le firmware AT a été effacé et il faut le reflasher.
Le téléversement d'un code Arduino efface-t-il le firmware AT de l'ESP-01 ?
Oui. Le programme téléversé depuis l'Arduino IDE est écrit en flash à la place du firmware AT, et le module ne comprend plus les commandes AT. Pour revenir au mode AT, reflashe le firmware AT ESP8266 d'Espressif avec esptool ou Flash Download Tool aux adresses qui correspondent à la taille de flash de ton module.
Quelle est la différence entre l'ESP-01 et l'ESP-01S ?
La puce et le brochage sont identiques. L'ESP-01S est généralement noir, possède 1 Mo de flash, n'a pas de LED d'alimentation et sa LED bleue est sur GPIO2. L'ancien ESP-01 bleu a 512 Ko de flash, une LED d'alimentation rouge toujours allumée et une LED bleue sur la ligne TX.
Quelle est la vitesse par défaut de l'ESP-01 ?
La plupart des modules avec un firmware AT récent sont livrés à 115200 bauds ; les anciens peuvent être à 9600 ou 57600. Les premiers messages affichés au démarrage sont en revanche à 74880 bauds. Si tu utilises SoftwareSerial sur un Arduino Uno, passer la vitesse à 9600 de façon permanente avec AT+UART_DEF=9600,8,1,0,0 rend la liaison fiable.
Projets à réaliser après cet article
Voir tous les projets
Connexion Wi-Fi STA ESP32 (avec écran LCD)
Dans ce projet, nous connectons l'ESP32 au réseau Wi-Fi domestique en mode Station (STA) de manière sécurisée et tolérante aux pannes. Nous isolons SSID/mot de passe dans un fichier secrets.h pour empêcher leur fuite sur Git, mettons en place une reconnexion automatique, et affichons le niveau RSSI et l'adresse IP sur un écran LCD I2C. La LED intégrée sert d'indicateur d'état.

Serveur Web asynchrone ESP32 (avec affichage de l'adresse IP sur l'écran LCD)
Dans ce projet, nous transformons l'ESP32 en un serveur web asynchrone que vous pouvez contrôler depuis votre téléphone ou votre ordinateur connecté au même réseau Wi-Fi. Grâce à la bibliothèque ESPAsyncWebServer, le serveur peut traiter plusieurs requêtes simultanément (contrairement au classique WebServer.h qui se bloque sur une seule requête). Depuis votre navigateur, vous pourrez vous connecter à l'adresse IP de l'ESP32, puis allumer et éteindre la LED co

ESP32 mDNS : accès à l'appareil via bluegrays-esp.local (avec écran LCD)
Dans ce projet, en ajoutant un service mDNS (Multicast DNS) à l'ESP32, nous permettons d'accéder à l'appareil via un nom d'hôte lisible, tel que bluegrays-esp.local, plutôt qu'à l'aide d'une adresse IP. Même si l'adresse IP attribuée par le DHCP venait à changer, vous pourrez toujours accéder à l'appareil sous le même nom. En exécutant également un petit serveur web sur l'appareil, nous envoyons des commandes de contrôle des LED depuis un navigateur via l'adresse http://bluegrays-esp.local/.

Mise à jour OTA de l'ESP32 — Installation sans fil du firmware (avec écran LCD)
Dans ce projet, vous allez apprendre à installer un nouveau firmware sur l'ESP32 via Wi-Fi, sans câble USB. Grâce à la bibliothèque ArduinoOTA, l'ESP32 devient visible sur le réseau et apparaît automatiquement sous le nom bluegrays-ota dans l'onglet « Network port » de l'IDE Arduino. La première installation s'effectue via USB, puis toutes les mises à jour se font sans fil — une fonctionnalité essentielle pour les appareils sur le terrain. L'écran LCD I2C affiche l'état du Wi-Fi, l'adresse I

ESP32 : heure réelle depuis Internet via NTP
L'ESP32 se connecte au Wi-Fi et récupère l'heure réelle avec une précision de la milliseconde depuis des serveurs NTP (Network Time Protocol). Grâce à configTzTime(), le fuseau horaire de la Turquie (TRT, UTC+3) est appliqué automatiquement et le passage DST est géré via la chaîne POSIX TZ. L'heure est affichée sur le moniteur série et sur un écran LCD I2C en option. configTzTime() démarre le service SNTP ; des resynchronisations périodiques ont lieu tant que l'accès au réseau est disponible

Éclairage Intelligent ESP32 (PIR + LDR + Relais + OLED)
Transformez votre couloir, votre salle de bain ou votre garde-manger en éclairage intelligent avec l'ESP32 ! En utilisant un capteur de mouvement PIR, un capteur de lumière LDR et un module relais, nous construisons le scénario classique "la lumière s'allume lorsqu'un mouvement est détecté dans l'obscurité" — si l'environnement est déjà lumineux, le mouvement N'ACTIVE PAS la lumière, économisant ainsi de l'énergie pendant la journée. La lumière reste allumée pendant 30 secondes ; si le mouvement

Allumer et éteindre une ampoule 220 V avec un bouton
Envie d'allumer et d'éteindre une vraie ampoule de la maison avec un petit bouton ? À chaque appui, l'Arduino bascule un relais et l'ampoule s'allume ; un nouvel appui l'éteint. Le relais est un inter

Communication unidirectionnelle entre 2 Arduino
Tu fais discuter deux Arduino par un seul fil : appuie sur le bouton de l'un et la LED de l'autre s'allume, appuie encore et elle s'éteint. La carte qui envoie signale l'appui par un court message, et
Autres articles
Application BlueGrays
Réalise ce montage pas à pas sur ton téléphone
Schéma, code et liste des composants sur un seul écran. Plus de 200 projets Arduino, ESP32 et Pico à réaliser.
Scanne avec ton téléphone
Pointe l’appareil photo vers le code : la boutique d’applications de ton téléphone s’ouvre.
ou ouvre la boutique

