Bienvenue dans Bench-Test v2.0 ! 🎉 Une station complète de test et programmation pour passionnés de modélisme ferroviaire avec protocole Z21 en WiFi. Ce système vous permet de :
✅ Tester et déboguer les locomotives DC (configurations 2 rails et 3 rails)
✅ Tester les décodeurs DCC avec détection complète d’acquittement
✅ Programmer les CVs DCC en mode service avec mesure de courant
✅ Surveiller la consommation de courant en temps réel avec capteur ACS712
✅ Contrôler à distance via WiFi avec des applications compatibles Z21 (PacoMouseCYD, JMRI, etc.)
✅ Fonctionnalité spéciale : Basculer en mode analogique en sélectionnant l’adresse DCC 1
Tout le contrôle se fait via le protocole Z21 en WiFi - Aucun interrupteur physique nécessaire !
Clients supportés :
| Fonction | Contrôle Z21 | Comportement |
|---|---|---|
| Mode Analogique | Sélectionner Adresse DCC 1 | 🔄 Bascule automatiquement en mode analogique |
| 2 Rails / 3 Rails | Fonction F0 | OFF = 2 rails 🛤️ / ON = 3 rails 🛤️🛤️🛤️ |
| Direction Märklin | Fonction F1 | Déclenche Relais1 (impulsion 24V) - Actif uniquement en mode 3 rails |
| Contrôle Vitesse | Manette | 0-100% via manette Z21 |
| Direction | Bouton Direction | Avant / Arrière |
| Contrôle Alimentation | Alimentation Voie | ON / OFF via Z21 |
| Programmation CV | Mode Programmation | Lecture/Écriture CVs avec détection ACK |
| Indicateur | Emplacement | Description |
|---|---|---|
| LED Alimentation | D3 (GPIO0) | 🟢 Allumée fixe quand alimentation voie ON |
| Afficheur LCD | I²C | État et courant en temps réel |
Ligne 1: [ANA/DCC] [RUN/PROG] [ON/OFF]
Ligne 2: I:X.XXA [FWD/REV] #[Adr]
Exemples :
DCC RUN ON + I:0.12A FWD #3 → Mode DCC, adresse 3, 120mAANA RUN ON + I:0.50A REV → Mode analogique (adresse 1 sélectionnée)WiFi OK + 192.168.1.100 → WiFi connecté, affichage IPAu premier démarrage, l’appareil crée un point d’accès WiFi :
dcc12345http://192.168.4.1Objectif : Tester les locomotives DC et moteurs avec contrôle de tension variable.
🎯 Comment activer le Mode Analogique :
ANA RUN ONFonctionnement :
Fonctionnement :
💡 Note : F1 ne fonctionne que quand F0=ON (mode 3 rails). En mode 2 rails, F1 n’a aucun effet.
Objectif : Tester les décodeurs DCC avec commandes d’exploitation normales.
🎯 Comment utiliser le Mode DCC :
DCC RUN ONProcédure de Test :
📊 Surveillance : Consommation de courant affichée en temps réel sur le LCD et diffusée à tous les clients Z21
Fonctionnalités :
Objectif : Programmer les CVs des décodeurs DCC (Variables de Configuration) en Mode Service via Z21.
🎯 Programmation avec JMRI :
🎯 Programmation avec PacoMouseCYD :
⚠️ Important : Un seul décodeur sur la voie pendant la programmation !
Fonctionnement :
Paramètres de Détection ACK :
✅ ACK DCC DÉTECTÉ !État de la Programmation CV :
| Broche | GPIO | Mode | Fonction | Description |
|---|---|---|---|---|
| A0 | Analog | INPUT | 📊 ACS712 OUT | Lecture analogique capteur de courant |
| D0 | GPIO16 | OUTPUT | 🔀 Relais2 | Sélection 2 rails / 3 rails (F0) |
| D1 | GPIO5 | I²C SCL | 🔌 Horloge I²C | Afficheur LCD |
| D2 | GPIO4 | I²C SDA | 🔌 Données I²C | Afficheur LCD |
| D3 | GPIO0 | OUTPUT | 💡 LED Alim | Indicateur alimentation ON |
| D4 | GPIO2 | OUTPUT | ⚡ LM18200 DIR | Contrôle direction moteur |
| D5 | GPIO14 | OUTPUT | 🔀 Relais1 | Relais direction Märklin (F1) |
| D6 | GPIO12 | - | 🔓 Disponible | Extension future |
| D7 | GPIO13 | - | 🔓 Disponible | Extension future |
| D8 | GPIO15 | OUTPUT | ⚡ LM18200 PWM | Contrôle vitesse moteur |
| TX | GPIO1 | OUTPUT | 📡 TX Série | Communication USB/Debug |
| RX | GPIO3 | INPUT | 📡 RX Série | Communication USB/Debug |
| Broche | Connexion | Description |
|---|---|---|
| PWM | D8 (GPIO15) | ⚡ Contrôle vitesse via signaux PWM |
| DIR | D4 (GPIO2) | 🔄 Contrôle direction (avant/arrière) |
| BRAKE | GND | 🔒 Relié à GND (non utilisé, fonctionnement normal) |
| OUT1 | ACS712 IP+ | 📊 Le courant passe par le capteur |
| OUT2 | Rail Voie 2 | 🛤️ Deuxième sortie voie |
| VS | Alim 19V | ⚡ Alimentation puissance moteur |
| GND | GND Commun | ⚡ Référence masse |
| Broche | Connexion | Description |
|---|---|---|
| VCC | 5V | ⚡ Alimentation capteur |
| GND | GND | ⚡ Masse |
| OUT | A0 (WEMOS) | 📡 Sortie analogique vers microcontrôleur |
| IP+ | LM18200 OUT1 | ➡️ Entrée courant fort |
| IP- | Rail Voie 1 | ➡️ Sortie courant fort vers voie |
Spécifications :
Afficheur LCD I²C 16×2 caractères
Relais2 (sélection 2 rails / 3 rails) :
Relais1 (contrôle direction Märklin) :
LED Alimentation :
Alimentation 19V DC
├─→ Pilote Moteur LM18200 (broche VS)
│ └─→ Sortie Voie (via ACS712)
│
├─→ Abaisseur DC (19V → 5V)
│ ├─→ WEMOS D1 Mini
│ ├─→ Afficheur LCD
│ ├─→ Capteur Courant ACS712
│ └─→ Modules Relais
│
└─→ Module BoostUp (19V → 24V)
└─→ Relais1 (contrôle direction Märklin - déclenché par F1)
Exigences Composants :
Installez PlatformIO :
Clonez le dépôt :
git clone <url-dépôt>
cd Bench-Test
# Compiler le firmware
pio run
# Téléverser vers WEMOS D1 Mini
pio run --target upload
# Surveiller sortie série
pio device monitor
Ou utilisez VS Code :
lib_deps =
marcoschwartz/LiquidCrystal_I2C@^1.1.4
mrrwa/NmraDcc@^2.0.17
ESP8266WiFi
DNSServer
ESP8266WebServer
Fonctionnalités Spéciales :
Fonctionnalités JMRI :
Le capteur de courant est auto-calibré au démarrage. Si vous avez besoin d’une calibration manuelle :
ACS712_ZERO_CURRENT dans main.cpp :#define ACS712_ZERO_CURRENT 512 // Ajustez cette valeur
Si votre LCD utilise une adresse différente :
Afficheur LCD :
LiquidCrystal_I2C lcd(0x27, 16, 2); // Changez 0x27 en 0x3F si nécessaire
Réinitialiser les identifiants WiFi si nécessaire :
wifiManager.resetSettings() dans le code, ou| Commande Z21 | Effet | Notes |
|---|---|---|
| Sélectionner Adresse 1 | 🔄 Basculer en mode Analogique | Changement de mode automatique |
| Sélectionner Adresse 2-127 | 🔵 Mode DCC | Fonctionnement DCC normal |
| Manette | 🚀 Vitesse 0-100% | Contrôle PWM |
| Direction | ➡️⬅️ Avant/Arrière | Broche DIR ou F1 (Märklin) |
| F0 | 🛤️ 2 rails / 3 rails | OFF=2 rails, ON=3 rails |
| F1 | 🚂 Direction Märklin | Actif uniquement en 3 rails (F0=ON) |
| F2-F28 | 🔘 Fonctions | TODO : Implémentation |
| Alimentation Voie | ⚡ ON/OFF | Contrôle alimentation général |
| Lecture/Écriture CV | 📝 Programmation | Mode service |
F0 - Configuration Rails :
F1 - Contrôle Direction Märklin :
src/
├── main.cpp # Code application principal
│ ├── Définitions Broches # Assignations GPIO (D0-D8, A0)
│ ├── Variables Globales # Gestion état (vitesse, direction, mode)
│ ├── Déclarations Avant # Prototypes de fonctions
│ ├── Fonctions Capteur # readCurrent(), detectDCCAck()
│ ├── Fonctions Contrôle # setSpeed(), setDirection(), setRailsMode()
│ ├── Contrôle Alim # applyPowerControl(), setPowerLED()
│ ├── Fonctions Affichage # updateLCDStatus()
│ ├── Callbacks Z21 # onZ21LocoControl(), onZ21FunctionControl()
│ ├── Callbacks WiFi # onWiFiConnected(), onPortalStarted()
│ ├── setup() # Initialisation WiFi + Z21 + LCD
│ └── loop() # Boucle mise à jour WiFi + Z21 + LCD
│
├── Z21.h # En-tête protocole Z21
│ ├── Constantes Protocole # Commandes, opcodes, port 21105
│ ├── Typedefs Callback # Types pointeurs de fonction
│ └── Classe Z21Protocol # Interface Z21 principale
│
├── Z21.cpp # Implémentation protocole Z21
│ ├── Communication UDP # Gestion socket WiFiUDP
│ ├── Gestion Clients # Jusqu'à 10 clients, suivi timeout
│ ├── Analyse Messages # processZ21Message()
│ ├── Gestionnaires Cmd # handleXSetLoco(), handleXCV...()
│ └── Diffusion # Diffusions alimentation, courant, info loco
│
├── WifiManager.h # En-tête gestionnaire WiFi
│ ├── Config Portail # Paramètres AP, DNS, serveur web
│ ├── Structure EEPROM # Stockage identifiants
│ ├── Typedefs Callback # Callbacks de connexion
│ └── Classe WifiManager # Interface WiFi + portail
│
└── WifiManager.cpp # Implémentation gestionnaire WiFi
├── Stockage Identifiants # Lecture/écriture EEPROM
├── Pages Web Portail # HTML pour configuration
├── Scan Réseau # Découverte réseaux WiFi
├── Logique Connexion # Auto-connexion, gestion timeout
└── Portail Captif DNS # Redirection vers 192.168.4.1
| Fonction | But | Emplacement |
|---|---|---|
readCurrent() |
Lire capteur ACS712, détecter court-circuit | main.cpp |
detectDCCAck() |
Détecter acquittement DCC (60mA, 6ms) | main.cpp |
applyPowerControl() |
Activer/désactiver sortie PWM | main.cpp |
setSpeed(int) |
Régler vitesse 0-100% via PWM | main.cpp |
setDirection(int) |
Contrôler broche DIR (0=ARR, 1=AV) | main.cpp |
setRailsMode(int) |
Contrôler Relais2 via D0 (fonction F0) | main.cpp |
setPowerLED(bool) |
Contrôler LED alimentation sur D3 | main.cpp |
updateLCDStatus() |
Rafraîchir affichage LCD (toutes les 300ms) | main.cpp |
onZ21LocoControl() |
Callback Z21 pour commandes loco | main.cpp |
onZ21FunctionControl() |
Callback Z21 pour F0-F28 (F0=rails, F1=relais) | main.cpp |
onZ21CVRead/Write() |
Callbacks Z21 pour programmation CV | main.cpp |
onWiFiConnected() |
Callback quand WiFi se connecte, démarre Z21 | main.cpp |
z21.begin(port) |
Initialiser écoute UDP Z21 | Z21.cpp |
z21.loop() |
Traiter messages Z21 entrants | Z21.cpp |
wifiManager.begin() |
Démarrer connexion WiFi ou portail | WifiManager.cpp |
wifiManager.loop() |
Gérer requêtes portail, vérifier connexion | WifiManager.cpp |
Surveiller la sortie série :
pio device monitor
# Affiche : État WiFi, adresse IP, messages Z21, lectures courant, détection ACK
Débogage WiFi :
Débogage protocole Z21 :
Dépannage capteur de courant :
| Paramètre | Valeur | Notes |
|---|---|---|
| Tension Fonctionnement | 19V DC | Alimentation principale |
| Tension Logique | 5V / 3.3V | ESP8266 fonctionne à 3.3V |
| Courant Max Voie | 3A | Limite LM18200 (avec dissipateur) |
| Protection Court-Circuit | 2A | Coupure alimentation automatique |
| Plage Mesure Courant | ±5A | Modèle ACS712-05A |
| Résolution Courant | ~5mA | ADC 10 bits à 3.3V |
| Seuil Détection ACK | 60mA | Standard DCC, 6ms minimum |
| Fréquence PWM | ~1kHz | Valeur par défaut ESP8266 |
| Plage Adresses DCC | 1-127 | 1=Mode analogique, 2-127=DCC |
| Taux Rafraîch. LCD | 300ms | ~3 IPS |
| Débit Série | 115200 | Sortie USB/Debug |
| Protocole WiFi | 802.11 b/g/n | 2.4GHz uniquement (ESP8266) |
| Protocole Z21 | UDP Port 21105 | Standard Z21 LAN |
| Max Clients Z21 | 10 | Connexions simultanées |
| IP Portail | 192.168.4.1 | Adresse portail captif |
| SSID Portail | BenchTest-Setup | Nom AP par défaut |
| Mot de Passe Portail | dcc12345 | Mot de passe AP par défaut |
| Utilisation Mémoire | RAM: 43.2%, Flash: 31.9% | Beaucoup de place pour extension |
⚠️ Toujours déconnecter l’alimentation avant de modifier le câblage
⚠️ Utiliser dissipateur approprié sur LM18200 (chauffe sous charge)
⚠️ Ne pas dépasser 3A en courant continu (protection à 2A se déclenche)
⚠️ Un seul décodeur sur voie de programmation
⚠️ Vérifier la polarité avant de connecter les locomotives
⚠️ Changer le mot de passe portail par défaut pour la sécurité
| Problème | Cause Possible | Solution |
|---|---|---|
| Portail inaccessible | D0 BAS au démarrage | S’assurer que D0 (broche Relais2) est tiré HAUT au démarrage |
| Impossible se connecter WiFi | Mauvais identifiants | Réinitialiser via portail ou reflasher |
| Z21 ne répond pas | Pare-feu bloque | Ouvrir port UDP 21105 |
| LCD ne fonctionne pas | Mauvaise adresse I²C | Essayer 0x27 ou 0x3F dans le code |
| Pas de lecture courant | ACS712 inversé | Vérifier orientation IP+ et IP- |
| Pas d’ACK DCC | Seuil trop haut | Ajuster DCC_ACK_THRESHOLD |
| Vitesse erratique | Bruit PWM | Ajouter condensateur aux bornes moteur |
| LED alim ne fonctionne pas | Mauvaise polarité | Vérifier anode LED + vers D3 |
| Relais ne commute pas | Connexion D0 | Vérifier connexion GPIO16 |
| F1 ne fonctionne pas | Pas en mode 3 rails | F1 fonctionne uniquement quand F0=ON |
Ce projet est sous licence MIT - voir le fichier LICENSE pour les détails.
✅ Contrôle WiFi (NOUVEAU v2.0)
✅ Test Multi-Modes
✅ Fonctions Spéciales
✅ Surveillance Avancée
✅ Fonctionnalités Sécurité
✅ Fonctionnalités Professionnelles
Créé avec ❤️ pour les Passionnés de Modélisme Ferroviaire
⭐ Mettez une étoile à ce projet si vous le trouvez utile ! ⭐