![]() |
La gare de Lormedy |
H0 |
Avertissement : ce projet se compile parfaitement avec la version 1.8.19 de l'IDE Arduino. Sa version 2.0.x ne doit pas être utilisée car elle provoque des erreurs.
Les dernières versions des bibliothèques WiFi V2.0 provoquent aussi une erreur de compilation. Utilisez les versions 1.0 en attendant une adaptation du code.
Les différentes versions utilisées pour réussir ce projet sont contenues au début du fichier DCC32S88.h et
dans le gestionnaire de carte, utilisez ESP32 version 1.04 .
Voici une centrale DCC WiFi utilisant la bibliothèque DCCpp à laquelle j'ai ajouté la rétro-signalisation S88.
Elle gère les voies principales, la voie de programmation, la rétro-signalisation S88 et la commande des accessoires dont les aiguillages et les feux de signalisation.
Sa construction nécessite certaines compétences en électronique et en informatique qu'il ne faut pas négliger.
Elle utilise un seul microcontrôleur bon marché avec une interface WiFi de la société Espressif : un ESP32.
De plus cet ESP32 fait office de serveur de fichiers WiFi en hébergeant tous les fichiers des logiciels qui conduisent les trains et le TCO car il intègre un lecteur de carte SD de 4 à 32 Go au format FAT32.
J'ai utilisé ce serveur de fichiers WiFi que j'ai étendu aux besoins du modélisme ferroviaire en enregistrant tous les fichiers des logiciels qui commandent mon réseau ferroviaire.
Cette centrale DCC est autonome. Elle peut se commander à partir d'un navigateur sur PC ou Tablette ou avec une application Android sur Smartphone.
Centrale DCC32S88 WiFi (160mm x 65mm, profondeur 120mm)
Cette centrale DCC est compatible DCC++ avec les logiciels libres de gestion de réseau dont :
La bibliothèque DCCppS88 v1.4.2L que j'ai adaptée donne pleinement satisfaction à l'usage.
J'ai ajouté du code dans cette bibliothèque pour gérer plusieurs secteurs/districts, pour commander les signaux avec le mode adressage étendu,
la rétro-signalisation S88, etc...
Pour réaliser l'interface WiFi intégrant un serveur de fichiers le choix s'est arrêté sur un ESP32, un microcontrôleur bi-coeur avec une horloge à 240MHz,
4MB de Flash et un lecteur de carte SD-micro de 4 à 32GB : le module TTGO-T1.
Cette centrale DCC est compatible avec différents Boosters telle que Roco ou "CDE" en plus des Boosters traditionnels L298N 2x2A et LMD18200 1x3A.
RailCom : La bibliothèque DCCppS88 ne gère pas l'option RailCom. De plus l'option RailCom altère la tension disponible au niveau du décodeur et certains décodeurs (ESU) peuvent présenter des dysfonctionnements.
Dans ce cas désactiver l'option RailCom sur la loco peut résoudre cette anomalie.
Synoptique simplifié de la centrale DCC32S88 WiFi
DCC : La bibliothèque DCCppS88 associée à un ESP32 permet de piloter 41 locos en même temps, en adresse courte, longue et UM,
offre une sortie DCC vers les voies principales et une sortie DCC vers une voie de programmation indépendante.
J'ai ajouté une sortie vers les accessoires, une sortie Ext et une sortie de Réserve avec la lecture du courant pour chacun d'eux.
La commande se fait par l'intermédiaire de fenêtres sur l'écran du PC/Tablette/Smartphone en WiFi qui communiquent avec l'ESP32.
L'ESP32 sert d'interface WiFi et de serveur de fichiers accessible à partir d'un navigateur Internet comme Firefox, Chrome, etc...
Simultanément vous pouvez utiliser des tablettes ou des Smartphones en WiFi avec une "Box" Internet qui sert de routeur WiFi, en même temps qu'un PC.
L'ESP32 peut gérer 10 clients WiFi différents.
S88 : Cette bibliothèque DCCppS88 lit 2 bus S88 de 256 capteurs chacun avec 2 entrées RJ45 : DataL et DataR.
Ce sont 2 ports S88 distincts pour simplifier le câblage des grands réseaux.
Cette fonction S88-N a été testée avec un module RM-GB-8-N de Littfinski DatenTechnik et avec mes modules S88-N-16E décrit dans la page "Rétro-signalisation".
Cette bibliothèque DCCppS88 avec la lecture du bus de rétro-signalisation S88 est compatible avec les logiciels de commande de réseaux ferroviaires
tel que WDD, DMC, TCO, CDT31, CentraleDCC, JMRI, CDM-Rail, Rocrail, etc...
Gros plan sur l'afficheur LCD de la centrale DCC WiFi
- La première ligne indique le nom de la Centrale DCC suivi de la révision logicielle de la bibliothèque DCCppS88.
- La deuxième ligne indique l'adresse IP WiFi de la Centrale DCC.
- La troisième ligne indique les commandes DCC envoyées par le client numéroté.
- La quatrième ligne indique les retours de la Centrale DCC dont le S88.
Après les tests effectués avec une carte de prototypage, celle-ci est avantageusement remplacée par un circuit imprimé professionel.
Les circuits intégrés et les divers composants sont câblés sur le circuit imprimé qui porte l'ESP32 TTGO-T1.
Centrale DCC32S88 avec ESP32 WiFi sur le circuit imprimé et 2 Boosters intégrés.
Le groupe de LEDs à droite se place sur la face avant du boitier. Il est relié à la carte principale par les connecteurs J9/J14 et un câble Dupont à 7 fils.
Centrale DCC WiFi avec un ESP32, vue de face en 3D
Vue arrière de la centrale DCC en WiFi avec S88, pour quelques dizaines d'Euros + une alimentation
Le circuit imprimé porte un ESP32 et toute la connectique nécessaire. Un AM26C31 transforme la sortie PWM avec 2 polarités inverses afin d'alimenter les modules Booster L298N et Cie.
Un LM324 assure la mesure du courant de 4 Boosters.
Cette carte nécessite 2 alimentations externes ; une alimentation 19VDC/6A (ou plus) pour alimenter les Boosters qui fournissent le DCC, lesquels alimentent les rails
et une alimentation 12VDC/2A pour alimenter la carte électronique afin de lui éviter un reboot intempestif en cas de court-circuit sur les rails.
Une alimentation 19VDC de PC portable suffira dans la plupart des cas associée à un petit chageur 12VDC.
Le 12VDC alimente un régulateur de tension à découpage (pour éviter de faire chauffer la carte) qui produit du 5V.
La mesure des courants sur les voies principales et de programmation est assurée par la circuiterie implantée directement sur le circuit imprimé.
Coté pratique on doit connecter quelques fils et assembler tous les éléments avec des vis afin de les solidariser ensemble.
Pour interconnecter ces éléments entre eux, je recommande d'utiliser des fils groupés dans un seul connecteur Dupont pour une meilleure stabilité mécanique des connexions.
Tout ce matériel est en vente sur les sites de vente en ligne (Aliexpress) pour quelques Euros.
Cette centrale DCC dispose de connecteurs externes vers : les voies principales et de programmation en DCC, un Booster "CDE" du commerce, d'autres Boosters, 2 bus de rétro-signalisation S88,
un arrêt d'urgence, un bus I2C, un bus SPI, le bus XpressNet optionnel en prévision et une sortie est réservée pour commander des NeoPixels dont le code reste à écrire.
Les options qui partagent les mêmes ressources s'excluront mutuellement.
Elle prend place dans un boitier en plastique avec un ventilateur latéral pour extraire la chaleur dissipée par les Boosters intégrés.
Le circuit imprimé a été réalisé pour simplifier le câblage entre les différents éléments qui composent cette centrale DCC WiFi.
Ce circuit imprimé est en stock à l'adresse e-mail située en bas de la page.
ESP32 TTGO-T1 Carte SD Micro 16GB
AM26C31 LM324N LVC125 ACT125
Afficheur LCD 4x20 avec I2C, optionnel mais pratique L298N RJ45 pour S88
Adieu aux forêts de fils qui partent de l'Arduino, un simple câble RJ45 suffit. Les infos des capteurs de position des trains sur les cantons seront rassemblées sur place par une carte de rétro-signalisation. Puis elles sont transmises par le câble RJ45 vers la carte suivante et ainsi de suite le long du réseau jusqu'au MEGA WiFi. Pas besoin de boitier d'interface supplémentaire, tout est inclus. Le câble RJ45 du bus S88-N télé-alimente aussi les cartes, donc pas besoin d'alimenter séparément les cartes de rétro-signalisation. Sur le bus S88-N, le logiciel permet le mélange des cartes à 8 entrées avec celles à 16 entrées.
Plan de câblage du circuit imprimé 1/3
Plan de câblage du circuit imprimé 2/3
Plan de câblage du circuit imprimé 3/3
Connexions du L298
Signaux DCC32S88 (sorties) |
J16/J17/J18 circuit imprimé DCC32S88 |
Connexion |
L298 (entrées) |
Enable Main/prog/Ext/Réserve |
Pin 2 | ==> | ENA |
DCC | Pin 3 | ==> | IN1 |
DCC/ | Pin 4 | ==> | IN2 |
DCC/ | Pin 5 | ==> | IN3 |
DCC | Pin 6 | ==> | IN4 |
Enable Main/prog/Ext/Réserve |
Pin 7 | ==> | ENB |
Note : Pour la voie principale, au lieu d'utiliser le booster L298N (2x2A), utilisez le Booster BTS7960 (43A) en insérant un fusible calibré et en adaptant son câblage : (N'utilisez pas le LMD18200 qui peut détruire les sorties du MEGA)
Connexions du BTS7960
Signaux DCC32S88 (sorties) |
J16/J17/J18 circuit imprimé DCC32S88 |
Connexion |
BTS7960 (entrées/sorties) |
Non du signal |
DCC | Pin 3 ou 6 | ==> | Pin 1 | RPWM |
DCC/ | Pin 4 ou 5 | ==> | Pin 2 | LPWM |
Enable Main | Pin 2 ou 7 | ==> | Pin 3 | R_EN |
Enable Main | Pin 2 ou 7 | ==> | Pin 4 | L_EN |
Courant droit | inutilisé | <== | Pin 5 | R_IS |
Courant gauche | inutilisé | <== | Pin 6 | L_IS |
+5Vdc | +5V | ==> | Pin 7 | VCC |
Masse 0V | inutilisé | <==> | Pin 8 | GND |
Il ne faut pas cabler la Masse/GND pour les signaux de commande. Celle-ci passe par l'alimentation du Booster.
L'intégration de ce dernier booster n'était pas prévue dans ce boitier mais reste possible en utilisant des entretoises de 25 à 35mm.
Avant de commencer, préparons l'IDE Arduino pour pouvoir compiler le code du ESP32 en suivant
cette procédure.
Puis installez le logiciel WiFi pour ESP32 qui se télécharge ici : DCC32S88.zip
N'oubliez pas de lire le fichier d'installation.
Ensuite éditer le fichier config.json qui se trouve dans le répertoire SDcard pour indiquer les paramètres WiFi de votre Box ou routeur dans la rubrique "wifi".
Indiquer le nom du réseau WiFi ainsi que le mot de passe auquel la centrale DCC sera connectée.
Enfin compiler les fichiers pour un ESP32 pour obtenir :
COMM WiFi:
- Le croquis utilise 980498 octets (74%) de l'espace de stockage de programmes. Le maximum est de 1310720 octets.
- Les variables globales utilisent 44832 octets (13%) de mémoire dynamique, ce qui laisse 282848 octets pour les variables locales.
Le maximum est de 327680 octets. (Les chiffres sont approximatifs)
Connecter l'ESP32 sur une entrée USB du PC qui sera automatiquement redirigé vers un port COMx et détecté par l'IDE Arduino.
Après la compilation, téléverser le code puis les fichiers data dans la Flash de l'ESP32 et ouvrir le Moniteur série associé à l'IDE Arduino.
Quand le DEBUG est activé le rapport d'initialisation de l'ESP32 envoyé par USB. Le résumé du déroulement du Boot s'affiche aussi sur l'écran LCD.
Note : le code installé dans l'ESP32 ne gère pas le SPIFFS.
Note : le code installé dans l'ESP32 gère maintenant l'OTA donc les prochains téléchargements pourront aussi se faire en WiFi.
Cette centrale DCC accepte toutes les commandes compatibles générées par DCC++, DCCpp et DCCppS88.
La suite se trouve dans le menu "Logiciels" avec WDD,
DMC et TCOwifi.
Ces logiciels sont copiés sur une carte SD micro au format FAT32 et d'une capacité de 4 GB à 32 GB maximum, class 10 maximum.
Les logiciels se trouvent dans le répertoire du projet : SDcard.
Cette carte SD micro s'insère en dessous du connecteur USB de la carte TTGO-T1.
Tout se passe maintenant dans votre PC.
Ouvrez votre navigateur préféré et connectez-vous à l’adresse IP que vous a attribuée votre routeur DHCP en ajoutant ".local".
Un menu apparait dans lequel vous sélectionnerez le logiciel que vous souhaitez utiliser.
Cette centrale DCC est compatible DCC++ avec les logiciels libres de gestion de réseau dont :
*** Attention : l'utilisation du bus S88 avec d'autres logiciels non cités dans cette page n'a pas été testée en WiFi, ni mise au point. ***
J'ai incorporé le programme maitre S88 dans la bibliothèque DCCppS88 décrite ici.
La rétro-signalisation est totalement intégrée dans la bibliothèque DCCppS88 sans ralentir l'ESP32.
Une trame de 512 bits maxi est lue en permanence par l'ESP32 sur le bus S88-N toutes les 100 millisecondes environ.
Les données des capteurs S88 sont lues simultanément sur 2 entrées pour ne former qu'un seul buffer,
les données DataL sont rangées au début du buffer et les données DataR sont rangées dans la deuxième moitié du buffer.
Cette configuration permet l'utilisation de 2 bus S88-N, un à gauche et un à droite ayant la même taille et limité à 256 capteurs maximum chacun.
A la demande du PC qui contrôle le réseau, celui-ci lit jusqu'à 10 fois par seconde les paquets de données recueillies sur
le bus S88 par l'ESP32 qui lui transmet en quelques millisecondes.
Cependant à chaque changement d'état des capteurs, les dernières données lues sur le bus S88 sont envoyées au PC pour l'informer des changements.
Cette fonction utilise 5 pins de l'Arduino : Reset, Ps/Load, Clock, DataL et DataR. Voir la page rétro-signalisation.
Les commandes DCC++ sont toutes reconnues par cette bibliothèque et utilisées par les logiciels qui contrôlent vos trains.
*** Attention : l'utilisation du bus S88 avec d'autres logiciels que WDD, TCOWiFi ou CDM-Rail n'a pas été téstée en WiFi, ni mise au point. ***
La commande DCC utilisée pour lire le bus S88 avec WDD, CDT31, TCOWiFi ou CDM-Rail est décrite ci-dessous :
Y N F avec N = groupes de 8 capteurs à lire sans dépasser 64 (2x32x8=512)
(pour calculer le nombre N, prenez le plus grand nombre de groupes de 8 capteurs que vous avez connectés sur l'un des 2 connecteurs
du bus S88 et multipliez par 2. Exemple 3 à gauche et 1 à droite : N = 3 x 2 = 6)
F = 0 pour une réponse en binaire (msb first),
La réponse sera y 00001010000101000111010000......................................00
F = 1 pour une réponse en hexadecimal 4 fois plus rapide utilisé par CDM-Rail. (LSB first)
La réponse sera y 0A0147405801CE..40
F = 2 pour une réponse en hexadecimal pur, 7 fois plus rapide utilisé par CDT3x. (MSB first)
La réponse sera y XXXXX......
F = 3 pour une réponse du type SENSOR utilisé par JMRI
La réponse sera Q ID si le capteur est actif (1), q ID si le capteur est inactif (0). ID est le muméro du capteur.
En cas de commande non reconnue et selon le type d'erreur, les réponses sont :
X Bad Argument count
X Bad Argument value
Note : si le bus S88 est totalement déconnecté, tout les bits lus sont à 0 car une résistance pulldown est connectée sur chaque entrée S88-DATA.
Note : si vous lisez des modules esclaves qui ne sont pas connectés, les bits correspondants seront à 0. Si vos modules réagissent différement, prendre un connecteur RJ45,
placer une résistance pulldown de 1 à 10k entre S88-DATA (pin 2) et la masse (pin 3 et 5) et insérer ce connecteur RJ45 dans l'entrée libre du dernier module.
La commande DCC utilisée pour lire le bus S88 avec Rocrail ou JMRI est décrite ci-dessous :
Q avec 64 groupes de 8 capteurs à lire initialisés (2x32x8=512)
La réponse est du type SENSOR utilisé par JMRI et Rocrail.
La réponse sera Q ID si le capteur est actif (1), q ID si le capteur est inactif (0). ID est le muméro du capteur.
En cas de commande non reconnue et selon le type d'erreur, les réponses sont :
X Bad Argument count
X Bad Argument value
Note : si le bus S88 est totalement déconnecté, tout les bits lus sont à 0 car une résistance pulldown est connectée sur chaque entrée S88-DATA.
Note : si vous lisez des modules esclaves qui ne sont pas connectés, les bits correspondants seront à 0. Si vos modules réagissent différement, prendre un connecteur RJ45,
placer une résistance pulldown de 1 à 10k entre S88-DATA (pin 2) et la masse (pin 3 et 5) et insérer ce connecteur RJ45 dans l'entrée libre du dernier module.
JMRI : L'utilisation du bus S88 avec JMRI est expliquée sur le site de Locoduino
dont j'ai extrait le Mode d'emploi en PDF.
J'ai implémenté la fonction S88 dans la bibliothèque DCCppS88 pour être compatible avec JMRI. Je fourni les fichiers modifiés
"S88_Sensor_Scan.py" et "SerialClose.py"
que vous devrez utiliser avec JMRI en les plaçant dans votre répertoire "jython". Il faut les éditer pour indiquer le nom de votre port COM ==> USB.
La valeur par défaut est "COM5", elle se trouve vers la fin des 2 fichiers. Vous devez remplacer cette valeur par votre port COMn. La communication Tx/Rx se fait à 115200 bauds.
Rocrail : L'utilisation du bus S88 avec Rocrail est expliquée dans le
Mode d'emploi en PDF.
La fonction S88 de la bibliothéque DCCppS88 est compatible avec Rocrail. La communication Tx/Rx se fait à 115200 bauds.