Guides · 19 min de lecture

ESP32 ne se connecte pas au WiFi : WiFi.status() et solutions

Ton ESP32 ne se connecte pas au WiFi ? Codes WiFi.status() et reason, 2,4 GHz, mot de passe, brownout, setTxPower, reconnexion, IP fixe et eduroam expliqués.

Ton ESP32 ne se connecte pas au WiFi et le moniteur série n'affiche que des points à l'infini ? La cause n'est presque jamais une carte défectueuse. Les suspects habituels sont : un réseau en 5 GHz, une petite faute de frappe dans le nom du réseau ou le mot de passe, une alimentation trop faible dont la tension s'effondre dès que le WiFi démarre, les réglages de sécurité et de canal de la box, ou un réseau d'entreprise au lycée ou au travail. Bonne nouvelle : l'ESP32 te dit déjà ce qui ne va pas. Il suffit de savoir lire la valeur de WiFi.status() et le code reason (cause) qu'il renvoie quand la connexion tombe.

Dans ce guide, tu verras d'abord les étapes que suit l'ESP32 pour rejoindre un réseau et le code d'état qu'il renvoie à chacune d'elles. Viennent ensuite un sketch de diagnostic qui affiche les codes d'état et de cause, un scanner qui liste les réseaux autour de toi, l'obligation du 2,4 GHz et les box bibandes, le brownout et la solution setTxPower, un sketch de reconnexion qui se rétablit tout seul, l'IP fixe, la connexion WPA2-Enterprise pour les réseaux d'école et le test avec le partage de connexion du téléphone, qui t'indique en quelques minutes si le problème vient de la box ou de la carte. Les sketchs fonctionnent avec les versions 2.x et 3.x du core ESP32 pour l'Arduino IDE, et tu trouveras à la fin un script de test pour le Raspberry Pi Pico W et MicroPython.

Carte de développement ESP32 avec antenne PCB
Carte de développement ESP32 : la piste en zigzag au bout du module à capot métallique est l'antenne PCB. Du métal, une batterie ou des fils posés dessus ou juste à côté affaiblissent nettement la connexion.

Comment l'ESP32 se connecte-t-il à un réseau WiFi ?

Quand tu appelles WiFi.begin(), l'ESP32 enchaîne quatre étapes en arrière-plan. D'abord, il parcourt les canaux à la recherche d'un réseau portant le nom (SSID) que tu lui as donné. S'il le trouve, il s'authentifie puis s'associe auprès de la box. Sur les réseaux WPA2 vient ensuite la poignée de main en 4 étapes (4-way handshake), où l'on découvre si le mot de passe est bon. Enfin, il demande une adresse IP au serveur DHCP de la box. WiFi.status() ne renvoie WL_CONNECTED qu'une fois cette dernière étape terminée. Si tu sais à quelle étape il bloque, tu connais en grande partie la cause :

ÉtapeQue se passe-t-il ?État et cause en cas de blocage
1. ScanL'ESP32 cherche le nom du réseau sur les canaux 2,4 GHzWL_NO_SSID_AVAIL (1), reason 201
2. Authentification et associationLa box accepte ou refuse l'ESP32WL_CONNECT_FAILED (4) ou WL_DISCONNECTED (6), reason 202 ou 203
3. Poignée de main en 4 étapesLes clés dérivées du mot de passe sont comparéesWL_DISCONNECTED (6) avec reason 15 ; WL_CONNECTION_LOST (5) avec reason 204
4. DHCPLa box attribue une adresse IP à l'ESP32Reste bloqué sur WL_IDLE_STATUS (0)
Après la connexionLa box envoie régulièrement des trames beaconSi elles s'arrêtent : WL_CONNECTION_LOST (5), reason 200

Ce que signifient les codes WiFi.status()

WiFi.status() renvoie une valeur de type wl_status_t. Si tu l'affiches directement dans le moniteur série, tu ne vois qu'un nombre. Le tableau ci-dessous donne la signification de chaque nombre dans le core Arduino de l'ESP32. Attention : les valeurs 0 à 6 portent les mêmes noms que dans l'ancienne bibliothèque WiFi d'Arduino, mais sur l'ESP32 elles apparaissent dans des situations un peu différentes. Juste après WiFi.begin(), par exemple, l'état vaut 6 et non 0 ; il passe à 0 quand la carte s'est associée à la box et attend une IP, puis à 3 quand elle l'a obtenue.

CodeConstanteSignificationÀ vérifier d'abord
0WL_IDLE_STATUSAssocié à la box, mais pas encore d'adresse IPNormal pendant quelques secondes ; si ça dure, le DHCP
1WL_NO_SSID_AVAILAucun réseau de ce nom n'a été trouvéNom du réseau, bande 2,4 GHz, distance
2WL_SCAN_COMPLETEDUn scan des réseaux est terminéSans rapport avec la connexion
3WL_CONNECTEDConnecté avec une adresse IPTout va bien
4WL_CONNECT_FAILEDLa box a refusé la connexionMot de passe, mode de sécurité, filtrage MAC
5WL_CONNECTION_LOSTUne connexion établie a été perdueForce du signal, alimentation, antenne
6WL_DISCONNECTEDNon connecté ; tentative en cours ou échouéeLe code reason
254WL_STOPPEDLa station WiFi est arrêtée (core 3.x)Appeler WiFi.mode(WIFI_STA)
255WL_NO_SHIELDLe WiFi n'a pas encore été démarré (core 2.x)Appeler WiFi.mode() ou WiFi.begin()
Avec un mauvais mot de passe, la plupart des gens s'attendent à WL_CONNECT_FAILED (4), mais l'ESP32 affiche souvent WL_DISCONNECTED (6) et continue d'essayer en arrière-plan. C'est parce que beaucoup de box laissent simplement la poignée de main expirer quand le mot de passe est faux (reason 15). Autre erreur classique : appeler WiFi.begin() encore et encore dans la boucle d'attente. Chaque appel relance la tentative en cours et la carte n'arrive souvent jamais à se connecter. Appelle begin() une seule fois, puis contente-toi de lire l'état.

Sketch de diagnostic : afficher l'état et le code reason dans le moniteur série

Le sketch ci-dessous essaie de se connecter pendant 20 secondes, affiche le code d'état avec son nom à chaque changement et montre le code reason fourni par ESP-IDF à chaque coupure. S'il se connecte, il affiche l'adresse IP, la passerelle, la force du signal (RSSI) et le canal ; dans tous les cas, il indique aussi l'adresse MAC de la carte. Remplace le nom du réseau et le mot de passe par les tiens, téléverse le sketch et ouvre le moniteur série à 115200 bauds. Si le sketch ne se téléverse même pas, lis d'abord le guide sur les erreurs de téléversement.

Arduino (C++)
1#include <WiFi.h>
2
3const char* WIFI_ADI   = "EvAgi_2G";    // Wi-Fi adı, büyük-küçük harfe duyarlı / network name, case-sensitive
4const char* WIFI_SIFRE = "sifre1234";   // Wi-Fi şifresi / Wi-Fi password
5
6// Durum kodunu adına çevir / turn the status code into its name
7const char* durumAdi(wl_status_t durum) {
8  switch (durum) {
9    case WL_IDLE_STATUS:     return "WL_IDLE_STATUS";
10    case WL_NO_SSID_AVAIL:   return "WL_NO_SSID_AVAIL";
11    case WL_SCAN_COMPLETED:  return "WL_SCAN_COMPLETED";
12    case WL_CONNECTED:       return "WL_CONNECTED";
13    case WL_CONNECT_FAILED:  return "WL_CONNECT_FAILED";
14    case WL_CONNECTION_LOST: return "WL_CONNECTION_LOST";
15    case WL_DISCONNECTED:    return "WL_DISCONNECTED";
16    default:                 return "WL_NO_SHIELD / WL_STOPPED";
17  }
18}
19
20// Bağlantı her koptuğunda sebep kodunu yaz / print the reason code on every disconnect
21void koptugunda(arduino_event_id_t olay, arduino_event_info_t bilgi) {
22  Serial.printf("Koptu / Disconnected, reason: %d\n", (int)bilgi.wifi_sta_disconnected.reason);
23}
24
25void setup() {
26  Serial.begin(115200);
27  delay(1000);
28  WiFi.onEvent(koptugunda, ARDUINO_EVENT_WIFI_STA_DISCONNECTED);
29  WiFi.mode(WIFI_STA);                         // istasyon modu / station mode
30  WiFi.begin(WIFI_ADI, WIFI_SIFRE);            // begin() yalnızca bir kez / call begin() only once
31
32  wl_status_t onceki = WL_NO_SHIELD;
33  unsigned long baslangic = millis();
34  while (WiFi.status() != WL_CONNECTED && millis() - baslangic < 20000) {
35    wl_status_t simdi = WiFi.status();
36    if (simdi != onceki) {                     // yalnızca değişince yaz / print only when it changes
37      Serial.printf("Durum / Status: %d %s\n", (int)simdi, durumAdi(simdi));
38      onceki = simdi;
39    }
40    delay(500);
41  }
42
43  if (WiFi.status() == WL_CONNECTED) {
44    Serial.print("Bagli / Connected, IP: ");
45    Serial.println(WiFi.localIP());
46    Serial.print("Ag gecidi / Gateway: ");
47    Serial.println(WiFi.gatewayIP());
48    Serial.printf("RSSI: %d dBm, kanal / channel: %d\n", (int)WiFi.RSSI(), (int)WiFi.channel());
49  } else {
50    wl_status_t son = WiFi.status();
51    Serial.printf("Baglanamadi / Failed, son durum / last status: %d %s\n", (int)son, durumAdi(son));
52  }
53  Serial.print("MAC: ");
54  Serial.println(WiFi.macAddress());           // MAC filtresi için / for MAC filtering
55}
56
57void loop() {}

Il est normal de voir d'abord Durum / Status: 6 WL_DISCONNECTED. Si la connexion réussit, l'état passe brièvement à 0, puis à 3. S'il reste à 1, le réseau n'a jamais été trouvé ; si des lignes comme Koptu / Disconnected, reason: 15 s'enchaînent, le mot de passe est très probablement faux. Pour encore plus de détails, règle Outils > Core Debug Level sur Warn ou Info dans l'Arduino IDE : le core écrit alors aussi le nom de la cause à chaque coupure, par exemple Reason: 201 - NO_AP_FOUND. Voici les codes reason que tu rencontreras le plus souvent :

ReasonNomQu'est-ce que ça veut dire ?Solution
2AUTH_EXPIREL'authentification a expiréSignal faible ou box surchargée ; rapproche-toi, redémarre la box
5ASSOC_TOOMANYLa box a atteint son nombre maximal d'appareilsDéconnecte les appareils inutilisés ou augmente la limite
8ASSOC_LEAVEL'ESP32 a quitté le réseau de lui-mêmeTon code appelle WiFi.disconnect() ; c'est normal
154WAY_HANDSHAKE_TIMEOUTLa poignée de main du mot de passe n'a pas aboutiLe plus souvent un mauvais mot de passe ; vérifie-le ainsi que le mode de sécurité
200BEACON_TIMEOUTLes trames beacon de la box n'arrivent plusSignal faible ou chute de tension ; antenne, alimentation, setTxPower
201NO_AP_FOUNDAucun réseau de ce nom n'a été trouvéOrthographe du SSID, réseau 5 GHz, distance, réseau masqué, canaux 12 et 13
202AUTH_FAILL'authentification a été refuséeMot de passe ou mode de sécurité incompatible, comme Enterprise
203ASSOC_FAILLa box a refusé l'associationFiltrage MAC ou mode sans fil comme 802.11ax uniquement
204HANDSHAKE_TIMEOUTLa poignée de main a expiréMauvais mot de passe ou signal très faible
210, 211NO_AP_FOUND_W_COMPATIBLE_SECURITY, NO_AP_FOUND_IN_AUTHMODE_THRESHOLDRéseau trouvé, mais son mode de sécurité est incompatible ou sous le minimum autorisé (core 3.x)Passe la box en WPA2-Personnel (AES) ou abaisse le minimum avec WiFi.setMinSecurity()

Le 2,4 GHz obligatoire : l'ESP32 ne voit pas les réseaux 5 GHz

L'ESP32 classique, l'ESP32-S2, l'ESP32-S3, l'ESP32-C3 et l'ESP32-C6 ne fonctionnent que sur la bande 2,4 GHz. Ils ne voient jamais au scan un réseau qui émet en 5 GHz, et le résultat est toujours WL_NO_SSID_AVAIL. La plupart des box émettent sur les deux bandes. Si ta box utilise un nom différent pour chaque bande (par exemple MonWiFi et MonWiFi_5G), donne toujours à l'ESP32 le nom du réseau 2,4 GHz. Si les deux bandes portent le même nom (Smart Connect, band steering ou systèmes mesh), l'ESP32 rejoint généralement sans souci la partie 2,4 GHz, puisqu'il ne voit de toute façon pas le signal 5 GHz. Les ennuis commencent quand la bande 2,4 GHz est désactivée ou quand la box essaie de pousser les appareils vers le 5 GHz : l'ESP32 se connecte, décroche quelques secondes plus tard, et le cycle recommence. Dans ce cas, sépare les bandes dans l'interface de la box ou crée un réseau invité qui n'émet qu'en 2,4 GHz.

CarteBande WiFiRemarque
ESP32 (WROOM-32, DevKit), ESP32-S2, ESP32-S32,4 GHz uniquement802.11 b/g/n
ESP32-C32,4 GHz uniquementLes cartes Super Mini bon marché peuvent nécessiter une puissance d'émission réduite
ESP32-C62,4 GHz uniquementCompatible Wi-Fi 6 (802.11ax), mais toujours en 2,4 GHz seulement
ESP32-C52,4 GHz et 5 GHzLa première puce bibande d'Espressif
ESP8266 (NodeMCU, Wemos D1 mini, ESP-01)2,4 GHz uniquement802.11 b/g/n
Raspberry Pi Pico W et Pico 2 W2,4 GHz uniquementPuce sans fil CYW43439
Arduino Uno R4 WiFi2,4 GHz uniquementC'est l'ESP32-S3 de la carte qui gère le WiFi

Si la bande est la bonne et que le réseau reste introuvable, vérifie les réglages de canal et de mode de la box. Avec le réglage régional par défaut de l'ESP32, les canaux 1 à 11 sont scannés activement, tandis que les canaux 12 et 13 ne sont écoutés que passivement. Les réseaux visibles sur ces canaux sont en général quand même trouvés, mais l'ESP32 ne trouvera pas un réseau masqué (diffusion du SSID désactivée) sur le canal 12 ou 13. Le plus sûr est de passer le canal d'automatique à une valeur fixe : 1, 6 ou 11. L'ESP32 classique, le S2, le S3 et le C3 ne peuvent pas rejoindre une box réglée sur 802.11ax (Wi-Fi 6) uniquement ; passe le mode en b/g/n ou en mixte b/g/n/ax. Côté sécurité, les options les plus compatibles sont WPA2-Personnel (AES) ou le mode mixte WPA2/WPA3. Par défaut, le core Arduino refuse tout ce qui est plus faible que le WPA2 (WEP et ancien WPA-TKIP) ; si tu dois vraiment rejoindre un très vieux réseau, ajoute WiFi.setMinSecurity(WIFI_AUTH_WEP) avant begin(). Avant de modifier quoi que ce soit, regarde avec ce scanner ce que l'ESP32 voit réellement :

Arduino (C++)
1#include <WiFi.h>
2
3// Güvenlik türünü yazıya çevir / turn the security type into text
4const char* guvenlikAdi(wifi_auth_mode_t tur) {
5  switch (tur) {
6    case WIFI_AUTH_OPEN:          return "Acik / Open";
7    case WIFI_AUTH_WEP:           return "WEP";
8    case WIFI_AUTH_WPA_PSK:       return "WPA";
9    case WIFI_AUTH_WPA2_PSK:      return "WPA2";
10    case WIFI_AUTH_WPA_WPA2_PSK:  return "WPA/WPA2";
11    case WIFI_AUTH_WPA3_PSK:      return "WPA3";
12    case WIFI_AUTH_WPA2_WPA3_PSK: return "WPA2/WPA3";
13    default:                      return "Diger / Other (Enterprise)";
14  }
15}
16
17void setup() {
18  Serial.begin(115200);
19  WiFi.mode(WIFI_STA);
20  WiFi.disconnect();                            // temiz tarama için bağlantıyı kes / disconnect for a clean scan
21  delay(100);
22}
23
24void loop() {
25  Serial.println("Taraniyor / Scanning...");
26  int adet = WiFi.scanNetworks();               // engelleyen tarama, 2-4 sn / blocking scan, 2-4 s
27  if (adet <= 0) {
28    Serial.println("Ag bulunamadi / No networks found");
29  }
30  for (int i = 0; i < adet; i++) {
31    Serial.printf("%2d | %-32s | %4d dBm | kanal/ch %2d | %s\n",
32                  i + 1, WiFi.SSID(i).c_str(), (int)WiFi.RSSI(i),
33                  (int)WiFi.channel(i), guvenlikAdi(WiFi.encryptionType(i)));
34  }
35  WiFi.scanDelete();                            // sonuçları bellekten sil / free the results
36  Serial.println();
37  delay(10000);                                 // 10 sn sonra yeniden tara / scan again in 10 s
38}

Si le nom de ton réseau n'apparaît pas du tout dans la liste, le problème se situe avant ton code : le réseau est en 5 GHz, masqué, ou l'ESP32 est trop loin. Si le nom apparaît, regarde son RSSI : de -30 à -60 dBm c'est excellent, de -60 à -70 dBm c'est bon ; entre -70 et -80 dBm la connexion se fait mais peut tomber, et en dessous de -80 dBm n'espère pas une connexion fiable. Si tu vois le même nom plusieurs fois, ta box ou ton système mesh possède plusieurs points d'accès. Avec le scan rapide par défaut, l'ESP32 rejoint la première correspondance trouvée ; si tu veux qu'il choisisse le signal le plus fort, ajoute WiFi.setScanMethod(WIFI_ALL_CHANNEL_SCAN) avant begin(). Copier le nom exactement tel qu'il apparaît dans le scan et le coller dans ton sketch élimine définitivement les fautes de frappe.

Erreurs de nom de réseau (SSID) et de mot de passe

Si le sketch de diagnostic renvoie reason 201 ou 15, le problème se trouve généralement dans deux lignes de ton code. Un SSID peut faire jusqu'à 32 octets, un mot de passe WPA2 entre 8 et 63 caractères, et les deux sont sensibles à la casse. Voici les erreurs les plus souvent négligées :

  • Majuscules et minuscules : Tu ne peux pas rejoindre un réseau affiché MonWiFi dans la box en tapant monwifi. La même règle vaut pour le mot de passe.
  • Espaces invisibles : Un espace à la fin du nom du réseau ou du mot de passe, ou un caractère caché récupéré en le copiant quelque part, empêche la correspondance.
  • Accents : Des lettres comme é, è ou ç dans le nom du réseau peuvent être enregistrées par la box dans un autre encodage. Renommer le réseau avec uniquement des lettres sans accent et des chiffres est la solution la plus sûre.
  • Apostrophe typographique : Sur iPhone, le nom du partage de connexion est le nom du téléphone, qui contient souvent une apostrophe courbe ’ au lieu de l'apostrophe droite ' du clavier ; le nom saisi dans ton code ne correspond donc pas.
  • Antislash et guillemets : Si le mot de passe contient \ ou ", écris-les \\ et \" dans la chaîne C++ ; sinon le compilateur modifie le mot de passe ou le sketch ne compile pas.
  • Réseau ouvert : Pour un réseau sans mot de passe, n'indique pas de mot de passe du tout ; WiFi.begin(nom) suffit. Si tu fournis un mot de passe pour un réseau ouvert, le core cherche du WPA2 et ne trouve pas le réseau.
  • Réseau masqué : Tu peux rejoindre un réseau dont la diffusion du SSID est désactivée en tapant son nom exact, mais il n'apparaît pas dans les scans ; en cas de souci, réactive la diffusion le temps des tests.
Avant de te mettre à changer le mot de passe, détermine si le problème vient du nom ou du mot de passe. Si tu obtiens reason 201, le réseau n'a jamais été trouvé et toucher au mot de passe ne sert à rien. Si tu obtiens reason 15, 202 ou 204, le réseau a été trouvé, mais le mot de passe ou le mode de sécurité a été refusé.

Alimentation et brownout : pourquoi la carte redémarre-t-elle quand le WiFi s'active ?

Un module ESP32 consomme en moyenne environ 80 mA, mais quand l'émetteur WiFi travaille, le courant grimpe brièvement à des pics de 250 à 400 mA. Les plus gros pics surviennent en général pendant la calibration radio au démarrage et lors de la première connexion. C'est pourquoi Espressif recommande une alimentation capable de fournir au moins 500 mA. Si l'alimentation ne suit pas ces pics, la ligne 3,3 V s'effondre un instant, le détecteur de brownout de la puce se déclenche et la carte redémarre avec le message Brownout detector was triggered dans le moniteur série. Le symptôme est bien connu : le code tourne normalement jusqu'à la ligne WiFi, la carte se réinitialise sur WiFi.begin(), et tout tourne en boucle sans fin. Nous détaillons cette erreur dans l'article sur les erreurs Brownout et Guru Meditation de l'ESP32.

Régulateur de tension AMS1117 3,3 V
AMS1117 : c'est le régulateur qui abaisse le 5 V à 3,3 V sur la plupart des cartes de développement ESP32. Il a besoin d'un écart d'environ 1,1 à 1,3 V entre l'entrée et la sortie pour fonctionner correctement.
Source d'alimentationConvient ?Pourquoi ?
Port USB à l'arrière de l'ordinateur, câble court et épaisEn général ouiUn port USB 2.0 fournit 500 mA ; un câble court limite la chute de tension
USB en façade, hub USB ou câble long et finPeut poser problèmeLa résistance du câble et des contacts fait chuter la tension lors des pics de courant
Chargeur de téléphone 5 V d'au moins 1 AOuiLaisse une bonne marge pour les pics de courant
Broche 3.3V de l'Arduino UnoNonCette broche ne fournit qu'environ 50 mA
Batterie Li-ion 3,7 V branchée directement sur la broche 5V de la carteNonÀ cause de la chute de tension de l'AMS1117, la sortie descend sous 3 V
Batterie Li-ion avec élévateur 5 V ou régulateur 3,3 V à faible chuteOuiFournit un 3,3 V stable même quand la batterie se vide
Sortie 3,3 V d'un module d'alimentation MB102 pour breadboardLa plupart du tempsAlimente-le avec un adaptateur assez puissant et ajoute un condensateur
Dans les projets WiFi, place un condensateur électrolytique de 100 à 470 µF entre les broches 3V3 et GND de la carte, le plus près possible d'elle, avec à côté un condensateur céramique de 100 nF. La patte longue (+) de l'électrolytique va sur 3V3 et le côté marqué d'une bande sur le boîtier va sur GND ; un électrolytique monté à l'envers chauffe et peut éclater. Tu peux lire comment fonctionnent les condensateurs dans Qu'est-ce qu'un condensateur ? et comment bien alimenter ta carte dans le guide sur l'alimentation de l'Arduino.

La solution setTxPower : réduire la puissance d'émission

Sur certaines cartes, même avec une bonne alimentation, l'ESP32 voit le réseau mais n'arrive pas à s'y connecter, ou la connexion tombe sans cesse. Surtout sur les cartes ESP32-C3 Super Mini bon marché et sur certains clones d'ESP32, le circuit d'antenne et le régulateur peinent à pleine puissance d'émission. Par défaut, l'ESP32 émet à environ 19,5 à 20 dBm. Réduire cette puissance avec WiFi.setTxPower() diminue les pics de courant et répare souvent la connexion instantanément sur ces cartes. Appelle la fonction juste après WiFi.begin() ; si tu l'appelles avant le démarrage du WiFi, c'est-à-dire avant WiFi.mode() ou begin(), elle n'a aucun effet.

ConstantePuissanceQuand l'utiliser ?
WIFI_POWER_19_5dBm19,5 dBmProche de la valeur par défaut ; portée maximale
WIFI_POWER_15dBm15 dBmPremier essai en cas de petits problèmes
WIFI_POWER_11dBm11 dBmSuffit souvent si la box est dans la même pièce
WIFI_POWER_8_5dBm8,5 dBmLa valeur la plus souvent conseillée pour l'ESP32-C3 Super Mini
WIFI_POWER_5dBm5 dBmPour des tests juste à côté de la box

Chaque baisse de 3 dB divise par deux la puissance d'émission, donc la portée diminue aussi. Commence par 15 dBm ; si le problème persiste, descends à 11 puis à 8,5 dBm. Si la connexion se rétablit en baissant la puissance, la vraie cause est souvent l'alimentation ou la conception de l'antenne ; à terme, ajoute donc aussi une meilleure alimentation et un condensateur. Tu peux lire le réglage actuel de la carte avec WiFi.getTxPower() ; la valeur est exprimée par pas de 0,25 dBm, donc 78 correspond à 19,5 dBm.

Sketch de reconnexion automatique

L'ESP32 perd la connexion quand la box redémarre, quand le courant revient après une coupure ou quand le signal faiblit un moment. Dans le core ESP32, WiFi.setAutoReconnect(true) est activé par défaut et, après la plupart des coupures, la carte se reconnecte toute seule. Pour certaines causes, comme 202 AUTH_FAIL, le core abandonne toutefois après un seul essai et la carte reste hors ligne jusqu'à ce que tu la réinitialises. Dans un projet qui doit tourner pendant des mois, ajoute donc ta propre vérification. Le sketch ci-dessous se passe de delay() : avec millis(), il vérifie la connexion toutes les 15 secondes, se reconnecte si elle est tombée et redémarre la carte s'il ne parvient pas à se connecter pendant 5 minutes :

Arduino (C++)
1#include <WiFi.h>
2
3const char* WIFI_ADI   = "EvAgi_2G";    // Wi-Fi adı / network name
4const char* WIFI_SIFRE = "sifre1234";   // Wi-Fi şifresi / Wi-Fi password
5
6const unsigned long KONTROL_ARALIGI = 15000;  // 15 sn'de bir kontrol / check every 15 s
7const int EN_FAZLA_DENEME = 20;               // 20 x 15 sn = 5 dk / 20 x 15 s = 5 min
8unsigned long sonKontrol = 0;
9int basarisizSayac = 0;                       // üst üste başarısız kontrol / consecutive failed checks
10
11void wifiBaslat() {
12  WiFi.mode(WIFI_STA);
13  WiFi.setAutoReconnect(true);                // çekirdeğin kendi yeniden bağlanması / core auto-reconnect
14  WiFi.begin(WIFI_ADI, WIFI_SIFRE);
15  WiFi.setTxPower(WIFI_POWER_15dBm);          // gerekirse 8_5dBm'e kadar düşür / lower to 8_5dBm if needed
16  WiFi.setSleep(false);                       // modem uykusunu kapat / disable modem sleep
17}
18
19void setup() {
20  Serial.begin(115200);
21  wifiBaslat();
22}
23
24void loop() {
25  if (millis() - sonKontrol >= KONTROL_ARALIGI) {
26    sonKontrol = millis();
27    if (WiFi.status() == WL_CONNECTED) {
28      basarisizSayac = 0;
29      Serial.printf("Bagli / Connected, IP: %s, RSSI: %d dBm\n",
30                    WiFi.localIP().toString().c_str(), (int)WiFi.RSSI());
31    } else {
32      basarisizSayac++;
33      Serial.printf("Bagli degil / Not connected (%d/%d), yeniden baglaniyor / reconnecting\n",
34                    basarisizSayac, EN_FAZLA_DENEME);
35      WiFi.disconnect();
36      WiFi.reconnect();
37      if (basarisizSayac >= EN_FAZLA_DENEME) {
38        Serial.println("Yeniden baslatiliyor / Restarting");
39        delay(100);
40        ESP.restart();                        // son çare: kartı yeniden başlat / last resort: restart the board
41      }
42    }
43  }
44
45  // Projenin kodu buraya; uzun delay() kullanma / your project code here; avoid long delay()
46}

La ligne WiFi.setSleep(false) désactive le modem sleep, pendant lequel l'ESP32 coupe brièvement sa radio à intervalles réguliers lorsqu'il est connecté. Cela réduit les coupures avec certaines box et la latence du serveur web ; en contrepartie, la carte consomme quelques dizaines de mA de plus. Dans un projet sur batterie, tu peux supprimer cette ligne et calculer l'autonomie avec le calculateur d'autonomie de batterie. Garde la ligne setTxPower uniquement si tu rencontres les problèmes de la section précédente. Quand tu ajoutes le code de ton projet dans loop(), évite les longs delay(), car la vérification de la connexion ne s'exécute que tant que loop() tourne. Si tu préfères saisir les identifiants WiFi depuis ton téléphone plutôt que de les inscrire en dur dans le code, jette un œil à la bibliothèque WiFiManager.

Configurer une IP fixe sur l'ESP32

Normalement, la box attribue à l'ESP32 par DHCP une adresse qui peut changer à chaque fois. Si tu construis un serveur web que tu ouvriras toujours à la même adresse depuis ton téléphone, ou si le DHCP de la box fait des siennes (l'état reste bloqué à 0), une IP fixe te simplifie la vie. Respecte trois règles : WiFi.config() doit être appelé avant WiFi.begin() ; l'adresse choisie doit appartenir au réseau de la box tout en étant hors de sa plage DHCP (si la box distribue 192.168.1.2 à 100, prends par exemple 192.168.1.200) ; et la passerelle est l'adresse de la box elle-même. Pour connaître l'adresse de ta box, lance une fois le sketch de diagnostic en DHCP ; il affiche aussi la passerelle.

Arduino (C++)
1#include <WiFi.h>
2
3const char* WIFI_ADI   = "EvAgi_2G";      // Wi-Fi adı / network name
4const char* WIFI_SIFRE = "sifre1234";     // Wi-Fi şifresi / Wi-Fi password
5
6IPAddress sabitIP(192, 168, 1, 200);      // DHCP havuzunun dışında bir adres / an address outside the DHCP pool
7IPAddress agGecidi(192, 168, 1, 1);       // modemin adresi / router address
8IPAddress altAgMaskesi(255, 255, 255, 0); // alt ağ maskesi / subnet mask
9IPAddress dns1(1, 1, 1, 1);               // birinci DNS / primary DNS
10IPAddress dns2(8, 8, 8, 8);               // ikinci DNS / secondary DNS
11
12void setup() {
13  Serial.begin(115200);
14  WiFi.mode(WIFI_STA);
15  // config() mutlaka begin()'den önce / config() must come before begin()
16  if (!WiFi.config(sabitIP, agGecidi, altAgMaskesi, dns1, dns2)) {
17    Serial.println("Statik IP ayarlanamadi / Static IP config failed");
18  }
19  WiFi.begin(WIFI_ADI, WIFI_SIFRE);
20
21  unsigned long baslangic = millis();
22  while (WiFi.status() != WL_CONNECTED && millis() - baslangic < 15000) {
23    delay(500);
24    Serial.print('.');
25  }
26  Serial.println();
27  Serial.print("IP: ");
28  Serial.println(WiFi.localIP());             // 192.168.1.200 olmalı / should be 192.168.1.200
29}
30
31void loop() {}
Sur l'ESP32, l'ordre des paramètres est IP, passerelle, masque de sous-réseau, DNS1, DNS2, ce qui diffère de certaines bibliothèques WiFi Arduino (IP, DNS, passerelle, sous-réseau). Si tu inverses l'ordre, l'ESP32 rejoint le réseau mais n'accède pas à Internet. Renseigne aussi les adresses DNS : si le DNS ne fonctionne pas, l'ESP32 apparaît bien dans la box mais ne peut pas résoudre les noms de domaine, et n'atteint donc pas des services comme les API météo, NTP ou Telegram. Donner la même IP à deux appareils fait tomber leurs deux connexions au hasard.

Réseaux d'école et d'entreprise : connexion WPA2-Enterprise (eduroam)

eduroam dans les universités, les réseaux d'entreprise et certains réseaux scolaires utilisent le WPA2-Enterprise (802.1X), qui attribue à chaque utilisateur son propre identifiant et son propre mot de passe au lieu d'un mot de passe partagé. Un WiFi.begin(nom, motdepasse) classique échoue toujours sur ces réseaux, et dans le scanner leur type de sécurité apparaît comme Diger / Other (Enterprise). Les versions 2.x et 3.x du core Arduino de l'ESP32 proposent une variante de begin() toute prête pour le PEAP, la méthode la plus répandue :

Arduino (C++)
1#include <WiFi.h>
2
3const char* AG_ADI        = "eduroam";               // kurum ağının adı / enterprise network name
4const char* EAP_KIMLIK    = "[email protected]";   // kimlik, çoğu zaman kullanıcı adıyla aynı / identity, usually same as username
5const char* EAP_KULLANICI = "[email protected]";   // kullanıcı adı / username
6const char* EAP_SIFRE     = "kurum_sifren";          // kurum şifresi / enterprise password
7
8void setup() {
9  Serial.begin(115200);
10  WiFi.disconnect(true);                              // önceki bağlantıyı kapat / close any previous connection
11  WiFi.mode(WIFI_STA);
12  // PEAP (MSCHAPv2) ile bağlan, CA doğrulaması yok / connect with PEAP (MSCHAPv2), no CA check
13  WiFi.begin(AG_ADI, WPA2_AUTH_PEAP, EAP_KIMLIK, EAP_KULLANICI, EAP_SIFRE);
14
15  unsigned long baslangic = millis();
16  while (WiFi.status() != WL_CONNECTED && millis() - baslangic < 30000) {
17    delay(500);
18    Serial.print('.');
19  }
20  Serial.println();
21  if (WiFi.status() == WL_CONNECTED) {
22    Serial.print("Bagli / Connected, IP: ");
23    Serial.println(WiFi.localIP());
24  } else {
25    Serial.printf("Baglanamadi / Failed, durum / status: %d\n", (int)WiFi.status());
26  }
27}
28
29void loop() {}

Dans la plupart des établissements, l'identité (identity) est la même que l'identifiant ; certains demandent une identité externe anonyme comme [email protected]. Ce sketch ne vérifie pas le certificat du serveur (CA) : la connexion fonctionne, mais un faux point d'accès pourrait intercepter ton mot de passe. Avant d'inscrire ton mot de passe personnel dans un ESP32, demande donc conseil au service informatique et, si possible, un compte ou un réseau réservé aux appareils. Si ton établissement exige un certificat, tu peux passer le fichier CA en sixième paramètre de begin(). Les réseaux qui ouvrent une page de connexion dans le navigateur (portail captif), comme dans les hôtels, les résidences étudiantes et les cafés, posent un autre problème, car l'ESP32 ne peut pas remplir cette page. Certains établissements exigent aussi d'enregistrer à l'avance l'adresse MAC des appareils ; transmets au service informatique l'adresse MAC affichée par le sketch de diagnostic. Sur ces réseaux, la solution la plus pratique reste le partage de connexion de ton téléphone ou un petit routeur de poche.

Test avec le partage de connexion du téléphone : la box ou l'ESP32 ?

Le moyen le plus rapide de cerner la cause est de connecter l'ESP32 à un réseau dont tu contrôles entièrement les réglages. Le partage de connexion de ton téléphone est idéal pour cela :

  1. Donne au partage de connexion un nom court, composé uniquement de lettres sans accent et de chiffres (par exemple esptest), et un mot de passe simple d'au moins 8 caractères (par exemple test12345).
  2. Sur Android, règle l'option de bande dans les paramètres du point d'accès mobile (appelée bande AP ou Vitesse et compatibilité sur certains téléphones) sur 2,4 GHz et choisis WPA2-Personnel comme type de sécurité.
  3. Sur iPhone, va dans Réglages > Partage de connexion et active Autoriser d'autres utilisateurs. Sur les modèles récents, active aussi Optimiser la compatibilité ; le partage passe alors en 2,4 GHz. Le nom du partage est celui du téléphone : simplifie-le dans Réglages > Général > Informations > Nom et garde l'écran Partage de connexion ouvert jusqu'à ce que l'ESP32 soit connecté.
  4. Remplace le nom du réseau et le mot de passe du sketch de diagnostic par ceux du partage de connexion, pose le téléphone à 1 ou 2 mètres de l'ESP32 et téléverse le sketch.
  5. Lis les codes d'état et de cause dans le moniteur série, puis essaie le même sketch avec les identifiants de ta box.

Interprète le résultat ainsi : si l'ESP32 se connecte au partage de connexion mais pas à ta box, ton code, ta carte et ton alimentation sont bons ; le problème vient des réglages de bande, de canal, de sécurité, de filtrage MAC ou de nombre d'appareils de la box. S'il ne se connecte pas non plus au partage de connexion, le problème est du côté de l'ESP32 : change l'alimentation et le câble, baisse la puissance avec setTxPower, vérifie qu'aucun objet métallique ne se trouve devant l'antenne et relis le code. Le test du partage de connexion est aussi le moyen le plus rapide de prouver qu'un projet qui ne se connecte pas au lycée fonctionne en réalité.

Test WiFi avec le Raspberry Pi Pico W et MicroPython

Le Raspberry Pi Pico W et le Pico 2 W ne gèrent eux aussi que le 2,4 GHz ; tous les conseils de cet article sur la bande, le mot de passe, l'alimentation et le partage de connexion s'appliquent également à ces cartes. En MicroPython, les codes d'état se lisent à l'aide des constantes du module network. Le script ci-dessous fonctionne tel quel dans Thonny sur l'ESP32 comme sur le Pico W. Sur le Pico W, il arrête d'attendre dès que le réseau est introuvable ou que le mot de passe est faux ; sur l'ESP32, MicroPython continue de réessayer après certaines erreurs, le script affiche donc le dernier état au bout de 20 secondes :

Python
1import network, time
2
3AG_ADI = "EvAgi_2G"       # Wi-Fi adı / network name
4SIFRE = "sifre1234"       # Wi-Fi şifresi / Wi-Fi password
5
6wlan = network.WLAN(network.STA_IF)
7wlan.active(True)
8if wlan.isconnected():
9    wlan.disconnect()     # eski bağlantıyı kapat / close the previous connection
10    time.sleep(1)
11wlan.connect(AG_ADI, SIFRE)
12
13durum = wlan.status()
14for saniye in range(20):  # en fazla 20 sn bekle / wait up to 20 s
15    durum = wlan.status()
16    print(saniye, "durum / status:", durum)
17    if durum in (network.STAT_GOT_IP, network.STAT_NO_AP_FOUND, network.STAT_WRONG_PASSWORD):
18        break             # sonuç belli, beklemeyi bırak / result is known, stop waiting
19    time.sleep(1)
20
21if durum == network.STAT_GOT_IP:
22    print("Bagli / Connected, IP:", wlan.ifconfig()[0])
23    print("RSSI:", wlan.status("rssi"), "dBm")
24elif durum == network.STAT_NO_AP_FOUND:
25    print("Ag bulunamadi / Network not found (SSID, 2.4 GHz)")
26elif durum == network.STAT_WRONG_PASSWORD:
27    print("Sifre yanlis / Wrong password")
28else:
29    print("Baglanamadi / Failed, durum / status:", durum)

Sur le Pico W, les valeurs numériques sont différentes : 3 signifie connecté avec une IP, 2 connecté mais en attente d'IP, -1 erreur générale, -2 réseau introuvable et -3 mauvais mot de passe. Sur l'ESP32, tu verras plutôt 1001 pendant la connexion, 1010 une fois l'IP obtenue et, en cas de problème, des codes reason ESP-IDF comme 201 et 202. Pour éviter les soucis avec les canaux 12 et 13 sur le Pico W, définis le code pays avant de te connecter (rp2.country('FR'), ou network.country('FR') sur les firmwares récents) ; si la connexion tombe de temps en temps, tu peux désactiver l'économie d'énergie avec wlan.config(pm=0xa11140). Pour créer un serveur web avec le Pico W, consulte l'article serveur web WiFi avec le Pico W, et si tu débutes en MicroPython, jette un œil au guide des bases de MicroPython.

Erreurs fréquentes et solutions

SymptômeCause probableSolution
Caractères incompréhensibles dans le moniteur sérieLa vitesse en bauds ne correspond pasRègle le moniteur série sur 115200 bauds
État 1, reason 201Mauvais nom de réseau, réseau 5 GHz ou trop loinLance le scanner et copie exactement le nom du réseau 2,4 GHz
État 6, reason 15 à répétitionMauvais mot de passeRessaisis le mot de passe en faisant attention à la casse et aux caractères spéciaux
État 4 ou 6 ; reason 202, 210 ou 211Mode de sécurité incompatiblePasse la box en WPA2-Personnel (AES) ou en mode mixte WPA2/WPA3
Reste bloqué à l'état 0Associé à la box mais ne reçoit pas d'IP du DHCPRedémarre la box, agrandis la plage DHCP ou utilise une IP fixe
Redémarrage sur WiFi.begin() avec Brownout detector was triggeredL'alimentation ne suit pas les pics de courantCâble court, adaptateur d'au moins 1 A, 470 µF entre 3V3 et GND
Se connecte puis décroche au bout de quelques minutes (reason 200)Signal faible, modem sleep ou problème d'alimentationsetSleep(false), setTxPower, sketch de reconnexion, rapprocher de la box
Fonctionne sur le bureau mais pas dans le boîtierBoîtier métallique ou batterie devant l'antennePlace l'antenne au bord du boîtier, tournée vers l'extérieur, utilise un boîtier en plastique
Connecté, mais la page web ne s'ouvre pas sur le téléphoneLe téléphone est sur un autre réseau ou le réseau invité isole les appareilsConnecte les deux au même réseau et lis l'IP dans le moniteur série
Les valeurs de analogRead() deviennent fausses quand le WiFi est actifLe capteur est sur une broche ADC2, et le WiFi utilise l'ADC2Déplace le capteur sur les broches ADC1, GPIO 32 à 39
Portée de quelques centimètres sur un ESP32-CAM ou une carte à antenne externeLa sélection d'antenne est sur externe, mais aucune antenne n'est branchéeBranche une antenne sur le connecteur IPEX ou vérifie la résistance de 0 Ω de sélection d'antenne
Respecte l'ordre pendant le dépannage : utilise d'abord le test du partage de connexion pour savoir si le problème vient de la box ou de la carte, vérifie ensuite avec le scanner que le réseau est visible, lis alors l'état et le code reason du sketch de diagnostic, et ne passe qu'en dernier à l'alimentation et aux réglages de la box. Ne change qu'une chose à la fois. Si tu soupçonnes ton choix de broches, tu peux voir le brochage de ta carte avec l'outil Pinout ; si tu utilises un ESP32-CAM, consulte l'article ESP32-CAM pour les détails sur l'antenne.

Connecté : que peux-tu construire maintenant ?

  • Serveur web et tableau de bord en direct : Monte un serveur web ESP32 avec WebSocket qui affiche les valeurs des capteurs sur ton téléphone en temps réel.
  • Horloge Internet : Récupère l'heure auprès d'un serveur NTP et affiche-la sur un écran.
  • Écran météo : Obtiens la température et l'humidité de ta ville grâce à une API météo.
  • Notifications sur le téléphone : Envoie un message avec un bot Telegram quand la porte s'ouvre.
  • Maison connectée : Relie l'ESP32 à Home Assistant via MQTT.
  • Communication sans box : Fais dialoguer deux ESP32 avec ESP-NOW sans rejoindre aucun réseau.
  • Téléversement sans fil : Une fois la carte enfermée dans son boîtier, envoie le nouveau code par WiFi grâce à une mise à jour OTA.

Un ESP32 qui ne se connecte pas au WiFi déroute au début, mais les codes d'état et de cause t'indiquent toujours à quelle étape se situe le problème : 1 et 201 signifient que le réseau n'a pas été trouvé, 15 et 202 désignent le mot de passe ou le mode de sécurité, 0 le DHCP, et 200 ou les redémarrages soudains le signal ou l'alimentation. Si tu découvres l'ESP32, tu trouveras les bases dans Qu'est-ce que l'ESP32 ?. Dans l'application BlueGrays, tu peux aussi explorer des projets comme la connexion WiFi de l'ESP32, un serveur web, le mDNS, une horloge NTP, une station météo, la mise à jour OTA et une alarme Telegram, avec des schémas de câblage pas à pas et du code prêt à l'emploi.

Questions fréquentes

Pourquoi mon ESP32 ne se connecte-t-il pas au WiFi ?

Les causes les plus courantes sont un réseau en 5 GHz, une faute de frappe dans le nom du réseau ou le mot de passe, une alimentation trop faible dont la tension chute au démarrage du WiFi et les réglages de sécurité de la box. Affiche la valeur de WiFi.status() et le code reason lors de la déconnexion, et tu verras tout de suite laquelle est en cause. Si le réseau est introuvable, tu verras 1 et 201 ; avec un mauvais mot de passe, le plus souvent 6 et 15.

L'ESP32 peut-il se connecter à un WiFi 5 GHz ?

L'ESP32 classique, l'ESP32-S2, S3, C3 et C6 ne gèrent que le 2,4 GHz et ne voient pas du tout les réseaux 5 GHz au scan. Le modèle bibande est l'ESP32-C5. Si ta box diffuse les deux bandes sous des noms différents, donne à l'ESP32 le nom du réseau 2,4 GHz.

Que signifie WiFi.status() 6 sur l'ESP32 ?

6 correspond à WL_DISCONNECTED : la carte n'est pas connectée, et la tentative de connexion est soit encore en cours, soit en échec. Sur l'ESP32, un mauvais mot de passe donne souvent cette valeur plutôt que 4 (WL_CONNECT_FAILED). Pour connaître la vraie cause, regarde le code reason de l'événement ARDUINO_EVENT_WIFI_STA_DISCONNECTED.

Pourquoi mon ESP32 se déconnecte-t-il sans arrêt du WiFi ?

Les principales causes des coupures à répétition sont un signal faible, une alimentation qui ne suit pas les pics de courant du WiFi, du métal ou une batterie devant l'antenne et le band steering de la box. Rapproche la carte de la box, ajoute un condensateur de 100 à 470 µF entre 3V3 et GND et désactive le modem sleep avec WiFi.setSleep(false). Écris aussi ton code pour qu'il se reconnecte tout seul après une coupure.

Un ESP32 peut-il se connecter au partage de connexion d'un téléphone ?

Oui, à condition que le partage de connexion émette en 2,4 GHz. Sur Android, règle la bande du point d'accès sur 2,4 GHz ; sur iPhone, active Optimiser la compatibilité et garde un nom simple. Le test du partage de connexion est le moyen le plus rapide de savoir si le problème vient de ta box ou de l'ESP32.

Un ESP32 peut-il se connecter à eduroam ou au réseau de l'école ?

L'ESP32 peut rejoindre des réseaux WPA2-Enterprise comme eduroam grâce à la variante WiFi.begin(nom, WPA2_AUTH_PEAP, identité, utilisateur, mot de passe) du core Arduino de l'ESP32. Sur les réseaux qui ouvrent une page de connexion dans le navigateur (portail captif), en revanche, l'ESP32 ne peut pas remplir cette page. Le mieux est de demander d'abord au service informatique et, si possible, d'obtenir un compte dédié aux appareils.

Voir tous les projets
Connexion Wi-Fi STA ESP32 (avec écran LCD)
#127Avancé
Premium

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.

4.4(21)
33
Serveur Web asynchrone ESP32 (avec affichage de l'adresse IP sur l'écran LCD)
#129Avancé
Premium

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

4.8(16)
26
ESP32 mDNS : accès à l'appareil via bluegrays-esp.local (avec écran LCD)
#131Avancé
Premium

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/`.

4.8(14)
23
ESP32 : heure réelle depuis Internet via NTP
#128Avancé
Premium

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

4.5(13)
21
ESP32 HTTPClient + API météo (avec écran LCD)
#133Avancé
Premium

ESP32 HTTPClient + API météo (avec écran LCD)

Dans ce projet, nous effectuons un appel REST à l'API météo (wttr.in) via Internet à l'aide de l'ESP32 et de la bibliothèque `HTTPClient.h`. À l’aide d’ArduinoJson v7, nous analysons la réponse JSON renvoyée et affichons les informations relatives à la ville, à la température, à l’humidité, à la météo et au vent sur un écran LCD I2C, en turc et en anglais. wttr.in est gratuit et ne nécessite pas de clé API : il suffit de saisir le nom d’une ville pour obtenir les conditions météo en temps réel d

4.7(13)
20
Mise à jour OTA de l'ESP32 — Installation sans fil du firmware (avec écran LCD)
#132Avancé
Premium

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

4.6(14)
22
Compteur ESP32 WebSocket (2 boutons + écran LCD + affichage Web en temps réel)
#130Avancé
Premium

Compteur ESP32 WebSocket (2 boutons + écran LCD + affichage Web en temps réel)

Dans ce projet, deux boutons reliés à l'ESP32 (GPIO 5 incrémente, GPIO 4 décrémente) modifient un compteur. La valeur se met à jour instantanément sur un écran LCD I2C 16x2 et, grâce au support WebSocket d'ESPAsyncWebServer, dans tous les navigateurs connectés sans recharger la page. Au lieu du polling HTTP, une seule connexion persistante est utilisée et l'ESP32 envoie la nouvelle valeur à tous avec ws.textAll().

4.5(14)
23
Système d'Alarme de Mouvement ESP32 (PIR + Buzzer + LED + Telegram)
#145Avancé
Premium

Système d'Alarme de Mouvement ESP32 (PIR + Buzzer + LED + Telegram)

Un système d'alarme de sécurité intelligent qui active le buzzer et la LED lorsque le capteur PIR détecte un mouvement, tout en envoyant une notification instantanée au propriétaire via Telegram. Il intègre un délai d'attente de 30 secondes pour limiter la fréquence des alarmes répétées ; ce mécanisme ne vérifie pas la validité des détections du capteur PIR et n'élimine pas les faux déclenchements. Idéal pour la sécurité domestique, la surveillance de garage, d'entrepôts ou de bureaux. Avec l'ES

0.0(0)
8