DomoSys,
projet domotique.
Un système de supervision complet : capteurs, actionneurs, microcontrôleurs, serveur, application de bureau. Un projet réalisé grâce à l’IA. Voici ce qu’il fait.
Les trois étages nécessaires.
Surveiller un local, c’est répondre à des questions très concrètes. Fait-il trop chaud ? Quelqu’un est-il entré ? Comment ouvrir la porte à distance ? Chacune de ces questions traverse les mêmes trois étages, dans un sens ou dans l’autre.
Le monde physique
Une sonde de température de précision, un détecteur de présence, un récepteur radio, deux relais pilotant une gâche de porte et une sirène. Ces composants ne savent rien faire d’autre que changer de tension électrique.
La carte ESP32
Une carte de la taille d’une clé USB, sans système d’exploitation. On lui téléverse un unique programme écrit en C, qui tourne en boucle tant qu’elle est alimentée. Elle traduit les tensions en nombres et les nombres en tensions.
Le serveur et l’écran
Un mini ordinateur fait tourner un serveur écrit en Python, qui mémorise, décide et redistribue. Au-dessus, une application de bureau affiche l’état du système et renvoie les ordres. Elle ne parle jamais aux capteurs directement.
La boucle en détail.
C’est la contrainte qui structure tout le programme embarqué. Il n’y a qu’un seul fil d’exécution : si la carte s’arrêtait pour attendre la prochaine mesure de température, elle serait sourde à tout le reste pendant ce temps. Une porte ne s’ouvrirait pas.
La solution tient en une phrase : aucune tâche n’attend, chacune regarde l’horloge et se demande si son tour est venu. Si non, elle rend la main immédiatement. La boucle repasse ainsi des milliers de fois par seconde sur les six mêmes vérifications. La voici en détail, telle qu’elle tourne sur la carte.
void loop() {
unsigned long maintenant = millis(); // l'horloge interne, en millisecondes
// 1. Ordres du serveur : lus a chaque passage, sans jamais attendre
processSerialData();
// 2. Detection de presence : toutes les 100 ms, avec anti-rebond
if (maintenant - dernierPIR >= 100) {
dernierPIR = maintenant;
checkPIR();
}
// 3. Mesure de temperature : toutes les 5 secondes
if (maintenant - dernierePT100 >= 5000) {
dernierePT100 = maintenant;
checkPT100();
}
// 4. Ecoute radio 433 MHz : en continu
checkRF433RX();
// 5. Fin des impulsions relais : la gache se coupe toute seule
updateRelayTimers();
// 6. Alerte thermique : le temoin clignote toutes les 800 ms
if (alerteTemp && maintenant - dernierClignotement >= 800) {
dernierClignotement = maintenant;
basculeLedAlerte();
}
// ... et la boucle recommence, plusieurs milliers de fois par seconde
}
Chaque bloc suit le même motif : on compare l’horloge au dernier passage, et si l’intervalle est écoulé, on exécute puis on note l’heure. Aucun delay() nulle part : c’est lui qui rendrait la carte sourde. Les tâches continues, elles, se contentent de vérifier s’il y a quelque chose à faire et rendent la main aussitôt.
Côté Python, une fonction par fichier.
Le serveur n’est pas un gros programme unique. Il est découpé en plusieurs fichiers dont chacun fait une seule chose, ce qui permet de corriger un étage sans toucher aux autres.
Sait fabriquer et décoder les messages échangés avec la carte, et vérifier qu’ils sont arrivés intacts.
Tient le câble USB, lit les octets en continu, se reconnecte tout seul si la carte est débranchée.
Écrit chaque mesure et chaque événement dans un journal consultable après coup.
Reçoit les événements, les enregistre, les rediffuse à l’application, déclenche les alertes et redescend les ordres.
L’interface homme machine.
L’interface homme machine est le point de rencontre entre l’installation et la personne qui s’en sert. Elle a deux rôles : présenter ce que les capteurs mesurent, et transmettre les ordres vers les actionneurs. Informer et piloter, rien d’autre.
Sans elle, le système continuerait de tourner : la carte lirait ses sondes, le serveur tiendrait son journal. Mais personne ne saurait ce qui se passe dans le local, et personne ne pourrait ouvrir une porte à distance. C’est l’interface qui rend l’installation exploitable, et les informations qu’elle affiche arrivent en temps réel, sans avoir à les demander.
Ce qu’elle affiche
Les températures relevées par les sondes, l’état du détecteur de présence, la position des portes, les éclairages allumés, et le journal horodaté de tout ce qui s’est passé. Le tableau de bord donne la vue d’ensemble, chaque module donne le détail.
Ce qu’elle commande
Les actionneurs répondent à un clic : gâche électronique d’une porte, sirène, éclairages. Certains sont câblés sur des relais filaires, d’autres passent par des relais radio en 433 MHz, ce qui évite de tirer un câble jusqu’à chaque point commandé.
Le flux vidéo
Une caméra du local est diffusée en direct dans l’interface. Elle ne mesure rien, elle montre. C’est souvent ce qui permet de trancher entre une fausse alerte et un vrai problème.
L’application ne sait rien du matériel qu’elle pilote. Elle demande l’ouverture d’une porte, pas la mise sous tension d’une broche. C’est ce qui permet de remplacer une gâche, ou de faire passer un actionneur du filaire à la radio, sans toucher une seule ligne de l’interface.
Une alerte, de la sonde à la boîte mail.
Voici le trajet complet d’un seul événement à travers les trois étages. Tant que le seuil n’est pas franchi, la boucle revient à son point de départ sans rien déclencher.
Le trajet inverse suit le même chemin en sens contraire. Un appui sur « ouvrir la porte » descend jusqu’au chef d’orchestre, qui fabrique un message d’ordre et l’envoie sur le câble. La carte met la broche concernée sous tension pendant la durée demandée, puis la coupe d’elle-même. Le serveur n’a rien à surveiller.
Détecteur de présence.
Le détecteur ne renvoie qu’une seule information : sa broche est haute ou basse. Une présence dans son champ la fait passer à l’état haut.
Le programme demande si l’état a changé, et si ce changement est assez espacé du précédent pour être crédible. La lecture a lieu toutes les 100 ms, mais tout basculement survenant moins de 2 secondes après le précédent est écarté sans jamais quitter la carte.
Un détail compte dans cet organigramme : ce sont les changements qui remontent, jamais l’état répété. Le serveur n’est pas informé qu’une présence dure, il est informé qu’elle commence et qu’elle s’arrête. Le câble reste libre et le journal ne conserve que des faits.
Fonctionnement du projet.
Le schéma ci-dessous montre l’installation complète, telle qu’elle est câblée. Tout repose sur un principe simple : un maître, des esclaves. Le mini-PC NPC-Air est le maître ; il héberge le serveur et l’application, reçoit toutes les mesures et prend toutes les décisions. Les cartes ESP32 sont ses esclaves : elles ne décident rien, elles exécutent et rendent compte, reliées au maître par une liaison série UART à travers un hub USB.
Côté terrain, les capteurs de mouvement, de température, d’humidité et de fumée sont câblés directement sur les broches des cartes, qui remontent chaque relevé au maître. Les actionneurs, eux, passent par un émetteur-récepteur 433 MHz (STX882 / SRX882) qui commande sans aucun câble un relais radio quatre canaux alimenté en 12 V : sky dôme, porte d’entrée, sprinkler, sirène. Enfin, la caméra ONVIF, qui détecte le mouvement et diffuse la vidéo, et l’écran tactile mural dialoguent avec le maître par le réseau WiFi, via un WebSocket.
Quatre types de communication cohabitent donc dans la même installation : le WiFi pour la caméra et l’écran, l’USB série pour les cartes ESP32, la radio 433 MHz vers le relais quatre canaux, et le filaire entre les cartes et leurs capteurs. Chaque communication a été choisie pour sa contrainte : le filaire pour la fiabilité de la mesure, la radio pour éviter de tirer des câbles, le réseau pour le débit de la vidéo.
La nomenclature du projet.
Un système domotique, c’est aussi une liste d’achats. Voici la nomenclature complète du projet, du mini-PC central au moindre bornier à vis : unité centrale, microcontrôleurs, capteurs, actionneurs et connectique.
| Nombre | Désignation | Code article | Prix (unité) | Fournisseur |
|---|---|---|---|---|
| Unité centrale | ||||
| 1 | Mini-PC NPC-Air | NPC-Air | 230,00 € | NPC (AliExpress) |
| Caméra | ||||
| 1 | Caméra IP WiFi | 18,00 € | Icsee | |
| Cartes ESP32 (microcontrôleurs) | ||||
| 3 | ESP32 WROOM-32 et support | ESP-WROOM-32 / 963579 | 12,00 € | Shenzhen Baoxinjia / HK Speed Network |
| Afficheur | ||||
| 2 | CYD écran tactile 2.8″ | GUGU-With Case | 13,50 € | Sichuan Small & Micro Maker |
| 1 | Écran PC | 150,00 € | Dalhua | |
| Capteurs | ||||
| 1 | Module température + sonde | MAX31865 | 6,00 € | Shenzhen Rongbo Jiachuang |
| 1 | Capteur température/humidité | RMK-1804 (DHT22) | 2,50 € | Shenzhen Xinshengwei Elec. |
| 1 | Détecteur de fumée | SK030 | 25,00 € | Shenzhen XingAniot Tech. |
| 1 | Capteur radar de présence | LD2412 | 7,00 € | Dongguan Yilin Trading |
| 1 | Capteur radar de présence | LD2410 | 5,00 € | Dongguan Yilin Trading |
| 1 | Capteur radar de présence | C4001 / SEN0609 | 15,00 € | DFRobot |
| 1 | Capteur PIR | HC-SR501 | 3,00 € | Shenzhen XingAniot Tech. |
| 1 | Capteur de qualité d’air / gaz | 170197 | 2,50 € | |
| Actionneurs | ||||
| 1 | Sirène / buzzer 12V | cn1074051104qvqae / 12000033985863175 | 3,00 € | Shenzhen Yian Trading |
| 2 | Gâche électrique 12V | 12,00 € | ||
| 2 | Valve électrique | 7,00 € | ||
| 1 | Module relais ESP32 (1 canal) | X-HX0293A | 5,50 € | Shenzhen Rongbo Jiachuang |
| 2 | Module relais ESP32 (8 canaux) | BXBS-XC-BV / 1040418.03 | 13,50 € | Foshan Chancheng Yajian |
| 2 | Récepteur + relais 4 canaux | 1204+KT1527 (JJX-KG02 V1) | 6,50 € | Huizhou Winqiao Electronic |
| 1 | Émetteur 433 MHz (kit STX/SRX) | STX882 | 1,25 € | Shenzhen Rongbo Jiachuang |
| 1 | Récepteur 433 MHz (kit STX/SRX) | SRX882 | 1,25 € | Shenzhen Rongbo Jiachuang |
| Périphériques | ||||
| 1 | Clavier | 10,00 € | ||
| 1 | Souris | 7,00 € | ||
| Connectique | ||||
| 1 | Hub USB 3.2 (4 ports) | GA1-2A2C-G2 | 22,00 € | Yottamaster / Eversion Trading |
| Câblage | ||||
| Câble HDMI | 5,00 € | |||
| Câbles Dupont (lot M-M / M-F / F-F) | 9,00 € | |||
| Fil multibrins (lot couleurs) | 6,00 € | |||
| Câbles USB (alim. modules) | 20,00 € | |||
| Domino / borniers à vis (lot) | 4,00 € | |||
| Gaine thermorétractable (assortiment) | 3,00 € | |||
Un projet complet, réalisé grâce à l’IA.
Rien ici n’a été obtenu d’un seul jet. Un capteur de présence s’est révélé muet sur son port de communication après une série de tests systématiques, et a été remplacé. Une sonde a d’abord affiché une erreur de câblage avant de fonctionner en trois fils. Le firmware, le serveur et l’application ont été repris autant de fois que le matériel l’a exigé. C’est cette méthode, appliquée à un système réel, que nous enseignons.
Suivi
Reprendre un projet là où il en était, sans repartir de zéro à chaque échange.
Concentration
Traiter un problème à la fois, jusqu’au bout, plutôt que dix approximations.
Instruction
Formuler une demande assez nette pour obtenir un fichier utilisable, pas une esquisse.
Vigilance
Vérifier chaque sortie contre le réel. Le matériel, lui, ne fait aucune concession.