Bonjour à tous,
Au détour d’une visite sur le forum TrainBoard ou je me rends de temps en temps, j’ai découvert ce post récent (décembre 2017)
http://www.trainboard.com/highball/index.php?threads/dcc-esp32-base-station.112634/rédigé par Atani et qui s’intéresse à l’application de DCC++ sur les ESP, ces drôles de petites bêtes.
Dans ce post il est question de l’adaptation de DCC++ sur un ESP32 et donc plus d’Arduino. Juste une carte de puissance bien sur.
En fait le code a été profondément remanié mais reste compatible avec DCC++ puisque les ordres envoyés à l’ESP32 sont bien ceux de DCC++.
Ce projet, fonctionnel, est en cours de développement et la doc encore en cours de réalisation est dispersée sur le forum, github et le code source. Donc pas facile à mettre en oeuvre. De plus ce projet a été développé avec PlateformIO. Un IDE pour Arduino, plus complet mais plus difficile à mettre en oeuvre et que je ne maitrise pas encore correctement. Il s’agit d’une surcouche pour les IDE que sont Visual Studio Code (gratuit) et Atom (éditeur de code gratuit).
Pour ceux que cela pourrait intéressé je vous propose une synthèse de la mise en place (et en français!) avec adaptation pour Arduino IDE à la fin.
Téléchargement du sourceComme précisé dès le début du post d’Atani, vous trouverez le source sur github
https://github.com/atanisoft/DCCppESP32 .
Avant de l’utiliser il va falloir faire quelque manipulation assez simple.
Connexion internetJe ne rentrerais pas dans les détails techniques du code, mais il faut retenir que l’ESP32 va jouer le rôle d’un webserver et que l’on pourra communiquer avec lui par le biais d’une adresse locale (192.168.1.93 chez moi mais à vérifier chez vous, voir plus loin). En effet l’ESP32 est connecté à votre box internet, Atani a par ailleurs le projet de la faire fonctionner sans cette connection.
Il va donc falloir saisir votre SSID et mot de passe dans le fichier config.h
/////////////////////////////////////////////////////////////////////////////////////
//
// DEFINE WiFi Parameters
//
#define WIFI_SSID "votre SSID"
#define WIFI_PASSWORD "votre mot de passe"
CV des locomotivesJe vous disais plus haut que l’on va se connecter à l’ESP32 par le biais d’une adresse locale. A cette adresse se trouve une page web qui est le controler de la “base station” DCC++. Nous pouvons commander jusqu'à 10 locomotives et leurs différentes fonctions. De plus vous constaterez plus tard d’autres fonctionnalités.
Il vous faut aller dans le fichier data/index.html du projet et modifier à partir de la ligne 98, les numéros des CV des locomotives.
<div id="locoGroup">
<div class="row">
<label for="loco1">3</label>
<input type="radio" name="loco" id="loco1" value="">
<span id="loco1Info" class="clockdate">Idle</span>
</div>
<div class="row">
<label for="loco2">4</label>
<input type="radio" name="loco" id="loco2" value="">
<span id="loco2Info" class="clockdate">Idle</span>
</div>
<div class="row">
<label for="loco3">5</label>
<input type="radio" name="loco" id="loco3" value="">
<span id="loco3Info" class="clockdate">Idle</span>
</div>
<div class="row">
<label for="loco4">6</label>
<input type="radio" name="loco" id="loco4" value="">
<span id="loco4Info" class="clockdate">Idle</span>
</div>
<div class="row">
<label for="loco5">345</label>
<input type="radio" name="loco" id="loco5" value="">
<span id="loco5Info" class="clockdate">Idle</span>
</div>
<div class="row hideForHeight">
<label for="loco6">678</label>
<input type="radio" name="loco" id="loco6" value="">
<span id="loco6Info" class="clockdate">Idle</span>
</div>
<div class="row hideForHeight">
<label for="loco7">901</label>
<input type="radio" name="loco" id="loco7" value="">
<span id="loco7Info" class="clockdate">Idle</span>
</div>
<div class="row hideForHeight">
<label for="loco8">234</label>
<input type="radio" name="loco" id="loco8" value="">
<span id="loco8Info" class="clockdate">Idle</span>
</div>
<div class="row hideForHeight">
<label for="loco9">567</label>
<input type="radio" name="loco" id="loco9" value="">
<span id="loco9Info" class="clockdate">Idle</span>
</div>
<div class="row hideForHeight">
<label for="loco10">890</label>
<input type="radio" name="loco" id="loco10" value="">
<span id="loco10Info" class="clockdate">Idle</span>
</div>
</div>
Dans chaque ligne telle que celle-ci
<label for="loco1">3</label>
puis loco2 jusque loco10, vous devez insérer entre crochets le CV de vos machines. Il n’y a pas de nom, ni de gestion de cette liste. Le CV sert de nom à l’écran. Pas très facile à retenir cependant. Le projet est encore jeune.
Etape suivante il va falloir “transformer” ce fichier en un tableau de nombre dans un fichier .h pour l’insérer dans le code.
- compressez ce fichier index.html au format .gz (j’utilise 7zip qui le fait très bien). Attention pas de format .zip. Changer son nom en indexHtmlGz.gz (attention au majuscule)
- ensuite téléchargez le court programme bin2c ici https://sourceforge.net/projects/bin2c/. Il en existe d’autres versions y compris pour Mac. Ce programme va créer un fichier include contenant le fichier indexHtmlGz sous forme de tableau de nombres. Placez le dans le répertoire /src du projet
- ouvrez une fenêtre de commande (Power shell sous Windows 10). Allez dans le répertoire ou vous avez placé ce projet. Et tapez
bin2c -o index_html.h indexHtmlGz.gz - Ouvrez ce nouveau fichier index_html.h. Vous devez lire au début quelque chose comme ceci:
/* Contents of file indexHtmlGz.gz */
const long int indexHtmlGz_gz_size = 7977;
const unsigned char indexHtmlGz_gz[7977] = {
Remplacer indexHtmlGz_gz par indexHtmlGz et ajouter PROGMEM
/* Contents of file indexHtmlGz.gz */
const long int indexHtmlGz_size = 7977;
const unsigned char indexHtmlGz[7977] PROGMEM ={
Pour ceux qui utilise PlatformIO, il n’y a plus qu’à compiler et téléverser.
Les informations concernant la connection à la carte de puissance sont dans le fichier DCC++ESP32.cpp à partir de la ligne 88 (voir extrait ci-dessous) ainsi que sur le Wiki accessible sur Github.
Ceci est accompli sur l'ESP32 en connectant
le GPIO25 a l’entrée du Motor Shield PWM-A (broche 3 sur Arduino),
GPIO19 à l'entrée DIRECTION-A du Motor Shield (broche 12 sur Arduino),
GPIO23 à l'entrée PWM-B du Motor Shield (broche 11 sur Arduino),
GPIO18 à l'entrée DIRECTION-B du Motor Shield (broche 13 sur Arduino).J’ai effectué cette connection avec le motor shield Arduino.
Arduino IDEPour utiliser l’Arduino IDE:
Avant de téléverser, ouvrez le moniteur série afin de voir l’adresse IP de l’ESP32. C’est cette adresse qu’il vous faudra écrire dans la barre de votre navigateur sur n’importe quel appareil relié à votre box, y compris tablette bien sur. Sinon vous la trouverez par le biais du gestionnaire de votre box.
C’est un peu laborieux mais le résultat est intéressant.
Reste à savoir ce que pourra apporter comme bonne surprise le deuxième onglet du controler (cf photo ci-dessous).
Bonne programmation
Didier