Centrale DCC32S88 avec un ESP32 WiFi

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 :

  • "WiFi DCC Dashboard", tableau de bord DCC en WiFi avec commande de locos et programmation des CV.
  • "DCC Mobile Controller", commande de locos DCC en WiFi.
  • "TCOwifi", commande graphique des aiguillages et des accessoires DCC + affichage S88 en WiFi.
  • "DCCpp_Cab", conduite de train DCC avec Smartphone Android en WiFi ou Bluetooth.
  • "CentraleDCC", gestion graphique de réseau ferroviaire DCC de J.M.D.
  • "CDM-Rail", gestion de réseau ferroviaire DCC en graphique.
  • "JMRI", gestion de réseau ferroviaire DCC.
  • "Rocrail", gestion de réseau ferroviaire DCC.

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

Photos du montage


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


Hardware

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.



Circuit imprimé de la centrale DCC32S88


Voici les principaux composants utilisés pour construire cette centrale DCC :

        
                 ESP32 TTGO-T1                                                               Carte SD Micro 16GB


AM26C31                               LM324N                                          LVC125                                   ACT125


Afficheur LCD 4x20 avec I2C, optionnel mais pratique                               L298N                                           RJ45 pour S88                  


    Bouton d'arrêt d'urgence de type NC                          Boitier en plastique                                                           Ventilateur

Avec 2 connecteurs RJ45 pour le bus S88-N :

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.


Schémas du montage de cette centrale DCC



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.


Firmware pour ESP32 WiFi

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 :

Rapport de compilation pour un ESP32 :

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.


Logiciels de commande

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


Rétro-signalisation S88

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.


Compatibilité avec les logiciels de commande de réseaux ferroviaires

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.

 PC 15/04/2021. Mise à jour du 15/08/2023    

BB 25200