DCCpp pour Arduino avec WiFi

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.

Ensuite j'ai construit plusieurs maquettes :

  • La première avec un module ESP8266 D1-Mini (pour quelques Euros) que j'ai installé sur un circuit imprimé posé sur un Arduino MEGA2560 classique. Cela permet d'ajouter le WiFi en recyclant un MEGA2560 qui était préalablement utilisé avec l'USB, par exemple.

  • Pour la seconde maquette j'ai utilisé une carte qui intègre le WiFi avec le MEGA : la carte MEGA WiFi R3. 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 < -45 dBm pour ne pas saturer la partie radio du routeur de votre Box. Cette valeur peut varier d'un routeur à l'autre. Après les tests effectués avec la carte de prototypage, elle sera avantageusement remplacée par un circuit imprimé.

Le circuit intégré AM26C31 et les divers connecteurs sont câblés sur un circuit imprimé, lui même embroché sur le MEGA. Les deux solutions fonctionnent très bien en utilisant le même code paramétré selon les options choisies.


Synoptique simplifié de ma centrale DCCppS88 en WiFi


La bibliothèque 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. 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 5 clients WiFi différents.

Je précise que cette bibliothèque peut lire 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". La même fonction S88 a été intégrée dans DCC++ par Xavier avec qui je l'ai co-écrite.

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

Photos du montage


Vue de la centrale DCC WiFi avec son afficheur LCD


Centrale DCC WiFi avec la carte MEGA2560 sous le circuit imprimé portant le D1-Mini-Pro. (version 1)


Centrale DCC WiFi avec la carte MEGA R3 WiFi sous la carte de prototypage (version 2)


Une centrale DCC en WiFi avec S88 pour une trentaine d'Euros + une alimentation 19V + PC. (version 1)


Hardware

J'utilise un Arduino Mega2560 WiFi R3 (version 2) sur lequel je place une carte fille pour câbler un driver RS485/7, SN75LBC176 ou AM26C31 qui transforme la sortie PWM en 2 polarités inverses afin d'alimenter les modules Booster L298N. 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 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. Cette alimentation peut alimenter le MEGA WiFi R3 qui utilise un régulateur de tension à découpage pour éviter de faire chauffer sa carte. Une alimentation de PC portable suffira dans la plupart des cas. On peut aussi utiliser un chargeur indépendant de 9VDC pour alimenter la carte MEGA WiFi. J'ajoute des modules MAX471 pour mesurer le courant sur les voies de programmation et principales. Coté pratique on doit connecter quelques fils et percer quelques trous pour assembler tous les éléments avec des vis afin de les solidariser ensemble. Tout ce materiel est en vente sur les sites de vente en ligne chinois pour quelques Euros.

Un circuit imprimé a été réalisé pour simplifier le câblage entre les differents éléments qui composent cette centrale DCC WiFi. Il se pose directement sur le MEGA2560 et les connecteurs sont prêt pour être reliés aux Boosters, aux bus S88-N et à la lecture des courants. Et plus encore... La version 1 est présentée ci-dessous.



Circuit imprimé à poser sur le MEGA2560

Ce circuit imprimé permet une utilisation de la centrale DCC avec différentes connexions vers le PC :
- version 0 avec un MEGA2560 en USB
- version 1 avec un MEGA2560 en WiFi en ajoutant un module D1-Mini comme sur la photo ci-dessus
- version 2 avec un MEGA R3 WiFi à la place du MEGA2560 sans module ajouté
- version 3 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 WiFi R3 pour la version 2

Dans le cadre orange ci-dessus, seule la rangée du haut est utilisée pour connecter un afficheur LCD et un bouton arrêt d'urgence.


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

Le Max471 ou équivalent mesure le courant continu qui alimente le Booster reflétant ainsi la consommation électrique du réseau DCC.

Attention : Beaucoup de MAX471 sont défectueux. Avant de les connecter, 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. Une solution de remplacement est à l'étude.




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.


Schémas du montage du prototype



Plan de câblage commun pour les 2 types de montage des prototypes


Schémas du montage du circuit imprimé final



Plan de câblage du circuit imprimé


Note : au lieu d'utiliser le booster L298N, il est possible d'utiliser le booster LMD18200 en adaptant son câblage :

Signaux MEGA J8 sur
circuit imprimé
Connexion LMD18200
Masse GND Pin 1 <==> GND
DCC Pin 12 Pin 3 ou 6 <==> DIR
ENable Pin 3 Pin 2 ou 7 <==> PWM
Masse GND Pin 1 <==> BRAKE

Firmware Arduino

ESP 8266 WiFi :

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_megawifi.zip (Nouvelle mise à jour version 6.1 disponible). 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 avec WiFi intégré. Puis indiquer le nom du réseau WiFi ainsi que le mot de passe auquel la centrale DCC sera connectée. 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 380402 octets (36%) de l'espace de stockage de programmes. Le maximum est de 1044464 octets.
- Les variables globales utilisent 31300 octets (38%) de mémoire dynamique, ce qui laisse 50620 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 sera 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.

Commande DCC :

J'installe le logiciel DCCpp avec option S88 qui se télécharge ici : la biliothèque 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 23750 octets (9%) de l'espace de stockage de programmes. Le maximum est de 253952 octets.
- Les variables globales utilisent 1306 octets (15%) de mémoire dynamique, ce qui laisse 6886 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 sera 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 !

Note : le code installé dans l'ESP8266 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. Tout se passe maintenant dans votre PC.


Rétro-signalisation S88

J'ai incorporé le programme maitre S88 dans la bibliothèque DCCppS88 décrite 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 la bibliothèque 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 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 04/11/2019. Mise à jour du 22/12/2020    

BB 25200