Auteur Sujet: Réseau en Ethernet : Un controller pour piloter ses locos en DCC++ (et plus)  (Lu 19320 fois)

bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1081
  • HO avec DCC++
    • Voir le profil
Bonjour à tous,

J’ai ouvert ce nouveau sujet car il y a semble t’il un certain intérêt dans la communauté Locoduino pour la communication par Ethernet sur nos réseaux et somme toute peu (peut être rien) sur le site.

Ethernet n’est qu’une technologie. TCP/IP, c’est déjà un peu plus précis, c’est un protocole de communication entre différents appareils. Des ordinateurs, des tablettes et des smartphones et bien sûr nos petites cartes chéries pour peu qu’on y mette « à cheval » les shields appropriés : https://www.arduino.cc/en/Main/ArduinoEthernetShield

Et encore à l’intérieur de TCP/IP, HTTP. Là ça vous parle mieux, c’est quand votre navigateur consulte des pages HTML sur des serveur ou que parfois vous envoyez des informations quand vous remplissez des formulaires et appuyez sur le bouton « envoyer » Submit !

Nos Uno’s, Mega’s et autres peuvent se transformer en serveurs Web ; eh oui ! Modestes certes, mais très efficaces pour nos besoins en modélisme ferroviaire.

Ce fil est ouvert pour essayer de répondre si possible à toutes vos questions, mais il a aussi pour ambition de présenter des applications concrètes qui utilisent ce protocole.

Pour ma part, j’ai développé un controller de locomotives pour mon réseau et qui permet aussi de piloter les aiguillages. Visible en version démo

Si vous avez suivi les différents fils récents sur le forum, vous avez sans doute vu que ça s'agitait beaucoup autour de DCC++. C’est que c’est bigrement intéressant et prometteur. Dominique en particulier s’est « emparé » du sujet avec frénésie et il a raison je crois.

Pour ma part, mon ambition est d’adapter mon controller ci-dessus à DCC++ et vous faire un retour. Ce sera un exemple concret de mise en œuvre de Ethernet sur Arduino. Et vous verrez qu’au final, c’est beaucoup moins compliqué qu’il n’y parait.

Dans l’attente de vos retours et au plaisir de vous lire.

Christophe
« Modifié: janvier 03, 2017, 10:03:28 am par bobyAndCo »

bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1081
  • HO avec DCC++
    • Voir le profil
Réseau en Ethernet : Un controller pour piloter ses locos en DCC++ (et plus)
« Réponse #1 le: août 27, 2016, 12:35:13 am »
Bonjour à tous,

J’ai terminé l’adaptation de mon controller (HTML + Angular JS) dont je vous ai parlé il y a quelques jours et qui utilise maintenant la bibliothèque DCC++.

Toutes les commandes de tractions fonctionnent très bien. Toutes les fonctions aussi de F0 à F28. Ca a été pour moi l’occasion d’entendre des sons et des bruitages pour la première fois car j’utilisais jusque là CmdrArduino limitée à 12 + FL.

Toutes les modifications de valeurs pour les cv’s sont aussi possibles. Toutes mes locos sont maintenant pilotables et paramétrables via DCC++. Au passage, ça fonctionne parfaitement avec un LMD18200 comme cela a déjà été confirmé plusieurs fois.

Je vais maintenant m’intéresser à l’exploitation des données de consommation de courant et à la lecture et programmation sur la voie de programmation.

S’agissant d’une application basée sur le HTM, elle doit être hébergée sur un serveur web qui peut être  installé sur votre propre ordinateur. Il existe de très bons freewares.

Il paraît logique, quand on a développé un controller avec des technologies essentiellement issues du monde du web d’utiliser DCC++ en communication Ethernet avec le shield « ad hoc ». C’est là encore particulièrement simple à faire en modifiant quelques paramètres dans le code DCC++. Mais attention toute fois, si vous vous aventurez à utiliser cette bibliothèque en Ethernet, il manque du code !!! Gregg Berman n’a pas fini le travail. Au besoin, je les communiquerai à ceux qui en auraient besoin.

Et là en Ethernet, vous accédez à une autre dimension puisqu’il vous est possible de « jouer » avec un grand nombre de périphériques dont certains en wifi comme les smartphones ou les tablettes. Des terminaux pour piloter vos locos en famille ou entre amis, votre tableau d’aiguillage sur des écrans différents pour augmenter le confort d’utilisation.

Logique disais-je d’utiliser un shield Ethernet mais pas obligé puisque l’on peut aussi demander à un script en PHP sur le serveur web… de communiquer avec l’Arduino par le port série !

A votre disposition pour vous apporter toutes infos supplémentaires sur ce sujet.

A suivre...
« Modifié: août 27, 2016, 12:37:11 am par bobyAndCo »

DDEFF

  • Hero Member
  • *****
  • Messages: 760
    • Voir le profil
Bravo Christophe !

C'est effectivement impressionnant. :o

Il est clair que ça justifierait d'un article (au moins !).
Avec très peu de matériel (un Arduino+Shield Ethernet+LMD18200), on arrive à conduire plusieurs locos.

Comme on est sur un Arduino, on peut lui ajouter un gestionnaire de réseau (à voir comment on fait les échanges).

Denis
"Ce n'est pas le puits qui est trop profond, c'est ta corde qui est trop courte" (proverbe chinois)

bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1081
  • HO avec DCC++
    • Voir le profil
Bonjour Denis,

Je profite de ta question pour essayer de bien définir les choses car c’est à mon avis fondamental pour une bonne compréhension.

Il y a tout d’abord l’utilisation du HTML avec son langage de programmation, le Java Script (qui permet quand on appuie sur un bouton par exemple de déclencher une action).

Le HTML est à mon sens intéressant car il permet de réaliser des interfaces graphiques très esthétiques et facilement car il existe pléthore de bibliothèques de style, de boutons, d’images voir même de comportements.

Si on prend l’exemple d’un gestionnaire de réseau tel que nous le décrit Pierre dans son article très intéressant : « Un gestionnaire en C++ pour votre réseau », on peut imaginer que la « couche » HTML ne serve qu’à l’interface graphique. Quelques scripts de comportement derrière les boutons ou les images (qui peuvent être de zones interactives) et quelques méthodes pour échanger avec l’Arduino, et le tour est joué.

L’essentiel du programme est sur l’Arduino tel que par exemple nous le présente Pierre.  Il y a juste à programmer les échanges d’information entre l’interface graphique et l’Arduino selon le protocole choisi.

C’est le second point qui nécessite selon moi d’être bien compris. Aussi étonnant que cela puisse paraître, il est tout à fait possible d’avoir l’interface graphique en HTML, utilisée au travers de son navigateur web préféré sans pour autant utiliser le moindre shield Ethenet sur l’Arduino. Application graphique en HTML + Javascript sont totalement dissociables d’un protocole de communication particulier.

Nul besoin de réécrire l’application qui tourne (parfaitement) sur Arduino, simplement la communication.

D’un autre côté, on peut considérer l’Ethernet (je parle donc bien là de cartes Arduino avec leur shield) comme un bus de communication comme un autre, série, CAN, ou autres. On peut choisir ce canal d’échange pour moult raisons mais sans écrire une seule ligne en HTML ou Java Script. Les cartes échangent entre elles ou avec la centrale avec ce protocole comme elles auraient pu le faire avec un autre.

Donc, la réponse à ta question (qui n’en était pas une d’ailleurs :)) : Oui on peut lui ajouter un gestionnaire de réseau. Ma version personnelle en contient d’ailleurs un pour mes seuls aiguillages pour l’instant.

J’en ai profité pour préciser ces points car certains sont un peu effrayés d’avoir à tout « reconstruire » s’ils se lancent dans l’aventure HTML ou Ethernet. J’espère ainsi les rassurer et les inciter à explorer de nouvelles voies qui ne peuvent qu’enrichir leurs expériences.

Et pour être tout à fait complet, il est aussi possible d'écrire totalement des applications très puissantes en HTML + Java Script car le Java Script est un langage très performant orienté objet (hummm, c'est un délice). Il est donc capable de se substituer pour une bonne part au programme chargé habituellement sur l'Arduino et la réduire presque un un rôle de simple exécutant (envoyer un signal électrique pour activer un aiguillage, changer l'état d'un signalisation).

Bien à vous tous et bon WE,

Christophe