Client de monitoring domotique pour M5Stack CoreS3 permettant de surveiller et visualiser en temps réel l'état de différents équipements connectés d'une maison intelligente (lumière, chauffage, porte, température).
Ce projet implémente un client ESP32 qui communique avec un serveur domotique pour :
- Afficher l'état des équipements sur un écran tactile
- Contrôler des LEDs physiques en fonction des états
- Diffuser l'écran en streaming via HTTP
- S'authentifier de manière sécurisée avec le serveur
- Interface moderne avec cartes colorées et hiérarchie visuelle
- Affichage temps réel de 4 indicateurs :
- 💡 Lumière (ON/OFF)
- 🔥 Chauffage (ON/OFF)
- 🚪 Porte (OPEN/CLOSE)
- 🌡️ Température (en °C)
- Indicateurs visuels avec codes couleur (vert=actif, rouge=erreur, orange=allumé)
- Appairage sécurisé avec le serveur via token
- ID unique de l'appareil :
F8C096E350CC - Autorisation via header HTTP :
ID:TOKEN
- Watcher automatique toutes les 3 secondes
- Activation/désactivation via bouton C
- Synchronisation des états entre serveur et client
- Indicateur visuel de rafraîchissement (pastille bleue)
- 3 LEDs connectées aux GPIO :
- Pin 1 : LED Chauffage
- Pin 3 : LED Lumière
- Pin 16 : LED Porte
- Synchronisation état serveur ↔ LED physique
- Serveur Web intégré sur port 80
- Capture d'écran en temps réel (format BMP)
- Page HTML avec auto-refresh toutes les 2 secondes
- Accessible via navigateur :
http://[IP_CLIENT]/
- M5Stack CoreS3 (ESP32-S3)
- 3 LEDs + résistances
- Réseau WiFi (SSID:
MyHouseOS)
GPIO 1 → LED Chauffage (+ résistance 220Ω)
GPIO 3 → LED Lumière (+ résistance 220Ω)
GPIO 16 → LED Porte (+ résistance 220Ω)
GND → Masse commune
#include "M5CoreS3.h" // Librairie M5Stack CoreS3
#include <WiFi.h> // Connexion WiFi
#include <ArduinoJson.h> // Parsing JSON
#include <HTTPClient.h> // Requêtes HTTP
#include <WebServer.h> // Serveur WebÀ modifier dans le code selon votre configuration :
// WiFi
const char* ssid = "MyHouseOS";
const char* password = "12345678";
// Serveur domotique
const char* serverIP = "192.168.4.2";
const int serverPort = 3000;
// URLs API
const char* authUrl = "http://192.168.4.1/link";
const char* meteoUrl = "http://192.168.4.1/temp";
const char* lightUrl = "http://192.168.4.2:3000/toggle/light";
const char* heatUrl = "http://192.168.4.2:3000/toggle/heat";
const char* doorUrl = "http://192.168.4.2:3000/toggle/door";- Arduino IDE ou PlatformIO
- M5Stack Library
- ArduinoJson (v7+)
Dans Arduino IDE :
Outils → Gérer les bibliothèques
Rechercher et installer :
- M5CoreS3
- ArduinoJson
- Ouvrir
Client.ino - Modifier les paramètres WiFi (SSID/password)
- Ajuster les URLs selon votre architecture réseau
- Vérifier l'ID unique de l'appareil
- Connecter le M5Stack CoreS3 via USB
- Sélectionner le port COM approprié
- Téléverser le code
- Le M5Stack se connecte au WiFi
- L'adresse IP du stream s'affiche pendant 4 secondes (notez-la !)
- L'interface principale apparaît
| Bouton | Action |
|---|---|
| A (Gauche) | Lancer l'authentification avec le serveur |
| C (Droite) | Activer/Désactiver le watcher automatique |
- Affichage statique des dernières valeurs
- LEDs éteintes
- Pas de rafraîchissement automatique
- Message :
PAUSE - Appuyez sur C
- Rafraîchissement automatique toutes les 3 secondes
- LEDs synchronisées avec les états
- Indicateur de refresh (pastille bleue)
- Message :
WATCHER ACTIF (Btn C)
- Noter l'IP affichée au démarrage (ex:
192.168.4.5) - Ouvrir un navigateur sur un autre appareil
- Accéder à
http://[IP_CLIENT]/ - L'écran se rafraîchit automatiquement toutes les 2 secondes
POST /link
Request:
{
"id": "F8C096E350CC"
}
Response:
{
"token": "abc123xyz"
}Toutes les requêtes incluent le header :
Authorization: F8C096E350CC:abc123xyz
GET /toggle/light
{
"light": "true"
}GET /toggle/heat
{
"heat": "false"
}GET /toggle/door
{
"door": "true"
}GET /temp
{
"temp": "22.5"
}Fond principal : #0f172a (Bleu nuit)
Cartes : #1e293b (Gris ardoise)
Accent : #6366f1 (Indigo)
Texte : #f8fafc (Blanc cassé)
Sous-texte : #94a3b8 (Gris clair)
Succès : #22c55e (Vert)
Avertissement : #fb923c (Orange)
Erreur : #ef4444 (Rouge)┌─────────────────────────────────┐
│ MyHouse Client [WiFi OK] │ Header
├──────────────────┬──────────────┤
│ LUMIERE │ CHAUFFAGE │
│ ON/OFF │ ON/OFF │ Ligne 1
├──────────────────┼──────────────┤
│ PORTE │ Température │
│ OPEN/CLOSE │ 22.5 C │ Ligne 2
├─────────────────────────────────┤
│ WATCHER ACTIF (Btn C) / PAUSE │ Footer
└─────────────────────────────────┘
┌─────────────┐ WiFi ┌──────────────┐
│ M5Stack │ ←───────────→ │ Serveur │
│ Client │ HTTP/JSON │ Domotique │
└─────────────┘ └──────────────┘
│
│ GPIO
↓
┌─────────────┐
│ 3x LEDs │
│ Physiques │
└─────────────┘
- checkLight() → Requête GET
/toggle/light→ Mise à jour UI + LED - checkHeat() → Requête GET
/toggle/heat→ Mise à jour UI + LED - checkDoor() → Requête GET
/toggle/door→ Mise à jour UI + LED - getMeteoAPI() → Requête GET
/temp→ Mise à jour UI
- Vérifier le SSID et mot de passe
- Vérifier que le réseau est à portée
- Redémarrer le M5Stack
- Vérifier que le serveur est accessible
- Vérifier l'URL d'authentification
- Appuyer sur le bouton A pour réessayer
- Vérifier les connexions GPIO
- Vérifier les résistances (220Ω recommandé)
- Vérifier que le watcher est actif (bouton C)
- Vérifier l'IP affichée au démarrage
- Vérifier que le client et navigateur sont sur le même réseau
- Essayer d'accéder à
http://[IP]/capturedirectement
- Activer le watcher (bouton C)
- Vérifier la connexion au serveur
- Vérifier les URLs API dans le code
doc["id"] = "VOTRE_NOUVEL_ID";
fullToken = "VOTRE_NOUVEL_ID:" + Token;const unsigned long watcherInterval = 5000; // 5 secondes au lieu de 3const int PIN_LED_HEAT = 2; // Nouveau pin
const int PIN_LED_LIGHT = 4;
const int PIN_LED_DOOR = 5;Projet open source - Libre d'utilisation et de modification.
Développé pour le M5Stack CoreS3 dans le cadre d'un projet de domotique connectée.
Version : 1.0 Date : Décembre 2025 Plateforme : M5Stack CoreS3 (ESP32-S3)