--- title: "Module 7 — Wi-Fi : station, point d'accès et client HTTP" --- ## Objectifs du module - Comprendre les deux modes de fonctionnement Wi-Fi de l'ESP32-S3 : station (STA) et point d'accès (AP). - Connecter la carte à un réseau Wi-Fi existant. - Créer son propre point d'accès Wi-Fi depuis la carte. - Réaliser une requête HTTP GET vers une API externe et exploiter la réponse JSON. ## 1. Les modes Wi-Fi de l'ESP32-S3 | Mode | Rôle | Usage typique | |-------------------------|----------------------------------------|----------------------------------------| | `WIFI_STA` (Station) | La carte se connecte à un routeur/box existant | Envoyer des données sur Internet, rejoindre le réseau local | | `WIFI_AP` (Point d'accès) | La carte crée son propre réseau Wi-Fi | Configuration sans routeur, projet autonome | | `WIFI_AP_STA` | Les deux simultanément | Portail de configuration puis bascule en client | ## 2. Mode station : se connecter à un réseau existant ```cpp #include const char* ssid = "NomDuReseau"; const char* motDePasse = "MotDePasse"; void setup() { Serial.begin(115200); WiFi.mode(WIFI_STA); WiFi.begin(ssid, motDePasse); Serial.print("Connexion en cours"); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(); Serial.print("Connecte ! Adresse IP: "); Serial.println(WiFi.localIP()); } void loop() { } ``` ::: {.callout-important title="Sécurité : ne jamais versionner ses identifiants"} Évitez d'écrire en clair vos identifiants Wi-Fi dans un fichier destiné à être partagé ou publié (dépôt Git). Une bonne pratique consiste à les isoler dans un fichier séparé non partagé (ex : secrets.h), ou à les saisir via le moniteur série au premier démarrage. ::: ## 3. Mode point d'accès : créer son propre réseau ```cpp #include const char* ssidAP = "ESP32-Formation"; const char* motDePasseAP = "formation123"; // 8 caracteres minimum void setup() { Serial.begin(115200); WiFi.mode(WIFI_AP); WiFi.softAP(ssidAP, motDePasseAP); Serial.print("Point d'acces cree. IP: "); Serial.println(WiFi.softAPIP()); // generalement 192.168.4.1 } void loop() { } ``` ## 4. Client HTTP : interroger une API externe Une fois connectée en mode station, la carte peut effectuer des requêtes HTTP vers des services web, par exemple pour récupérer la météo actuelle. ### 4.1 Bibliothèque nécessaire HTTPClient est incluse nativement dans le core Arduino-ESP32. Pour analyser une réponse JSON, installez la bibliothèque « ArduinoJson » (Benoit Blanchon) depuis le gestionnaire de bibliothèques. ### 4.2 Requête GET simple ```cpp #include #include void setup() { Serial.begin(115200); WiFi.begin("NomDuReseau", "MotDePasse"); while (WiFi.status() != WL_CONNECTED) { delay(500); } HTTPClient http; http.begin("https://api.exemple.com/donnees"); int codeReponse = http.GET(); if (codeReponse == 200) { String reponse = http.getString(); Serial.println(reponse); } else { Serial.printf("Erreur HTTP: %d\n", codeReponse); } http.end(); } void loop() { } ``` ## 5. Exercice : afficher la météo en temps réel Combinez cette section avec le Module 5 (écran OLED) : interrogez une API météo publique (par exemple Open-Meteo, qui ne nécessite pas de clé d'API) et affichez la température actuelle sur l'écran OLED, avec rafraîchissement toutes les 10 minutes. ```cpp #include #include #include void setup() { Serial.begin(115200); WiFi.begin("NomDuReseau", "MotDePasse"); while (WiFi.status() != WL_CONNECTED) { delay(500); } HTTPClient http; // Exemple : latitude/longitude de Paris http.begin("https://api.open-meteo.com/v1/forecast?latitude=48.85&longitude=2.35¤t_weather=true"); int code = http.GET(); if (code == 200) { String payload = http.getString(); JsonDocument doc; deserializeJson(doc, payload); float temp = doc["current_weather"]["temperature"]; Serial.printf("Temperature actuelle: %.1f C\n", temp); } http.end(); } void loop() { } ``` ::: {.callout-important title="Rappel important : ADC2 et Wi-Fi"} Comme vu au Module 3, dès que le Wi-Fi est actif, évitez toute lecture analogique sur les broches de l'ADC2 : privilégiez systématiquement l'ADC1 dans vos projets connectés. ::: ## 6. Indicateur visuel de connexion avec la LED NeoPixel Ajoutez un indicateur d'état de connexion sur la LED NeoPixel intégrée : orange clignotant pendant la tentative de connexion, vert fixe une fois connecté, rouge fixe en cas d'échec après un délai (par exemple 10 secondes de tentative). ## Checklist de fin de module - [ ] Je sais connecter la carte à un réseau Wi-Fi existant (mode STA). - [ ] Je sais créer un point d'accès Wi-Fi autonome (mode AP). - [ ] Je sais effectuer une requête HTTP GET et lire le code de réponse. - [ ] Je sais extraire une valeur d'une réponse JSON avec ArduinoJson. - [ ] J'ai réalisé l'affichage météo en temps réel sur l'écran OLED. - [ ] J'ai ajouté l'indicateur de connexion sur la LED NeoPixel.