🏗️

Architecture numérique Atlas Cabine

Présentation technique · 3 modèles de cabine · technologies

Présentation technique v2.1

Architecture numérique
des cabines acoustiques

Trois modèles de cabine — ESP32, Raspberry Pi, Arduino — qui s'adaptent au matériel réellement installé sur le terrain, reliés par un réseau privé sécurisé.

Modèle ESP32 Modèle Raspberry Pi Modèle Arduino

Naviguez avec ← → ou les flèches du clavier · Made in Tunisia 🇹🇳

Vue en couches

① Matériel · ESP32 · Pi 4 · Arduino · relais · reed · PIR · LED · clim · capteurs CO₂ · caméra
② Firmware on-device · scan & détection matériel · porte/urgence · publication MQTT · web diag
③ Réseau privé cabine · WiFi 802.1X (RADIUS) · isolation · broker MQTT local (Pi)
④ Services (edge / cloud) · cabin-hub Node · télémétrie · portails usine / commercial / boutique
⑤ Interfaces · kiosque web · app Android · écran externe · dashboard temps réel

Chaque couche ne s'exécute que si le matériel qui la porte est présent — c'est le principe « dépend du matériel installé ».

Les 3 modèles de cabine

🔩

Modèle ESP32

MCU unique = cerveau. Porte, capteurs, LED, mini web diag, MQTT.

door-esp32.ino

CabineConfig.h

WiFi PSK ou 802.1X

🍓

Modèle Raspberry Pi RECOMMANDÉ

Pi = edge brain : broker MQTT local, kiosque web, audio, caméra, télémétrie temps réel. ESP32 en actionneur.

cabin-hub (Node)

ESP32 rôle 2

WiFi 802.1X + localhost

🔌

Modèle Arduino

Arduino classique : relais porte + capteurs. Liaison Ethernet/MQTT ou pont UART vers le Pi.

door-arduino.ino

ArduinoCabineConfig.h

Ethernet privé / série

Modèle ESP32 — firmware

🔍 Détection matériel

Au démarrage : scanHardware() valide chaque GPIO, lit les capteurs analogiques, désactive les modules absents (pin = −1) et publie atlas/<cab>/material (retained).

🚨 Urgence

Danger interne → ouverture ; extérieur → fermeture ; catastrophique → ouverture partielle. Bouton GPIO 36 = danger interne automatique.

🕸 MQTT

atlas/<cab>/cmd|state|status|material · état retained · LWT online/offline · compat atlas/door/*.

💻 Mode développement

CABINE_MODE_DEV=1 : re-scan interactif, page web diag http://<esp32>/, test relais, logs. Désactivé en production.

Modèle Raspberry Pi — cabin-hub

SERVICES

  • · Broker MQTT local (localhost:1883)
  • · Express sert le kiosque web + REST
  • · WebSocket /ws temps réel
  • · Télémétrie → data/telemetry.jsonl

API

  • GET /api/door/state
  • POST /api/door/open · close
  • POST /api/scan · GET /api/health
Node.js mqtt.js ws systemd ALSA · libcamera

Installation : install.sh → service cabine-hub.service auto-boot.

Modèle Arduino — firmware

🌐 ARDUINO_LINK = 1 · Ethernet/MQTT

Shield WIZnet (W5100/W5500) sur le réseau privé câblé. Mêmes commandes, urgence et rapport matériel que l'ESP32 — sans WiFi.

🔗 ARDUINO_LINK = 2 · pont UART vers Pi

Chaque ligne reçue = commande (open, emergency:…), l'état remonté au Pi qui assure le réseau et la télémétrie.

Fonctions identiques (indépendantes de la plateforme)

porte + relock · présence · urgence (danger int./ext./catastrophique) · bouton urgence · capteurs · scan matériel au boot.

Note sécurité réseau

Pas de WiFi natif → réseau privé câblé (VLAN) ou transit par le Pi. Les commandes restent locales à la cabine.

Réseau privé cabine — WiFi 802.1X

SCHÉMA

RADIUS authentifie chaque appareil

▼ WPA2-Enterprise

SSID privé « CAB-NET-<n> »

ESP32 porte @cabin.atlas.tn hub Pi @cabin.atlas.tn clim · LED · caméra · capteurs tablette Android
Identité par appareil

Chaque contrôleur/accessoire = identité unique @cabin.atlas.tn → révocation possible, aucun partage de mot de passe.

Isolation & broker local

Le Pi héberge le broker MQTT local : les commandes ne quittent jamais le réseau privé. Seule la télémétrie usine sort (égress minimal autorisé).

Fichiers

hardware/wifi/CabineWifi8021x.h · wpa_supplicant.conf

Protocoles & flux de données

① On-device → hub/usine MQTT · atlas/<cab>/cmd|state|status|material
② Hub → interfaces WebSocket /ws + REST /api/* · même protocole que le serveur local `server/`
③ Interfaces ↔ orchestration web BroadcastChannel('atlas') + localStorage atlasEvent · synchronisation multi-onglets temps réel (kiosque ↔ dashboard)
④ Fabricant ↔ clients Cloudflare Pages · clés partagées atlasUsers/Orders/Cabins/Sessions/Prices/Accessories
⑤ Télémétrie JSONL local (Pi) · JSON retained MQTT · flash brut via event bus

Sécurité & modes

🔒 Sécurisé (PROD)

Production : données réelles, démo verrouillée, lecture seule sur les outils de test.

🧪 Bêta

Pré-prod : validation des fonctions avec données de démonstration.

🛠️ Développement

Boîte à outils : données fictives, reset, tests serveur local, événements temps réel.

🔧 Jetons d'installation (technicien)

INST-XXXXXX · actifs/révoqués en direct · Mode Technicien sur le kiosque (cabine, test porte, scan, installation terminée).

🔑 Accès cabines

Cabines CAB-<SITE>-NN · tokens ATLAS-XXXXXX · QR « ?cab=&access= » · validés localement, tokens vérifiés par le portail.

🚨 Urgence : toujours accessible sans authentificationdanger interne → ouverture · extérieur → fermeture (confinement) · catastrophique → ouverture partielle.

Pile technologique

🔩 Embarqué

C++ / Arduino (ESP32, U8g) ESP-IDF WiFi + MQTT PubSubClient Adafruit NeoPixel WIZnet W5100 (Arduino) 802.1X / EAP (RADIUS)

🍓 Edge (Pi)

Node.js / Express mqtt.js · ws systemd + bash ALSA · libcamera (opt.)

🤖 Android

Kotlin / Android Studio OkHttp WebSocket Coroutines

🌍 Web & Cloud

HTML/CSS/Tailwind CDN WebSocket · BroadcastChannel qrcodejs · html5-qrcode Pannellum 360° Cloudflare Pages

🇹🇳

Un système au service de la cabine

Firmware adaptatif, réseau privé protégé, urgence opérationnelle et interfaces temps réel : chaque cabine est numérique, même dans la salle la plus isolée.

hardware/door-esp32 hardware/door-arduino hardware/raspberry/cabin-hub hardware/android hardware/wifi

© 2026 Atlas Working — Made in Tunisia · Logiciel & R&D : PixelSoftware Design