Auteur Sujet: DCC++ avec un ESP32  (Lu 25251 fois)

Didier44

  • Newbie
  • *
  • Messages: 43
    • Voir le profil
DCC++ avec un ESP32
« le: février 25, 2018, 05:05:30 pm »
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 source


Comme 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 internet

Je 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 locomotives

Je 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 IDE

Pour 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

« Modifié: février 25, 2018, 05:08:16 pm par Didier44 »

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3039
  • 100% Arduino et N
    • Voir le profil
Re : DCC++ avec un ESP32
« Réponse #1 le: février 25, 2018, 05:53:42 pm »
Merci Didier,

Voilà un compte-rendu très intéressant et très documenté.

Je suis convaincu que beaucoup de modélistes en herbe (si les graines ont été semées par les parents) ne jureront que pas les commandes de trains et autres accessoires via le WiFi de leur smartphone.

Mais si je compare aux jouets modernes comme le petit robot COZMO de Anki, c'est le robot qui est un point d'accès Wifi donc on n'a plus besoin de la box. La liaison wifi n'existe donc qu'entre le robot et le smartphone, ce qui est plus simple et plus sécurisé.

C'est donc une belle voie à explorer en espérant qu'une start-up française saura se positionner... avec succès.

Amicalement
« Modifié: février 25, 2018, 05:59:46 pm par Dominique »
Cordialement,
Dominique

Thierry

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 810
    • Voir le profil
Re : DCC++ avec un ESP32
« Réponse #2 le: février 25, 2018, 08:53:52 pm »
J'ai moi aussi jeté un oeil à ce code pour tenter d'en extraire la partie envoi de commandes DCC sur la voie afin de le mettre comme une option de ma bibliothèque DCCpp, mais je dois dire que comme tout est effectivement remanié, on y retrouve plus ses petits !

bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1081
  • HO avec DCC++
    • Voir le profil
Re : DCC++ avec un ESP32
« Réponse #3 le: février 26, 2018, 01:16:23 pm »
Vous parlez beaucoup du WiFi sur l'ESP 32 et avec raison. Mais n'oubliez pas que l'ESP 32 se pilote aussi en Bleutooth. Je vous assure qu'il y a là aussi une grande potentialité. Dans mon FabLab, quand je dis que je fais des montages avec WiFi, les 16-22 ans rigolent du "vieux". Ils pilotent tous leurs robots en Bluetooth !

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3039
  • 100% Arduino et N
    • Voir le profil
Re : Re : DCC++ avec un ESP32
« Réponse #4 le: février 26, 2018, 05:23:21 pm »
Dans mon FabLab, quand je dis que je fais des montages avec WiFi, les 16-22 ans rigolent du "vieux". Ils pilotent tous leurs robots en Bluetooth !

Exception : le Cozmo se pilote en wifi, il est serveur wifi comme une box et la connexion est ultra-simple avec son appli.
Cordialement,
Dominique

msport

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2217
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : Re : DCC++ avec un ESP32
« Réponse #5 le: février 26, 2018, 09:38:36 pm »
... l'ESP 32 se pilote aussi en Bleutooth. ...
Juste une question dont je ne fais qu'imaginer les implications : le bluetooth n'est-il pas limité à une liaison point-à-point ?
on ne peut appairer que deux devices ?
Cordialement

Didier44

  • Newbie
  • *
  • Messages: 43
    • Voir le profil
Re : DCC++ avec un ESP32
« Réponse #6 le: mars 05, 2018, 11:19:41 am »
Bonjour à tous,

J'ai trouvé cette démo très simple à mettre en oeuvre pour appliquer le bluetooth à l'ESP32
http://www.instructables.com/id/ESP32-BLE-Android-App-Arduino-IDE-AWESOME/.

L'auteur fournit le fichier .ino ainsi que le fichier .apk coté Android. Il fournit également le fichier qui a servi à généré l'application Andoid sur Thunkable (compatible avec AppInventor que j'utilise). Pour les non Android je crois qu'il y a une version de AppInventor pour IoS.
Vous aurez l'immense bonheur d'allumer la diode interne de votre ESP32 ;)
Je vais utiliser ce code pour transposer mon application Wifi DCC++ en bluetooth. Je vous en dirais plus dans un prochain post ou article.

msport: non le bluetooth n'est pas limité, il fonctionne sur le principe clients(plusieurs)/ serveur (dixit Google)

Avec l'ESP, il s'agit d'une version particulière du bluetooth dite BLE pour Bluetooth Low Energy, logique pour une utilisation possible en IoT.

Didier
« Modifié: mars 05, 2018, 11:25:35 am par Didier44 »

msport

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2217
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : DCC++ avec un ESP32
« Réponse #7 le: mars 05, 2018, 11:22:57 am »
Cool, comme certains disent ...
Cordialement