🛠 Serveur web embarqué : piloter la matrice depuis le navigateur
Objectifs
Transformer la carte en serveur web : la bibliothèque WiFiS3 fournit WiFiServer pour écouter le port 80, recevoir une requête HTTP d'un navigateur et renvoyer une page HTML. Vous piloterez la matrice LED par de simples liens GET — l'ossature de toute interface de contrôle embarquée.
Matériel
- 1 Arduino UNO R4 WiFi connectée au même réseau que le PC (voir tuto station WiFi)
- Un navigateur sur le même réseau local
- Identifiants WiFi dans le croquis (jamais dans un dépôt public).
Code complet
#include <WiFiS3.h>
#include "Arduino_LED_Matrix.h"
ArduinoLEDMatrix matrix;
WiFiServer server(80);
const char* SSID = "votre-réseau";
const char* PASS = "votre-cle";
void setup {
Serial.begin(115200);
WiFi.begin(SSID, PASS);
while (WiFi.status != WL_CONNECTED) { delay(200); }
Serial.print(F("Ouvrir http://")); Serial.println(WiFi.localIP);
matrix.begin;
server.begin;
}
void loop {
WiFiClient client = server.available;
if (!client) { return; }
String requête = "";
while (client.connected && !requête.endsWith("\r\n")) {
if (client.available) {
requête = client.readStringUntil('\r'); // 1re ligne = GET /chemin HTTP/1.1
break;
}
}
bool on = requête.indexOf("led=on") >= 0;
matrix.beginFrame;
for (uint8_t c = 0; c < 12; c++) matrix.setColumn(c, on ? B11111111 : 0);
matrix.show;
client.println(F("HTTP/1.1 200 OK"));
client.println(F("Content-Type: text/html"));
client.println(F("Connection: close"));
client.println;
client.println(F("<html><body style='font-family:sans-serif'>"));
client.println(on ? F("<h2>Matrice ALLUMEE</h2>") : F("<h2>Matrice ETEINTE</h2>"));
client.println(F("<a href='/led=on'><button>ON</button></a> "));
client.println(F("<a href='/led=off'><button>OFF</button></a>"));
client.println(F("</body></html>"));
client.stop; // indispensable, sinon le navigateur tourne en boucle
}
Vérification attendue
Le Moniteur affiche une URL http://192.168.x.x ; ouverte dans le navigateur, elle montre deux boutons. Un clic sur ON allume les 96 LED, OFF les éteint. Chaque clic génère une requête visible si vous affichez requete sur le Moniteur.
Erreurs fréquentes
- Oublier
client.stop: la connexion reste ouverte, le navigateur recharge indéfiniment et la carte sature. - Lire toute la requête avec un
whilebloquant sans timeout : un client qui ne ferme pas gèle la boucle ; d'où la lecture d'une seule ligne. - Le navigateur envoie aussi une requête /favicon.ico : votre parseur doit ignorer les chemins inconnus (ici, tout ce qui n'est pas led=on éteint — acceptable, mais traitez le cas).
Autres tutoriels pour cette carte
- Premier Blink sur la UNO R4 WiFi : la première UNO 32 bits
- Apprivoiser la matrice LED 12x8 intégrée
- Toucher capacitif : touchRead sans composant
- Se connecter au WiFi et lire l'heure NTP (WiFiS3)
- Inclinomètre sur la matrice : l'IMU LSM6DSV16X en I²C
- Horloge persistante : RTC à pile + resynchronisation NTP
Exemples de code pour cette carte
clignotante.inoArduinobouton-poussoir.inoArduinodac-analogique.inoArduinoentree-analogique.inoArduinopwm-respiration.inoArduinoservo-balayage.inoArduino