Domosys domotique

Étude de cas · Projet réel

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.

Projet réalisé par Gabriel Muelas–Goncalves
Supervisé par le chef de projet Youcef Guizani
L’architecture

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.

Étage bas · 01

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.

Étage intermédiaire · 02

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.

Étage haut · 03

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.

Le firmware embarqué

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.

firmware · loop()
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.

Le serveur

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.

Le dictionnaire
protocol.py

Sait fabriquer et décoder les messages échangés avec la carte, et vérifier qu’ils sont arrivés intacts.

Le veilleur
serial_comm.py

Tient le câble USB, lit les octets en continu, se reconnecte tout seul si la carte est débranchée.

La mémoire
database.py

Écrit chaque mesure et chaque événement dans un journal consultable après coup.

Le chef d’orchestre
main.py

Reçoit les événements, les enregistre, les rediffuse à l’application, déclenche les alertes et redescend les ordres.

Le point de rencontre

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.

Consulter

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.

Agir

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é.

Voir

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.

Un événement, trois étages

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.

Organigramme de l’alerte thermique La sonde est mesurée toutes les cinq secondes. Si la température ne dépasse pas trente degrés, la boucle repart au début. Sinon l’écran affiche une alerte, puis un courrier est envoyé sauf si un précédent est parti dans l’heure. Mesure de la sonde toutes les 5 secondes Plus de 30 °C ? non oui Écran affiche une alerte Courrier déjà envoyé dans l’heure ? oui non Envoi du courrier une seule fois par heure

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.

Le filtrage à la source

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.

Organigramme de la détection de présence La broche du détecteur est lue toutes les cent millisecondes. Si l’état n’a pas changé, la boucle repart au début. S’il a changé mais depuis moins de deux secondes, le changement est écarté. Sinon il est transmis au serveur, puis le journal et l’écran sont mis à jour. Lecture de la broche toutes les 100 ms L’état a-t-il changé ? non oui Plus de 2 s depuis le dernier changement ? non oui Changement transmis vers le serveur Journal et écran mis à jour

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.

Vue d’ensemble

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.

Schéma d'architecture de DomoSys : le mini-PC NPC-Air maître au centre, relié en UART via un hub USB à deux ESP32 WROOM-32 esclaves, l'un portant les capteurs, l'autre pilotant un émetteur-récepteur 433 MHz vers un relais radio quatre canaux ; la caméra ONVIF et l'écran tactile sont connectés en WiFi et WebSocket.
Architecture complète de DomoSys · types de communication en légende
Bill of materials

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.

9
Catégories
30
Références
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 €
Ce que cette étude de cas démontre

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.

01

Suivi

Reprendre un projet là où il en était, sans repartir de zéro à chaque échange.

02

Concentration

Traiter un problème à la fois, jusqu’au bout, plutôt que dix approximations.

03

Instruction

Formuler une demande assez nette pour obtenir un fichier utilisable, pas une esquisse.

04

Vigilance

Vérifier chaque sortie contre le réel. Le matériel, lui, ne fait aucune concession.

Projet réalisé par Gabriel Muelas–Goncalves
Supervisé par le chef de projet Youcef Guizani
Retour en haut