Centrale DCCpp avec S88 pour Arduino, WiFi et Bluetooth

Avertissement : ces projets se compilent parfaitement avec la version 1.8.19 de l'IDE Arduino. La version 2.0.x a généré des erreurs à la compilation !

De nouveaux micro-controleurs bon marchés sont apparus récemment avec une interface WiFi mais avec peu de pattes d'entrées/sorties : la série Espressif. J'ai sélectionné un ESP8266 qui convient parfaitement comme interface WiFi entre le PC et notre Arduino MEGA, pour un petit prix. Il remplace avantageusement le câble de la liaison USB ou celui d'une liaison Ethernet filaire. De plus il fait office de serveur de fichiers en hébergeant tous les fichiers du logiciel qui conduit les trains en intégrant une mémoire Flash de 4 Mo, voire 16 Mo. J'ai parcouru Internet et analysé les modèles de serveur de fichiers en WiFi. Finalement, j'ai utilisé un exemple de réalisation que j'ai étendu aux besoins du modélisme ferroviaire pour développer une version personnelle : "WiFi DCC Dashboard", autrement dit : Tableau de bord DCC en WiFi. Ce logiciel libre associé avec ce générateur DCC en WiFi fournit une centrale de commande bon marché pour réseau ferroviaire DCC. Depuis, d'autres logiciels ont été créés dont TCOwifi pour commander les aiguillages et les accessoires, DMC pour commander simultanement 2 locos, etc...

La bibliothèque DCCppS88 pour Arduino MEGA2560 donne pleinement satisfaction à l'usage donc je l'ai utilisée. Pour réaliser l'interface WiFi intégrant un serveur de fichiers j'ai choisi un ESP8266. J'ai seulement ajouté du code dans l'ESP8266 pour gérer la transmission des données WiFi en utilisant aussi l'IDE Arduino. La communication entre le MEGA2560 et l'ESP8266 se fait en mode SERIAL.

Note : DCCppS88 ne gère pas l'option RailCom. De plus l'option RailCom réduit 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.

Ensuite j'ai construit plusieurs centrales DCC :

  • La première avec un circuit imprimé posé sur un Arduino MEGA2560 classique avec l'USB.

  • La seconde avec un module ESP8266 D1-Mini (pour quelques Euros) qui permet d'ajouter le WiFi et le Bluetooth à une centrale DCC. Je l'ai installé sur un circuit imprimé posé sur un Arduino MEGA2560 classique. Cela permet de recycler un MEGA2560 qui était préalablement utilisé avec l'USB, par exemple. C'est ma préférée.

  • Pour la troisième centrale j'ai utilisé une carte qui intègre le WiFi avec le MEGA : la carte MEGA R3 WiFi. Cette dernière conserve le même format et contenu que l'Arduino MEGA mais elle intègre en plus un ESP8266 ainsi qu'une antenne WiFi sur le circuit imprimé, le tout pour une dizaine d'Euros. On peut aussi lui ajouter une antenne externe par un connecteur U-FL implanté sur la carte. Cependant cette carte est plus sensible à l'environnement WiFi que le modèle D1-Mini. Il convient de ne pas être trop proche du routeur afin de conserver un RSSI < -55 dBm pour ne pas saturer la partie radio du routeur de votre Box. Cette valeur peut varier d'un routeur à l'autre.

Remarque : utiliser un clone du MEGA2560 peut induire un blocage de l'échange de données sur sa pin Tx à cause d'une résistance non conforme. Tx doit être reliée à l'interface USB par une résistance de 1k mais parfois elle ne fait que 50 Ohms ce qui bloque la transmission.


Après les tests effectués avec la carte de prototypage, celle-ci a été avantageusement remplacée par un circuit imprimé. Le circuit intégré AM26C31 et les divers connecteurs sont câblés sur un circuit imprimé superposé et embroché sur le MEGA. Les deux solutions fonctionnent très bien en utilisant le même code paramétré selon les options choisies. Leurs constructions nécessitent certaines compétences en électronique et en informatique qu'il ne faut pas négliger.


Synoptique simplifié de ma centrale DCCppS88 en WiFi


DCCppS88 permet de piloter plusieurs 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 intègré la lecture de 2 bus S88 (détails en bas de la page). La commande se fait par l'intermédiaire de fenêtres sur l'écran du PC/Tablette/Smartphone en WiFi qui communiquent avec le MEGA. L'ESP8266 sert d'interface WiFi et de serveur de fichiers devant le MEGA. 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'ESP8266 peut gérer simultanément 5 clients WiFi différents.

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, TCO, CDT31, JMRI, CDM-Rail, Rocrail, etc...

Photos du montage


Vue de la centrale DCC WiFi avec son afficheur LCD (configuration 2)


Vue de la centrale DCC WiFi avec son afficheur LCD (configuration 3)


Centrale DCC WiFi avec la carte MEGA2560 sous le circuit imprimé portant le D1-Mini. (configuration 2, ancien PCB)


Circuit imprimé en 3D de la centrale DCC WiFi (ancien PCB)


Une centrale DCC en WiFi avec S88. Le MEGA R3 WiFi se trouve sous le nouveau circuit imprimé (configuration 3)


Hardware

  • Un Arduino Mega2560 (configuration 1&2) sur lequel je place une carte fille pour installer le D1_Mini qui contient un ESP8266 WiFi plus quelques composants dont un driver AM26C31 qui transforme la sortie PWM en 2 polarités inverses afin d'alimenter les modules Booster L298N ou BTS7960.
  • ou
  • Un Arduino Mega2560 R3 WiFi (configuration 3) sur lequel je place une carte fille qui contient quelques composants dont un driver AM26C31 qui transforme la sortie PWM en 2 polarités inverses afin d'alimenter les modules Booster L298N ou BTS7960.

  • L'Arduino Mega est connecté avec TX0/RX0 à l'ESP8266 qui est relié en WiFi au PC.

    Une alimentation 19VDC/3A (ou plus) alimente les Boosters L298N ou BTS7960 qui fournissent le DCC, lesquels alimentent les rails. On peut aussi utiliser des Boosters LMD18200 qui ne nécessitent pas de AM26C31 mais ils sont plus chers. Une alimentation de PC portable suffira dans la plupart des cas.
    Il est recommandé d'utiliser un chargeur indépendant de 9 ou 12VDC pour alimenter le circuit imprimé afin d'éviter des perturbations en cas de court-circuit sur les rails. Coté pratique on doit connecter quelques fils et percer quelques trous dans un support pour 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 materiel est en vente sur les sites de vente en ligne pour quelques Euros.

    Un circuit imprimé a été réalisé pour simplifier le câblage entre les differents éléments qui composent cette Centrale DCCpps88 WiFi. Il se pose directement sur le MEGA2560 et les connecteurs sont prêt pour être reliés aux bus S88-N, au LCD, aux Boosters et à leur alimentation.
    Ce circuit imprimé est en stock à l'adresse e-mail située en bas de la page.



    Circuit imprimé à poser sur le MEGA2560, avec lecture des courants intégré.

    Ce circuit imprimé permet une utilisation de la centrale DCC avec différentes connexions vers le PC :
    - configuration 1 avec un MEGA2560 en USB
    - configuration 2 avec un MEGA2560 en WiFi en ajoutant un module D1-Mini comme sur la photo ci-dessus
    - configuration 3 avec un MEGA R3 WiFi à la place du MEGA2560 sans module ajouté
    - configuration 4 avec une interface Ethernet câblé du type W5100 (non décrite) que je déconseille parce qu'elle n'apporte pas la souplesse d'un vrai serveur WiFi

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


    MEGA 2560 pour la configuration 1 & 2


    MEGA R3 WiFi pour la configuration 3

    Le nouveau circuit imprimé de la centrale DCCppS88 avec lecture des courants à coté des Boosters.


    Des circuits intégrés utilisés et le module alimentation à découpage.


    Afficheur LCD 4x20 avec I2C, optionnel mais pratique.             D1-Mini pour la configuration 2 uniquement.  

    Attention : Beaucoup de MAX471 sont défectueux. Si vous continuez de les utiliser, vérifier avec un multimètre que la résistance lue entre RS+ et RS- soit proche de zéro Ohms. Sinon vous risquez d'endommager le MEGA. Ici, il est remplacé par la mesure de courant intégrée.



    Et un bouton d'arret d'urgence de type NC

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

    Bluetooth :

    La centrale DCCpps88 qui utilise un D1-Mini permet de brancher directement une nappe de 4 fils relié à un module HC-05 ou HC-06. A cette intention, une petite modification sur le circuit imprimé est décrite dans le document Bluetooth-modif.pdf. Le logiciel du projet DCCpp_controller_BTwifi permet d'activer le Bluetooth dans le fichier Config.h. Il se télécharge à la rubrique "Firmware" ci-dessous. Ensuite la connexion avec une application Bluetooth sur Smartphone s'effectue après avoir procédé à l'appairage des 2 appareils. Voir aussi "Logiciels de commande" sur PC en bas de cette page et dans la rubrique "Les logiciels" du menu.


    Schémas du circuit imprimé de la Centrale DCCppS88



    Plan de câblage du circuit imprimé



    Plan de câblage de la lecture des courants, supplément nouvelle version


    Note : Pour la voie principale, au lieu d'utiliser le booster L298N (2x2A), vous pouvez utiliser le Booster BTS7960 (43A) en insérant un fusible calibré et en adaptant son câblage : (Evitez le LMD18200 qui peut détruire les sorties du MEGA)


    Connexions du BTS7960

    Signaux
    (sorties)
    DCCppS88
    J8/J10/J11/J12
    circuit imprimé
    DCCppS88
    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 -----  <== Pin 5 R_IS
    Courant gauche -----  <== Pin 6 L_IS
    +5Vdc +5V ==> Pin 7 VCC
    Masse 0V Pin 1 <==> Pin 8 GND

    ! Ne pas connecter la pin GND avec le circuit imprimé version C !

    Firmware

    ESP 8266, WiFi et Bluetooth :

    Avant de commencer, préparons l'IDE Arduino pour pouvoir compiler le code du ESP8266 en suivant cette procédure.

    Installer le logiciel WiFi pour ESP8266 qui se télécharge ici : DCCpp_controller_BTwifi.zip. N'oubliez pas de lire le fichier d'installation. Ensuite éditer le fichier WifiConfig.h pour sélectionner la configuration choisie : D1-Mini ou MEGA R3 WiFi intégré. Puis indiquer le nom du réseau WiFi ainsi que le mot de passe auquel la centrale DCC sera connectée. Le MEGA R3 WiFi ne permet pas d'utiliser le Bluetooth avec l'ESP8266. Seul le D1-Mini permet d'utiliser une interface additionnelle Bluetooth HC-05 ou HC-06 reliée avec J13 modifié pour fournir le +5V. Dans le fichier WifiConfig.h une définition à commenter ou non avant compilation contrôle l'usage du Bluetooth qui pourra se connecter sur une application Android sur Smartphone. L'application DCCpp_Cab pour piloter les trains est disponible dans ma rubrique "Les logiciels". Enfin je compile les fichiers pour un D1-Mini ou pour un ESP8266 générique selon le choix ci-dessus et j'obtiens :

    Rapport de compilation pour un ESP8266 :

    COMM WiFi:
    - Le croquis utilise 393844 octets (37%) de l'espace de stockage de programmes. Le maximum est de 1044464 octets.
    - Les variables globales utilisent 32376 octets (39%) de mémoire dynamique, ce qui laisse 49544 octets pour les variables locales. Le maximum est de 81920 octets. (Les chiffres sont approximatifs)

    Je connecte l'ESP8266 sur une entrée USB du PC qui est automatiquement redirigé vers un port COMx et détecté par l'IDE Arduino. Après la compilation, je téléverse le code puis les fichiers data dans la Flash de l'ESP8266 et j'ouvre le Moniteur série associé à l'IDE Arduino. Quand le DEBUG est activé, on lis le rapport d'initialisation de l'ESP8266 envoyé par USB.

    Note : le code installé dans l'ESP8266 gère l'OTA donc les prochains téléchargements de l'ESP8266 pourront aussi se faire en WiFi.

    MEGA2560, commandes DCC :

    J'installe le logiciel DCCpp avec option S88 qui se télécharge ici : DCCppS88 pour Arduino et j'ouvre l'IDE d'Arduino. Ensuite j'édite le fichier DCCppS88.ino pour vérifier la configuration avec l'interface série de l'Arduino à 115200 bauds. Choisir les interfaces utilisées indiquées par les commentaires encadrés par *****. Enfin je compile les fichiers pour un MEGA2560 et j'obtiens :

    Rapport de compilation pour un Arduino Mega 2560 :

    COMM série:
    - Le croquis utilise 29750 octets (11%) de l'espace de stockage de programmes. Le maximum est de 253952 octets.
    - Les variables globales utilisent 1461 octets (17%) de mémoire dynamique, ce qui laisse 6731 octets pour les variables locales. Le maximum est de 8192 octets. (Les chiffres sont approximatifs)

    Je connecte l'Arduino sur une entrée USB du PC qui est automatiquement redirigé vers un port COMx et détecté par l'IDE Arduino. Après la compilation, je téléverse le code dans l'Arduino et j'ouvre le Moniteur série associé à l'IDE Arduino. Comme j'ai activé le DEBUG, je lis le rapport d'initialisation envoyé par l'Arduino et je peux déjà envoyer des commandes manuelles vers les locos qui réagissent immédiatement. Puis je ferme le Moniteur pour libérer le port COM. Important !

    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 dans la SPIFFS au format FAT32 et d'une capacité de 2.5 MB maximum. Les logiciels se trouvent dans le répertoire du projet : data.

    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 ou avec son nom mDNS 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 DCCpp pour générer DCCppS88 que j'utilise ici. En conséquence j'utilise un SEUL Arduino MEGA pour gérer tout mon réseau DCC : un seul et unique ! La rétro-signalisation est totalement intégrée dans DCCppS88 sans ralentir l'Arduino. Une trame de 512 bits maxi est lue en permanence par l'Arduino sur le bus S88-N en 100ms environ.

    Les données des capteurs S88 sont lues sur 2 entrées simultanément 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 à la fin 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'Arduino qui lui transmet en moins de 50ms, sans que l'Arduino MEGA ne soit ni perturbé ni ralenti dans son fonctionnement. Cependant à chaque changement d'état des capteurs, les dernières données lues sur le bus S88 sont envoyées à l'ESP8266 qui les transmet en WiFi au PC Maitre pour l'informer du changement.

    Cette fonction utilise 5 pins de l'Arduino : Reset, Ps/Load, Clock, DataL et DataR. Voir la page rétro-signalisation.


    *** Attention : l'utilisation du bus S88 avec d'autres logiciels n'a pas été testée en WiFi, ni mise au point. ***

     PC 4/11/2019. Mise à jour du 15/08/2023    

    BB 25200