# Se connecter à un réseau Wi-Fi avec un ESP8266 ## Le matériel utilisé Les exemples de code de cet article ont été testés sur un **ESP8266** (puce **ESP-12F**) monté sur une carte de développement **NodeMCU V3**. C'est un combo très répandu chez les makers : la carte NodeMCU fournit l'alimentation, un convertisseur USB-série pour la programmation, et expose les broches GPIO de l'ESP8266 sur un format breadboard-friendly. > ⚠️ **Bon à savoir** : l'ESP8266 ne sait communiquer qu'en **Wi-Fi 2,4 GHz**. Si votre box ne diffuse qu'en 5 GHz (cas de plus en plus fréquent), la connexion échouera silencieusement. Pensez à activer la bande 2,4 GHz dans les réglages de votre routeur, ou à utiliser un point d'accès dédié. ## Le principe : le mode Station (STA) Un ESP8266 peut fonctionner selon trois modes Wi-Fi : - **Station (STA)** : il se connecte à un réseau existant, comme le ferait votre téléphone. C'est ce qu'on va faire ici. - **Access Point (AP)** : il *crée* son propre réseau Wi-Fi auquel d'autres appareils peuvent se connecter. - **STA + AP** : les deux à la fois. Dans ce tutoriel, on configure l'ESP en mode **Station** pour qu'il rejoigne le réseau Wi-Fi de notre choix. ## Deux approches : `WiFi.begin()` ou `WiFiMulti` ? La bibliothèque officielle propose deux façons de se connecter : | Approche | Quand l'utiliser | |---|---| | `WiFi.begin(ssid, password)` | Un seul réseau connu, code minimal. | | `ESP8266WiFiMulti` | Plusieurs réseaux candidats : l'ESP scanne, puis se connecte automatiquement à **celui qui a le meilleur signal (RSSI)**. Utile pour un objet qui se déplace entre plusieurs lieux (maison, atelier, FabLab…). | On va utiliser `WiFiMulti` ici — c'est l'approche la plus robuste, même avec un seul réseau, car elle gère mieux les reconnexions. ## Le code commenté ```cpp #include // Bibliothèque Wi-Fi de base #include // Gestion multi-réseaux // Identifiants du réseau — à adapter const char* wifi_ssid = "AP_for_Alpinux_FABLAB"; const char* wifi_password = "votre_mot_de_passe"; // "" si réseau ouvert // Création de l'objet WiFiMulti ESP8266WiFiMulti wifiMulti; // Délai max d'attente par tentative de connexion (en ms) const uint32_t connectTimeoutMs = 5000; void setup() { Serial.begin(115200); delay(1000); Serial.println("\n--- Démarrage de l'ESP8266 ---"); // 1. On passe l'ESP en mode Station (client Wi-Fi) WiFi.mode(WIFI_STA); // 2. On enregistre le(s) réseau(x) auquel se connecter // On peut appeler addAP() plusieurs fois pour plusieurs réseaux wifiMulti.addAP(wifi_ssid, wifi_password); // wifiMulti.addAP("Autre_Reseau", "autre_mdp"); // exemple // 3. Boucle d'attente jusqu'à connexion réussie Serial.print("Tentative de connexion au Wi-Fi"); while (wifiMulti.run(connectTimeoutMs) != WL_CONNECTED) { Serial.print("."); delay(500); } // 4. Connexion établie : on affiche les infos réseau Serial.println("\n✅ Connexion Wi-Fi réussie !"); Serial.print("Réseau : "); Serial.println(WiFi.SSID()); Serial.print("Adresse IP : "); Serial.println(WiFi.localIP()); Serial.print("Force du signal (RSSI) : "); Serial.print(WiFi.RSSI()); Serial.println(" dBm"); } void loop() { // Pour maintenir la connexion active et gérer les reconnexions, // il est recommandé d'appeler régulièrement wifiMulti.run() if (wifiMulti.run(connectTimeoutMs) != WL_CONNECTED) { Serial.println("⚠️ Connexion perdue, tentative de reconnexion..."); delay(1000); } } ``` ### Ce qu'il faut retenir, étape par étape 1. **`WiFi.mode(WIFI_STA)`** : on indique que l'ESP sera *client* d'un réseau, pas un point d'accès. 2. **`wifiMulti.addAP(ssid, password)`** : on déclare un réseau candidat. Si le réseau est ouvert (sans mot de passe), on peut passer un seul argument. 3. **`wifiMulti.run()`** : retourne le statut courant. Tant que ce n'est pas `WL_CONNECTED`, on attend. Le paramètre `connectTimeoutMs` évite que l'ESP s'acharne indéfiniment sur un réseau qui ne répond pas. 4. **`WiFi.localIP()`** : une fois connecté, c'est cette adresse qu'on utilisera depuis un navigateur ou un autre programme pour dialoguer avec l'ESP. > 💡 **Astuce sécurité** : ne committez jamais vos identifiants Wi-Fi sur un dépôt public. Une bonne pratique consiste à mettre `wifi_ssid` et `wifi_password` dans un fichier `secrets.h` ajouté au `.gitignore`. ## Résultat dans le moniteur série Une fois le code téléversé, ouvrez le **Moniteur série** de l'Arduino IDE (raccourci `Ctrl+Maj+M`) et réglez le débit à **115200 bauds** — sinon vous ne verrez que des caractères incompréhensibles. ![Sortie dans le moniteur série](20201111-233656.png) Vous devriez voir défiler les points pendant la connexion, puis l'adresse IP attribuée par votre box (via DHCP). **Notez cette adresse** : elle sera votre porte d'entrée vers l'ESP pour les tutoriels suivants (serveur web, API REST, MQTT…). ## Diagnostic des problèmes courants | Symptôme | Cause probable | |---|---| | Les points défilent à l'infini | Mauvais SSID/mot de passe, ou Wi-Fi en 5 GHz uniquement | | Caractères illisibles dans le moniteur | Mauvais débit série (doit être à 115200) | | Connexion qui tombe après quelques minutes | Alimentation USB insuffisante — un PC fournit parfois mal les pics de courant que demande le module Wi-Fi. Essayez un câble plus court ou une alim externe. | | `WL_NO_SSID_AVAIL` | Le réseau n'est pas vu par l'ESP (hors de portée, ou caché) | ## Pour aller plus loin L'ESP saura automatiquement se reconnecter si le réseau tombe momentanément — il garde les identifiants en mémoire flash. Dans les prochains articles, on verra comment exploiter cette connexion pour faire de l'ESP un mini-serveur web, envoyer des données dans le cloud, ou recevoir des commandes via MQTT.