115 lines
5.8 KiB
Markdown
115 lines
5.8 KiB
Markdown
# 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 <ESP8266WiFi.h> // Bibliothèque Wi-Fi de base
|
|
#include <ESP8266WiFiMulti.h> // 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.
|
|
|
|

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