Files
formation-arduino/modules/07-wifi.qmd
T
ArtemiaandClaude Opus 5.5 f4a80f4d5b Illustre les modules 7 à 9 (6 figures)
M7 : modes Wi-Fi, requête HTTP. M8 : échanges navigateur/serveur, HTTP vs WebSocket. M9 : modèle GATT, session BLE. Diagrammes de séquence plus lisibles (étiquettes sur fond blanc, boîtes à la largeur du nom). Gabarit : figures pleine largeur par défaut.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 15:20:12 +02:00

162 lines
5.3 KiB
Plaintext

---
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 |
![Les trois modes Wi-Fi de l'ESP32-S3](../schemas/svg/m07-modes-wifi.svg){#fig-m07-modes-wifi}
## 2. Mode station : se connecter à un réseau existant
```cpp
#include <WiFi.h>
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 <WiFi.h>
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.
![Requête HTTP vers une API météo : connexion au réseau, GET, réponse JSON](../schemas/svg/m07-requete-http.svg){#fig-m07-requete-http}
### 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 <WiFi.h>
#include <HTTPClient.h>
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 <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
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&current_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.