BB 25200

La gare de LORMEDY

 

H0

Le générateur DCCpp en WiFi

DCCpp pour Arduino

De nouveaux micro-controleurs bon marchés sont apparus récemment avec une interface WiFi mais avec peu de pattes d'entrées/sorties : les ESP. 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 le fil de la liaison USB et 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. 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.

La bibliothèque DCCppS88 pour Arduino donne pleinement satisfaction à l'usage donc je l'ai utilisée et j'ai seulement ajouté du code dans l'ESP8266 en utilisant l'IDE Arduino. Ensuite j'ai construit deux maquettes :

  • La première avec un ESP8266 D1-Mini que j'ai câblé sur une carte de prototypage posée sur un Arduino MEGA2560 classique pour quelques Euros. Cela permet d'ajouter le WiFi en recyclant un MEGA qui était préalablement utilisé avec l'USB, par exemple.

  • Pour la seconde maquette j'ai utilisé un module qui intègre le WiFi avec le MEGA : la carte MEGA WiFi R3. Cette dernière a le même format que l'Arduino MEGA mais elle intègre aussi 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. Cette remarque ne concerne pas le D1-Mini.

Le circuit intégré AM26C31 et les divers connecteurs sont câblés sur une carte de prototypage au même format et posée sur le MEGA. Les deux solutions fonctionnent très bien en utilisant le même code.


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


Photos du montage


Vue de la centrale DCC avec son afficheur LCD et son antenne WiFi


Une centrale DCC en WiFi avec S88 pour une trentaine d'Euros + une alimentation 19V + PC


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


Centrale DCC avec la carte MEGA2560 sous la carte de prototypage portant le D1-Mini. (version 1)


Hardware

J'utilise un Arduino Mega2560 WiFi R3 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.

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.  

Attention : Certains 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.


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



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


Plan de câblage additionnel pour la version 1 uniquement (D1-Mini)


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

MEGA                 LMD18200 (sans utiliser le AM26C31)

GND pin 14 ==> GND
DCC pin 12 ==> DIR
EN pin 3      ==> PWM
GND pin 14 ==> 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 20860 octets (8%) de l'espace de stockage de programmes. Le maximum est de 253952 octets.
- Les variables globales utilisent 730 octets (8%) de mémoire dynamique, ce qui laisse 7462 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 !


Logiciel 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 "Logiciel" avec WDD et 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 moins de 60ms.

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 15ms, 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 que WDD n'a pas été testée en WiFi, ni mise au point. ***

 PC 04/11/2019.     

Contact : Envoyer un e-mail    (Remplir le champ "adresse" avec le nom de la gare en minuscule sans guillemet)

  Texte, photos, conception et réalisation :  Lormedy © 2017-2020 visiteurs