Application de pilotage DMX avec ESP32, interface graphique Electron et fixtures dynamiques.
DMX2/
├── electron/ # App Electron (desktop)
│ ├── main.js # Processus principal (sérial, IPC)
│ ├── preload.js # Pont entre main et renderer
│ ├── renderer/
│ │ ├── index.html
│ │ ├── styles.css
│ │ ├── app.js
│ │ ├── fixtures.js
│ │ ├── coloris.js/css
│ │ └── data/profiles.json
│ └── package.json
│
├── esp32_firmware/ # Firmware ESP32 (PlatformIO)
│ ├── platformio.ini
│ └── src/main.cpp
│
└── README.md
cd electron
npm install
npm startcd esp32_firmware
# Installer PlatformIO CLI ou utiliser l'extension VS Code
pio run --target upload| ESP32 | MAX485 |
|---|---|
| GPIO 16 | RO |
| GPIO 17 | DI |
| GPIO 21 | DE/RE |
| GND | GND |
| 5V/3.3V | VCC |
- Dimmer (1ch)
- Spot RGBW (8ch) — Rouge, Vert, Bleu, Blanc, Dimmer, Flash
- Sterville 4 Zones (14ch) — 4 zones RGB + Flash + Dimmer
- Lyre 8ch / 12ch — Pan, Tilt, RGB
- Wash 6ch — Dimmer, RGB, Vitesse, Mode
- Profils personnalisés (nombre de canaux libre)
- Fixtures dynamiques : ajout/suppression à la volée, profils personnalisés
- Color picker par fixture (zones Sterville et single-color pour Spots)
- Scènes (32 régulières + 4 momentanées) : Ctrl+Click save sans vague/flash, Ctrl+Shift+Click save avec, Click recall, Shift+Click delete
- Transition : temps de fondu réglable par scène (0-30s)
- Playlist par chanson (sidebar, 128 songs)
- Animation vague (voir détails ci-dessous)
- Flash musical (voir détails ci-dessous)
- Spot linking : lier les couleurs entre spots
- Zone linking : lier les zones Sterville (L12, L34, LAll)
- Contrôle MIDI complet (voir mapping ci-dessous)
- Momentanées : 4 boutons press/relâche
- Import/Export JSON (fixtures, scènes, chansons, MIDI)
- Auto-reconnexion au dernier port série
- Sauvegarde auto de la config toutes les 2s
La vague fait tourner une couleur sinusoïdale sur les fixtures sélectionnées.
- Checkbox "Vague" dans la card de chaque fixture → active/désactive
- Bouton "Vague" dans la toolbar → démarre/arrête la vague globale
- Raccourci clavier :
W(toggle)
- Vitesse (slider) : vitesse de rotation de la vague
- x2 : doubler la vitesse
- Couleurs perso : activer pour choisir couleur début/fin (sinon arc-en-ciel HSV)
- Étoiles : flashs blancs aléatoires ponctuels sur les zones
- Fréquence étoiles : slider pour densité des étoiles
- Sterville (zone pickers) : chaque zone = 1 étape de vague (couleur décalée)
- Spot RGBW / autres : fixture entière = 1 étape
- Inversion vague : checkbox "Inversion" dans card Sterville → sens inverse
- Total zones : toutes les zones des fixtures
waveEnabledforment un cycle continu - Performance : 60fps, throttle DMX 2ms, trim trailing zeros
| Touche | Action |
|---|---|
W |
Toggle vague |
E |
Toggle étoiles |
C |
Toggle couleurs perso |
Système de flash rythmique par fixture, synchronisé au tempo (BPM).
- Checkbox "Flash" dans la card de chaque fixture → active/désactive
- Bouton "Flash" dans la toolbar → démarre/arrête le moteur flash
- Raccourci :
F(toggle)
- BPM / Tap Tempo : cliquer sur "Tap" au rythme pour calculer le BPM
- Subdivision déclencheur : Ronde, Blanche, Noire, Croche, Double-croche, Triple-croche, Quadruple-croche
- Subdivision durée : même liste — combien de temps le flash reste allumé
- Mode :
random: 1-2 unités flashent aléatoirement à chaque déclencheursequential: unités flashent une par une dans l'ordregroup4: flash par groupes de 4 (Sterville zones)
- Reverse : inverser l'ordre (sequential/group4)
- Couleur :
randomouspecific(color picker par fixture)
- Noir (pré-flash)
- Couleur flash (durée = subdivision durée)
- Fade vers noir (durée = subdivision durée)
- CC 119 : déclenche un flash ponctuel (oneshot) sur fixtures actives
- Commande série :
FLASHouFLASH #RRGGBBdepuis app tierce (WiFi/BT → ESP32)
Chaque scène enregistre : fixtures flashEnabled, BPM, subdivisions déclencheur/durée, mode, reverse, couleur.
| Message MIDI | Action |
|---|---|
| CC 1-32 | Activer scène 1 à 32 |
| CC 110 | Vague ON/OFF (≥64 ON, sinon OFF) |
| CC 111-113 | Vague : x2, Étoiles, Plage (≥64 ON) |
| CC 114 | Flash ON/OFF (≥64 ON, sinon OFF) |
| CC 115 | Flash : Inverser (≥64 ON) |
| CC 116-117 | Flash : Déclencher / Durée (0-127 → subdivision) |
| CC 118 | Flash : Mode (0-42 aléatoire, 43-85 séquentiel, 86-127 groupe de 4) |
| CC 119 | Déclencher flash (oneshot) |
| CC 120 | Flash : Couleur (<64 aléatoire, ≥64 choisie) |
| CC 121 | Vague : Vitesse (0-127 direct) |
| CC 122 | Vague : Scintillement étoiles (0-127 direct) |
| CC 101-102 | Plage début / fin : preset couleur (active aussi Plage) |
| CC 103 | Couleur flash : preset (bascule aussi en Choisie) |
| CC 124-127 | Activer momentanés M1 à M4 |
| Note C1 (24) | Momentané M1 (ON/OFF) |
| Note D1 (26) | Momentané M2 (ON/OFF) |
| Note E1 (28) | Momentané M3 (ON/OFF) |
| Note F1 (30) | Momentané M4 (ON/OFF) |
| Program Change | Charger chanson 0-127 |
Presets couleurs (CC 101/102/103) : 0-7 Rouge foncé, 8-15 Rouge clair, 16-23 Orange foncé, 24-31 Orange clair, 32-39 Jaune foncé, 40-47 Jaune clair, 48-55 Vert foncé, 56-63 Vert clair, 64-71 Cyan foncé, 72-79 Cyan clair, 80-87 Bleu foncé, 88-95 Bleu clair, 96-103 Magenta foncé, 104-111 Magenta clair, 112-127 Blanc.
| Touche | Action |
|---|---|
W |
Toggle vague |
E |
Toggle étoiles (vague) |
C |
Toggle couleurs perso (vague) |
F |
Toggle flash |
T |
Tap tempo (flash) |
H |
Aide (modal) |
Espace |
Blackout global |
- 32 scènes régulières : 2 rangées de 16 (1-14 grosses, 15-18 petites style momentané | 19-32 grosses)
- 4 momentanées : M1-M4 (press = ON, relâche = OFF + retour)
- Sauvegarde :
Ctrl+Click(ouCmd+ClickmacOS) : save SANS vague/flashCtrl+Shift+Click: save AVEC vague/flash
- Rappel : Click simple → fade avec transition, restaure vague/flash si sauvegardés
- Transition : 0-30s par scène (input à droite du numéro)
- Baud rate : 921600 (250kbaud bus DMX, 921600 série USB)
- Paquets optimisés : envoi uniquement des canaux actifs (trim trailing zeros)
- 36 canaux (2 Stervilles) → paquet de 41 octets → ~0.4ms
- 14 canaux (1 Sterville) → paquet de 19 octets → ~0.2ms
- Envoi à chaque frame (~60fps) sans frame skipping
- Throttle série : 2ms minimum entre envois
- DMX frame time : ~1.6ms pour 36 canaux (~22ms pour 512)
- Buffer ESP32 : 2048 octets
- Sterville 4 Zones : zones inversées (Z1 UI = offsets 9-11, Z4 = offsets 0-2). Flash=offset 12, Dimmer=offset 13.
- Spot RGBW 8ch : Rouge(0), Vert(1), Bleu(2), Blanc(3 slider), Dimmer(4 slider), Flash(5 slider). Pas d'automatiques.
- Dimmer : 1ch, auto-dim forcé à 255 si à 0 lors set color
- Vague inversée : par fixture Sterville (checkbox "Inversion")
- Dimmer scènes : valeur sauvegardée, pas forcé à 255
PC → ESP32
- Paquet complet:
[0xFF][0x00][NB_H][NB_L][CH1..CHn][CHECKSUM] - Mise à jour simple:
[0xFE][CH_H][CH_L][VALUE][CHECKSUM]
ESP32 → PC
[0xFE][STATUS](0x00=OK, 0x01=ERROR, 0x02=CONNECTED)
Commandes reçues (depuis app tierce via WiFi/BT → ESP32 → série)
FLASH→ déclenche un flash sur fixtures activesFLASH #RRGGBB→ flash avec couleur spécifique
L'app n'est pas signée (pas de certificat Developer ID). Après installation :
xattr -cr /Applications/LumiDMX.appESP_DMX
COLORIS
OpenCode
- Application développée par IA via OpenCode et toutes les IA FREE proposées dont "MiMO V2,5" pour la grande majorité du code (j'en suis arrivé au bout de sa gratuité !) et dernièrement "Nemotron 3 Ultra Free"
- Ce ne fût pas un long fleuve tranquille. Beaucoup de tests sont nécessaires pour arriver au résultat escompté.
- De nouvelles idées me viennent assez souvent pour mettre à jour cette appli.