LOCODUINO

Piloter son Arduino avec son navigateur web et Node.js

Piloter son Arduino avec son navigateur web et Node.js (4)

.
Par : bobyAndCo

DIFFICULTÉ :

Cet article sera le dernier de la série mais n’en sera pas moins intéressant puisque nous vous proposons maintenant un contrôleur de locomotives totalement opérationnel sur la base de DCC++. C’est une solution clef en main que même les moins expérimentés d’entre vous pourrons utiliser en respectant bien la marche à suivre. Cela vous obligera au besoin à revoir les articles précédents car nous ne reviendrons pas sur les thèmes déjà développés.

Un contrôleur USB/série, Ethernet et WiFi pour DCC++

Dans un premier temps, nous allons voir comment piloter notre Arduino directement relié au port USB/Série de notre ordinateur. C’est la première des possibilités offertes par DCC++ sur un UNO ou sur un MEGA. Elle correspond au réglage COMM_INTERFACE 0 du fichier config.h de DCC++

/////////////////////////////////////////////////////////////////////////////////////
//
// DEFINE COMMUNICATIONS INTERFACE
//
//  0 = Built-in Serial Port
//  1 = Arduino.cc Ethernet/SD-Card Shield
//  2 = Arduino.org Ethernet/SD-Card Shield
//  3 = Seeed Studio Ethernet/SD-Card Shield W5200

#define COMM_INTERFACE   0

Nous ne parlons donc pas de liaison Ethernet ni même Wifi dans ce cas entre votre ordinateur et votre Arduino. Pourtant, avec cette configuration, il vous sera tout de même possible de piloter votre Arduino en WiFI avec votre smartphone, votre tablette ou un autre ordinateur. En fait, vous vous connecterez avec ces appareils en WiFi avec l’ordinateur qui héberge Node.js et Node.js va ensuite communiquer en USB/Serial avec l’Arduino. Cependant, nous verrons que cette configuration nous limite si nous voulons faire de la programmation de CV.

Dans la seconde configuration, votre Arduino est relié par un câble Ethernet à votre réseau domestique et vos smartphones, tablettes ou ordinateurs se connectent en WiFi au réseau domestique. Les performances de débit sont alors meilleures et les fonctions de lecture et programmations de CV sont pleinement opérationnelles.

C’est donc la configuration COMM_INTERFACE 1 ou 2 ou 3 selon votre carte Ethernet.

JPEG - 93.4 kio

Voici une petite vidéo qui montre l’utilisation du contrôleur sur un smartphone et sur une tablette.

https://www.youtube.com/watch?v=kRd...

En préambule et pour votre confort, nous vous indiquons que vous pouvez agrandir les images et les photos en cliquant dessus.

Ce dont vous aurez besoin :

Tous les fichiers utilisés dans cet article sont téléchargeables ici :

Télécharger

Il vous faudra aussi une configuration opérationnelle de DCC++ Base Station. Pour plus de précisions, reportez-vous à l’article : Réalisation de centrales DCC avec le logiciel libre DCC++ (3).

Vous devrez également disposer d’une version originale de DCC++ téléchargeable ici. Toute version précédente modifiée risque de ne pas être compatible.

Précision importante : Si vous faites les installations par défaut de Node.js et de tous les modules, ceux-ci seront placés dans le répertoire usr ou user de votre ordinateur au niveau le plus élevé de la hiérarchie de votre répertoire personnel. Si vous déplacez des dossiers ou des fichiers, notez que vous devrez en tenir compte dans vos chemins d’accès. Par exemple, si vous avez placé vos fichiers dans un dossier locoduino, le script de lancement sera maintenant : node locoduino/dccpp_node.js et non pas : node dccpp_node.js

PNG - 136.5 kio

Exemple de configuration avec un Arduino MEGA et un shield Ethernet relié directement à la box.

 

Le sketch ARDUINO de DCC++ Base Station nécessite quelques paramétrages. C’est dans le fichier Config.h que l’on sélectionne la communication par le port série ou par Ethernet. Ligne 34 : #define COMM_INTERFACE à 1, 2 ou 3 selon votre shield ou 0 si vous utilisez le port série.

Si vous souhaitez relier votre Arduino par Ethernet à votre réseau comme figuré ci-dessus, vous décommenterez #define IP_ADDRESS et vous profiterez pour donner au shield Ethernet l’adresse IP 192.168.1.200 (ou une autre adresse compatible avec votre réseau local).

Vous vous assurerez également que #define ETHERNET_PORT est aussi décommenté et a bien pour valeur 2560.

/////////////////////////////////////////////////////////////////////////////////////
//
// DEFINE COMMUNICATIONS INTERFACE
//
//  0 = Built-in Serial Port
//  1 = Arduino.cc Ethernet/SD-Card Shield
//  2 = Arduino.org Ethernet/SD-Card Shield
//  3 = Seeed Studio Ethernet/SD-Card Shield W5200

#define COMM_INTERFACE   0

/////////////////////////////////////////////////////////////////////////////////////
//
// DEFINE STATIC IP ADDRESS *OR* COMMENT OUT TO USE DHCP
//

//#define IP_ADDRESS { 192, 168, 1, 200 }
//#define SUBNET{ 255, 255, 255, 0 }

/////////////////////////////////////////////////////////////////////////////////////
//
// DEFINE PORT TO USE FOR ETHERNET COMMUNICATIONS INTERFACE
//

//#define ETHERNET_PORT 2560

/////////////////////////////////////////////////////////////////////////////////////

Au besoin, reportez-vous aux nombreux articles sur Locoduino traitants de DCC++.

Vous pouvez également si vous le souhaitez utiliser la bibliothèque DCCpp de Thierry dont vous trouverez la présentation ici : Bibliothèque DCCpp
Vous utiliserez alors le mode TextCommand de cette bibliothèque. Le fonctionnement présenté ici est identique quelque soit le choix de la bibliothèque.

Node.js :

Node.js est encore et toujours le cœur du système que nous vous présentons ici. Mais nous sommes allés plus loin puisque les deux modes de connexions, USB/série et Ethernet sont maintenant disponibles et peuvent être choisis très facilement.

PNG - 57.5 kio

Ligne 5 du fichier dccpp_node.js, il vous suffira d’écrire : var conx_serial = true; si vous souhaitez une liaison série et var conx_serial = false; si vous souhaitez une connexion Ethernet avec votre configuration DCC++ Base Station

Pour l’installation et les réglages de Node.js, reportez-vous au premier article. Assurez-vous que les modules sont bien installés :

var http = require('http');
var fs   = require('fs');
var path = require("path");
var url  = require("url");
var io = require('socket.io')
var SerialPort = require('serialport');
var ip = require('ip');

Par rapport aux exemples précédents, vous aurez à installer en plus les modules net : var net = require('net'); et ip : var ip = require('ip');

net permet la communication par Ethernet entre Node.js et l’Arduino. Les syntaxes de programmation sont rigoureusement similaires, ainsi, arduinoSerial.write(msg) dans un cas ou arduinoTcp.write(msg) dans l’autre. Nous ne développerons donc pas ce point largement évoqué dans les articles précédents.

ip nous permettra de connaître aisément l’adresse IP du serveur Node.js.

PNG - 53.9 kio

Notez la fonction ligne 118 qui permet d’écrire des données dans un ou plusieurs fichiers sur votre disque dur directement à partir de votre navigateur. Nous utiliserons cette fonction pour sauvegarder les modifications de nos fichiers de locomotives par exemple.

Lancer Node.js à partir du terminal (Mac) ou de l’invité de commande (PC) :

Voilà pour les quelques informations spécifiques liées à Node.js pour notre application de contrôleur de locomotives. Il ne reste plus qu’à lancer notre serveur à partir de notre terminal (Mac) ou de notre invité de commande (PC) en entrant simplement : node dccpp_node.js.

Selon que vous avez choisi la liaison USB/série, vous devez avoir dans votre terminal un message de type :

PNG - 33.4 kio

Ou alors, si vous avez choisi la liaison Ethernet :

PNG - 38.1 kio

Sinon, vérifiez que vous n’avez pas laissé la fenêtre du moniteur série de l’IDE d’Arduino ouverte et que toutes vos configurations sont bonnes.

Ouvrez le fichier javascript controller_4.2.js et modifiez à la ligne 105 l’adresse IP par celle de l’ordinateur qui héberge Node.js :

$scope.socket = io.connect('http://192.168.1.37:8080/'); A adapter à votre configuration.

Si ces différents points vous posent la moindre difficulté, n’hésitez pas à (re)lire l’article 1

Lancez maintenant votre navigateur puis saisissez l’URL :

http://localhost:8080/controller_dccpp_node/controller.html

ou encore, en adaptant l’IP à votre cas :

http://192.168.1.37:8080/controller_dccpp_node/controller.html

L’IP, c’est celle de votre ordinateur qui héberge aussi Node.js. localhost dans le premier cas remplace l’IP de votre propre machine. Mais cela ne fonctionne que si navigateur et serveur sont lancés sur la même machine. Nous verrons que lorsque l’on se connectera avec un smartphone ou une tablette, localhost ne fonctionnera plus !

Si tout s’est bien passé, vous devriez avoir un bon affichage sur votre navigateur et cela sera également confirmé dans le terminal par : Connection socket : Ok

PNG - 40.4 kio

L’utilisation du contrôleur :

PNG - 15 kio

Dans la partie haute de l’écran à partir de la gauche, une petite flèche qui permet de déployer différentes fonctions utilitaires et quelques paramétrages.

Un bouton full screen qui rend l’affichage plus agréable.

Un bouton e-Stop, c’est une fonction normalisée par le NMRA, qui permet l’arrêt net de la locomotive sélectionnée (et non pas toutes les locomotives, mais telle est la norme). Si vous souhaitez tout arrêter (ou mettre sous tension), il vous reste le bouton power.

Enfin, un espace de logs où s’afficherons les informations renvoyées par DCC++. Le temps d’affichage des logs se règle juste en dessous. Par défaut, la valeur est de 3000 ms, soit 3 secondes.

PNG - 24.3 kio

Au-dessus, l’adresse IP du serveur Node.js avec son port. Absolument nécessaire sinon l’application ne saura pas où envoyer ses commandes.

Puis un bouton bleu "lecture de CV’s" sur lequel nous reviendrons plus tard en détail.

PNG - 64.2 kio

En dessous, les fonctions de sauvegarde. Tout ceci est important à comprendre pour tirer le meilleur parti de votre application.

L’activation du localstorage : Le localstorage est une mémoire interne à votre navigateur. Si l’option est activée (par défaut), toutes les modifications apportées à la description de vos locomotives, réglages de CV’s etc.. seront sauvegardés dans cette mémoire. A l’ouverture de l’application, c’est plus rapide de lire cette mémoire que les fichiers sur disque. L’enregistrement dans le locastorage se fera automatiquement à chaque fois que vous chargerez la page ou quitterez l’application (si l’option est activée). Il vous est aussi possible à tout moment de sauvegarder avec l’option Enregistrer dans le localstorage … ou encore d’effacer localstorage.

Charger les locomotives à partir du disque vous permet de remplacer toutes les données par celles contenues dans le fichier locos.json dans le dossier de votre application sur le disque. Attention, l’opération est irréversible.

Enfin, enregistrer toutes les données sur disque stocke les données actuelles de votre application dans les fichiers sur le disque. Si vous n’utilisez que votre navigateur, cela ne constituerait au mieux qu’une forme de sauvegarde. Mais si vous utilisez d’autres périphériques (WiFi ou non), n’oubliez pas que ce sont ces fichiers sur disque qui sont lus et donc, si vous ne les avez pas mis à jour, ils ne seront pas disponibles pour les autres périphériques. Rassurez-vous, il ne sera jamais trop tard, vous enregistrez sur votre contrôleur principal et vous rechargez la page sur votre périphérique.

Les fichiers de paramétrage sont disposés dans le dossier config de votre répertoire controller_dccpp_node.

PNG - 175.5 kio

Activons à nouveau la flèche en haut à gauche de l’écran pour refermer cette section et y voir plus clair. Normalement, seules les icônes des locomotives apparaissent en plus des entêtes de sections.

Dans l’entête des locomotives, la flèche à droite permet comme tout à l’heure d’afficher/masquer la section.

PNG - 91.8 kio

A droite, vous avez deux hyperliens : Icônes et Liste. Cliquez dessus, ils vous donnent accès à deux formes d’affichage différentes. L’affichage en liste affiche des informations et fonctions supplémentaires comme la corbeille rouge à droite de chaque ligne qui permet de supprimer des locomotives.

PNG - 240.8 kio

Notez aussi dans l’entête, le signe + en vert qui vous permet d’ajouter manuellement une locomotive.

Quand on clique sur une icône de locomotive ou sur une ligne, le détail de la locomotive concernée s’affiche dans la section au-dessous. Vous avez maintenant accès aux commandes, sens de la marche, vitesse et stop.

PNG - 468.1 kio

En dessous, vous pouvez activer toutes les fonctions disponibles sur votre locomotive. DCC++ permet en effet de commander la totalité des 28 fonctions normalisées par le NMRA. Mais rares sont les décodeurs qui possèdent 28 fonctions.

PNG - 177.4 kio

Pour avoir accès à ces fonctions et en choisir le nom, rendez-vous dans la section « Paramétrages » en cliquant sur la flèche à gauche où est écrit : « Noms pour les fonctions ». Entrez ici les noms des fonctions. Vous constatez que la modification se fait en temps réel. Si vous ne donnez pas de nom, vous supprimez l’accès à la fonction.

Juste au-dessus, vous avez des zones de saisie pour les noms que vous voulez donner à vos locomotives, ainsi que zone pour entrer l’URL des images affichées. Vous pouvez donc ainsi personnaliser avec vos propres photos que vous aurez deposées dans le dossier img de l’application sur le disque.

PNG - 90.7 kio

Mais si vous n’êtes pas trop doué pour les photos, rassurez-vous, il existe aussi une autre manière simple de le faire. Cliquez sur l’icône de la 241 P 17 de notre exemple. Vous voyez que l’URL est maintenant de type : http://www.aaaaaaaa.com/Files/25566...

Je suis en effet allé chercher sur internet l’image que j’affiche. Pour ce faire, allez sur Google par exemple, cherchez une image de votre locomotive qui vous plait puis faites un click souris droit et copiez l’URL de l’image. Collez ensuite cette URL dans la zone de l’application. Et l’image apparaît (jusqu’à ce qu’elle soit supprimée sur le site d’origine :-(

Voilà pour la décoration pourrait-on dire. Il nous reste maintenant à voir toutes les possibilités de lecture et de programmation sur les CV’s. Mais pour cela, nous allons faire d’une pierre deux coups et nous allons en profiter pour entrer vos propres locomotives. Votre application sera ainsi rapidement opérationnelle.

Commencez par supprimer toutes les locomotives actuelles avec la corbeille en mode liste d’affichage des locomotives. Voilà, il n’y a plus de locomotives. Alors, placez votre première locomotive sur la voie de programmation. La voie de programmation est, soit effectivement une voie dédiée non connectée à votre réseau principal, soit votre réseau lui-même mais sur lequel il n’y aura aucune autre locomotive. Le raccordement électrique du réseau devra être relié à la sortie programmation de votre shield moteur (voir les principaux mode de raccordement ici).

Maintenant, nous allons utiliser la fonction « lecture des CV’s » que nous avons vu en haut à gauche de l’écran en activant la flèche.

PNG - 20.3 kio

Dans un premier temps, vous pouvez entrer début à 1 et fin à 10 par exemple. Puis cliquez sur le bouton bleu. Si tout se passe bien, vous allez voir la locomotive s’agiter à intervalles régulier. C’est bon signe !

A chaque fois que vous lancez une lecture de CV’s, l’application va toujours lire la CV 1 (adresse courte), puis les CV’s 17 et 18 qui contiennent l’adresse longue, puis la CV 29 pour voir si c’est l’adresse courte qui est activée ou l’adresse longue (CV 29 bit 5 à 0 ou à 1) et enfin, l’application va chercher à lire les CV’s de début à fin.

Si aucune locomotive n’existe dans l’application avec l’adresse lue (courte ou longue) alors une nouvelle locomotive est créée automatiquement. C’est comme cela que vous allez progressivement personnaliser votre contrôleur avec vos propres locomotives.

En descendant dans la page, vous constaterez que les lignes ont été renseignées pour les CV’s lues. Le libellé de la CV est même ajouté pour les 49 premières CV’s car ce libellé est normalisé par le NMRA. Mieux, CV 8, le nom du fabricant du décodeur est ajouté car là encore, c’est normalisé.

PNG - 142.5 kio

Il est intéressant que vous fassiez également la lecture de la CV 63 qui correspond pour la plupart des décodeurs au volume du son. Vous récupérez ainsi le volume programmé.

Mais la lecture de CV’s ne fonctionne sur une plage entière qu’en version Ethernet. Pour la version USB/série, l’application lit la CV 1, les CV’s 17 et 18 et la CV 29 puis seulement la CV indiquée dans le champ début et ignore les autres. Cela est dû au débit inférieur en liaison série par rapport à l’Ethernet.

L’application vous permet de programmer toutes les CV’s. Certains décodeurs cependant, interdisent la programmation de certaines CV’s en dehors de la voie de programmation. Le choix de la voie se fait en sélectionnant le bouton correspondant.

PNG - 24 kio

A cet endroit s’affiche également une zone de logs pour les informations retournées par DCC++.

Il est possible de changer directement l’adresse courte en modifiant le champ et en validant.

PNG - 36 kio

Vérifiez cependant que le bit 5 de la CV 29 soit bien à 0 (zéro).

PNG - 65.8 kio

Le volume du son peut se régler par potentiomètre. Veillez à ce que le bon numéro de CV soit renseigné.

PNG - 28.8 kio

L’application permet aussi de programmer simplement une adresse longue. Entrez l’adresse souhaitée dans le champ adresse et l’application calculera automatiquement la valeur du champ 17 et celle du champ 18. Et si vous validez, le bit 5 de la CV 29 sera lui aussi automatiquement sélectionné.

Les valeurs possibles d’adresses courtes sont limitées à 127 contre 10240 pour les adresses longues.

PNG - 156 kio

La programmation de la CV 29 est directement disponible car c’est elle qui permet de définir des réglages importants comme le sens de la marche (Bit 0), le pas de vitesse (Bit 1), l’usage en DCC seulement ou en DC/DCC (Bit 2), Railcom (Bit 3) et paramétrage des courbes de vitesse (Bit 4). Toutes les modifications des bits de la CV 29 sont immédiatement répercutées sans qu’il y ait besoin de valider.

PNG - 37.3 kio

Enfin, Autres CV vous permet de modifier toutes autres CV’s en saisissant simplement son numéro, la valeur souhaitée et de valider. Vous pouvez aussi en option ajouter un libellé pour cette CV.

Ce n’est pas le lieu ici de traiter en détail du réglage des CV’s qui est un sujet vaste et complexe. Cherchez à connaitre les modifications que vous souhaitez apporter. Il vous appartient en particulier de veiller à la cohérence des données saisies.

En cas de mauvaises manipulations, rappelez-vous que vous pouvez toujours revenir aux paramétrages usine du décodeur en plaçant la valeur 8 dans la CV 8. Ceci à condition que vous connaissiez l’adresse de la locomotive. Dans le cas contraire, il vous faudra réaliser cette opération par la voie de programmation.

Tablettes :

Sur tablette, l’utilisation est très similaire à ce que nous venons de voir. Il suffira d’entrer dans le navigateur de votre tablette, l’URL utilisée ci-dessus. Si par exemple votre serveur Node.js est hébergé avec l’adresse IP 192.168.1.37, l’URL devrait être :

http://192.168.1.37:8080/controller...

Nous utilisons ici le même écran que pour la version ordinateur. Nous avons accès aux mêmes fonctionnalités. Rien de très compliqué donc. Si vous souhaitez disposer sur votre tablette d’un espace de commande plus large et des commandes simplifiées à la seule conduite des trains, vous pouvez utiliser le mode smartphone qui est développé ci-dessous.

Pensez bien que si vous modifiez des paramètres de vos locomotives à partir de l’écran de votre ordinateur, il vous faut les enregistrer sur disque pour qu’elles soient rendues disponibles pour les autres terminaux. De-même, il vous faudra recharger la page du terminal pour visualiser ces modifications.

Smartphones :

Pour les smartphone, j’ai créé un écran simplifié qui ne donne accès qu’au pilotage des locomotives ainsi qu’aux fonctions. Pour accéder à cet écran, l’URL est un peu différente puisque le fichier html se nomme ici controller_sm.html

Le lien devrait donc être le suivant : http://192.168.1.37:8080/controller...

Cette page html utilisant un fichier Javascript spécifique et simplifié, veillez à bien renseigner la ligne 105 du fichier controller_4.2_sm.js qui se trouve dans le dossier scripts avec la bonne URL du serveur Node.js

En conclusion :

Avec ce dernier article, voici de nouvelles possibilités pour piloter les locomotives de votre réseau (et de les programmer) en utilisant DCC++, version originale de Gregg E. Berman ou celle de Thierry.

Ce sont des solutions économiques 100% Arduino qui nécessiteront certainement quelques efforts d’adaptation à vos propres configurations. Vous souhaiterez peut-être aussi les utiliser dans des cas particuliers comme cela m’a déjà été demandé sur le réseau d’un club. Dans tous les cas n’hésitez pas à poser toutes vos questions et nous chercherons à vous aider au mieux.

29 Messages

  • Bonsoir
    Bravo pour votre travail. J’ai un problème je suis en mode serie et une fois le lien effectué http://localhost:8080/controller_dc...
    les commandes de la page n’envoient aucune information (pas de logs qui apparaissent dans le haut de la page) alors que l’arduino est bien connecté.
    Merci pour votre aide

    Répondre

    •  

      Bonjour et merci pour votre appréciation !

       

      Dans l’invite commande ou le terminal, au lancement de dccpp_node.js vous devez avoir un message de ce type.

      Server NodeJs at : 192.168.1.37:8080
      Connected to Arduino DCC++ serial at : /dev/cu.usbmodem1421
      Connection socket : Ok

       

      Si vous avez bien la 3° ligne, Connection socket : Ok, c’est que la page HTML et plus exactement la page de scripts "controller_4.2.js" n’ont pas la bonne adresse IP.

       

      Ligne 105 de controller_4.2.js, remplacez 192.168.1.37:8080 avec l’adresse IP de l’ordinateur telle qu’elle apparait dans le terminal pour votre propre configuration.

       

      105.   $scope.socket = io.connect('http://192.168.1.37:8080/');

       

      Essayez tout d’abord ceci et n’hésitez pas si le problème est autre.

       

      Bien cordialement.

       

      Christophe

      Répondre

      • Bonjour,

        J’ai tout vérifié ( adresse ip, port etc ), la page web se lance correctement ( ip correspond au serveur node) mais n’envoie aucune information vers l’arduino alors que celui est bien connecté en mode série et node répond correctement lors du script node dccpp_node.js sur le terminal.
        Merci pour votre aide

        Répondre

        • Piloter son Arduino avec son navigateur web et Node.js (4) 11 février 2018 09:13, par bobyAndCo

          Bonjour,
          Il faut m’envoyer en message privé des copies d’écran de la fenêtre du terminal, du fichier Javascript controller_4.2.js qui montre bien la ligne 105 et du haut du fichier dccpp_node.js. C’est une question de paramètres.
          Bien cordialement.
          Christophe

          Répondre

  • Piloter son Arduino avec son navigateur web et Node.js (4) 7 février 2018 21:23, par Xavier Bouillard

    Bonsoir,
    Merci pour ce beau travail qui ouvre de nombreuses perspectives.
    A mon tour, je me suis lancé dans la version Ethernet. Je suis bien reparti de la version originale du sketch DCC++ mais, lancé depuis le terminal (Windows comme Linux) j’obtiens :
    Server NodeJs as : 192.168.xx.xx:8080
    Connected to Arduino Mega DCC++ at : 192.168.0.40:2560

    Sans jamais avoir la suite :
    Connection socket : Ok

    Malgré un certain temps passé à chercher, je ne trouve pas ce que j’ai raté...
    Merci pour votre aide

    Répondre

    • Bonsoir,

       

      La suite de :

       

      Server NodeJs as : 192.168.xx.xx:8080
      Connected to Arduino Mega DCC++ at : 192.168.0.40:2560

       

      s’obtient (en Ethernet) quand on lance la page web. C’est à ce moment que le terminal indique "Socket OK" si la connection est OK.

       

      Si vous n’avez rien quand vous ouvrez la page web, n’est pas le même problème que ma réponse ci-dessus ?

       

      N’hésitez pas à revenir vers moi si le problème est autre.

       

      Bien cordialement.

       

      Christophe

      Répondre

  • Bonsoir christophe,

    Pour aller encore plus loin ...
    Serait-il envisageable de compléter cet interface avec un onglet accessoire permettant déclarer des accessoires (exemple : aiguillages= adresse Dcc + Type + X + Y + angle) que l’on pourrait disposer sur une image représentant son TCO ?

    X et Y seraient les coordonnées sur le TCO, angle permettrait d’orienter correctement l’accessoire.
    Type indiquerait si l’aiguillage est droit, gauche, symétrique, triple etc

    Les fonctions locomotives seraient dans un premier onglet, la configuration dans un troisième.

    Bref, je me prends à rêver !

    Répondre

  • Piloter son Arduino avec son navigateur web et Node.js (4) 15 février 2018 19:55, par bobyAndCo

    Bonsoir Xavier,

     

    Dans ce gout là : https://alkans.fr/locoduino/tco/tco...

     

    Vous constaterez que vous pouvez cliquer sur les aiguilles qui sont actives.

     

    C’est une nouvelle page HTML que vous pouvez mettre à côté du contoller et effectivement, vous naviguez de l’un à l’autre par les onglets.

     

    Ici, la communication avec les aiguilles est en TCP (Ethernet). Mes aiguilles sont pilotées par des servos via Arduino. Mais le TCO peut tout à fait communiquer avec DCC++ qui dispose des fonctions pour piloter des accessoires en DCC. Cela est d’ailleurs assez simple à programmer sur le même modèle que le controller.

     

    Ne rêvez plus !

     

    Bien amicalement.

     

    Christophe

    Répondre

  • Bonjour Christophe,

    C’est en effet une approche possible, qui m’amène à quelques questions :

    Dans ton javascript, quelles sont les valeurs possible des paramètres des $scope.aiguillagesInit[x] ?
    .pas => qu’est-ce que ça représente ?
    .sens => "d"=droite / "g"=gauche (axeVertical)
    .axeHoriz => "b"=bas / "h"=haut / "45"=45° (/ "135"=135°)
    .state => "T"=tourné / "D"=droit
    Ainsi tu calcule l’image utilisée (par exemple img/agbT.png) mais à quoi correspond le pas ?

    Tu fais aussi appel à aiguilApp.controller : te serait-il possible de le mettre à disposition ?

    J’ai cherché à adapter ce fichier à mon layout en :

    • modifiant le html
      ng-src=" aiguillages[X].imgScr " etc... où X est l’index de l’aiguillage
    • créant les png absents (aiguillages verticaux)
    • modifiant le scripts
      - Nombre de colonnes
      - Nombre de lignes
      - Nombre d’aiguillage
      - Parametres des aiguillages (sauf .pas)
      J’obtiens un TCO sans les aiguilles. L’initialisation semble ne pas s’effectuer !
      ng-src=" aiguillages[0].imgScr " etc...

    NB : Je découvre les glyphicons sans encore les maitriser !

    Bien amicalement,
    Xavier

    Répondre

  • Piloter son Arduino avec son navigateur web et Node.js (4) 25 février 2018 15:17, par bobyAndCo

    Bonjour Xavier,

     

    Bon ici en Bretagne il fait un temps magnifique à être au jardin. Comme quoi, on se moque de la bretagne !

     

    Désolé tout d’abord, je n’ai pas vu ton message du 17. Mais je vois que tu t’es débrouillé. Bravo, je suis allé sur ton site, bon boulot !

     

    Moi c’est vraiment comme cela que je vois le modélisme ferroviaire en DIY.

     

    Bien amicalement.

     

    Chrsitophe

    Répondre

  • Piloter son Arduino avec web et Node.js (4) 13 mars 2018 15:10, par Rob1

    Bonsoir
    Tout d’abord merci pour ces articles et pour les autres aussi ...
    Nous y trouvons des solutions partielles ou complètes bien utiles voire indispensables pour nos projets.

    Une petite question quant au codage des ordres T x loco vitesse sens
    il semble que x contienne le Id de la locomotive, en quoi est-ce utile ou nécessaire ?

    Merci d’avance

    Répondre

    • Piloter son Arduino avec web et Node.js (4) 13 mars 2018 15:31, par bobyAndCo

      Bonjour Rob1,
      Votre question aborde un aspect avancé des micro controleurs ; les registres qui sont des mémoires à accès très rapides. Ce sont eux qui enregistrent les timers ou les interruptions.

      DCC++ écrit dans des registres les informations concernant une loco (un décodeur). A chaque fois que l’on envoie une commande, on envoie aussi le numéro du registre, l’ID ici, sinon, sur le principe, DCC++ enregistre dans un nouveau registre... et comme il s’agit d’une mémoire très limitée !

      Ce paramètre est par défaut de 12 et est réglable ligne 23 de Config.h

      // DEFINE NUMBER OF MAIN TRACK REGISTER
      
      #define MAX_MAIN_REGISTERS 20

      J’ai donné la valeur 20 car j’ai 13 locos et que je suis sur un MEGA

      Si vous voulez vous faire mal à la tête, Dominique en parle dans son article sur DCC++ : http://www.locoduino.org/spip.php?a...

      Bien cordialement.

      Christophe

      Répondre

      • Piloter son Arduino avec web et Node.js (4) 14 mars 2018 09:15, par bobyAndCo

        Jean-Luc me fait toute fois remarquer que, bien que portant le même nom, ce que l’on appelle registre dans DCC++ ne correspond pas aux registres du microcontroleur (zone de stockage). En relisant l’article de Dominique que j’ai cité précédemment, je vois qu’il parle de tableaux, de zones mémoire donc, où sont stockées les informations de chaque locomotive. Dans une autre mémoire donc.

        L’endroit de stockage n’est pas celui que j’indiquais mais le principe que l’ID correspond à une locomotive et une seule pour le stockage de ses information reste vrai.

        A corriger donc !

        Christophe

        Répondre

        • Piloter son Arduino avec web et Node.js (4) 14 mars 2018 11:20, par Roland

          Merci de vos réponses la première a eu le mérite de me faire relire l’article et de compléter ma compréhension du programme.
          La seconde réponse correspond mieux à ce que j’avais cru comprendre et me convient d’avantage.
          En effet j’utilise DCCpp de manière un peu particulière avec la fonction TextCommand::parse(Order) ; .
          Mon application principale est en VisualExpress C# avec une socket (ethernet ;port8172) vers l’Arduino Mega qui héberge DCCpp.
          Pour intégrer le pilotage Web j’ai ouvert une seconde socket sur Arduino(ethernet:port2560) qui écoute le serveur Node.
          Cela fonctionne très bien et je peux lancer une loco depuis ma tablette et la stopper depuis mon PC(Visual). Par contre mais lorsque l’octet qui contient Id est différent de l’ordre PC(Visual) le fonctionnement est aléatoire. Je vais voir comment récupérer les infos du fichiers locos.json pour servir voire supprimer ma table Sql actuelle.
          Si vous m’autorisez un petite suggestion quant à l’ergonomie de Controller_sm pour le curseur de vitesse. Lors de l’utilisation sur Iphone ou sans doute Android, il est tellement proche du bord que son actionnement est difficile car le système interprète comme le souhait de tourner la page. La suppression de colspan"2" et l’ajout d’une case améliore la chose.
          Encore merci pour vos réponses et certainement à bientôt

          Répondre

          • Piloter son Arduino avec web et Node.js (4) 15 mars 2018 07:51, par bobyAndCo

            Merci pour ces retours. Je ferai la modification suggérée concernant l’érgonomie. Vous me semblez bien avancé sur les échanges d’informations et les sockets. C’est à mon avis c’est vers cela que vont évoluer nos réseaux. Dans le cadre d’un projet Locoduino, je travail actuellement sur un système d’échange d’informations incluant du CAN, de l’Ethernet et du WiFi. Le meilleur de chaque en quelque sorte.

             

            N’hésitez pas à publier vos travaux soit sur le forum ou sous forme d’article.

             

            Bien cordialement

             

            Christophe

            Répondre

  • Bonjour et merci de ce travail que je viens d’adapter pour transformer une installation analogique en DCC.
    J’ai pu utiliser un arduino Mega, une carte ethernet de base et un booster LM298 de chez Velleman (VMA409). Ce dernier que j’ai dû adapter, possède de bonnes caractéristiques avec ce qu’il faut pour contrôler le courant des deux circuits de puissance. Basé sur le schéma du shield Arduino Motor, j’ai dû principalement ajouter un inverseur (CD4011) sur les sorties DIRA et B pour alimenter les entrées IN1 et IN2 puis IN3 et IN4 du booster. Ensuite et j’en viens à la principale difficulté pour moi qui a été de calibrer la résistance à inclure dans le circuit de contrôle du courant (pour recevoir les réponses des contrôleurs vers DCCpp). Il n’est pas dit grand chose sur le sujet. J’ai placé des R 1 Ohm 1W bobinées qui donnent satisfaction.
    Je vais maintenant passer aux aiguillages... autre chantier !
    Merci encore. Benoit

    Répondre

    • Bonjour Benoit,

       

      Merci pour ce retour en particulier pour le VMA409. VELLEMAN est une marque sérieuse qui propose de bons produits.

       

      Ensuite et j’en viens à la principale difficulté pour moi qui a été de calibrer la résistance à inclure dans le circuit de contrôle du courant (pour recevoir les réponses des contrôleurs vers DCCpp). Il n’est pas dit grand chose sur le sujet. J’ai placé des R 1 Ohm 1W bobinées qui donnent satisfaction.

       

      Je ne comprends pas bien "réponses des contrôlleurs". Vous ne vouliez pas plutôt parler de décodeurs ? Si c’est le cas, il n’est effectivement pas dit grand choses car nous n’avons pas approfondis le sujet mais rencontrons des difficultés sur certains décodeurs. Si vous avez des propositions à faire, nous sommes très intéressés.

       

      Christophe

      Répondre

  • OK, je vais préciser. La connexion des CS (current sensor) sur les broches A0 et A1 nécessite une résistance entre la masse et la sortie basse des lignes PROG et MAIN. Rien n’est dit sur sa valeur. Sans le micro circuit genre MAX471, il faut donc avec le VMA409 placer une R de 1 Ohm environ de façon que les fonctions comme ReadCV sachent lire en retour les valeurs de CV depuis le décodeur Loco (voie PROG).
    J’ajoute que j’ai laissé en l’air les résistances PullUp des lignes IN1 à IN4 qui sont en option sur le VMA409.
    Benoit

    Répondre

  • Hello Christophe,
    unfortunately I do not speak french, I hope Google Translate will help us. I found your project here regarding webbrowser and Node.js. I like your work very much. And I would like to add further functionality to the Browser App like controlbuttons that could switch on LEDs. I would like to find out, what kind of Serial Ascii Signal I have to send to the arduino mega to switch on Output 20 for example. It would be great to have several custom buttons which could switch on or of specific outputs. I also would like to experiment with current sensors, so train feedback will be possible.
    I have found a page on github where a french guy has started building html track-layout https://github.com/Krevo/geotrain
    It would be nice to add track layout with real train feedback to your webpage project. That might be a huge step. But why not think about how to reach this. I would be pleased if you write me an email. Best Regards Kobal

    Répondre

  • Piloter son Arduino avec son navigateur web et Node.js (4) 28 décembre 2018 01:01, par bobyAndCo

    Hello Kobal,

     

    Thank you for your appreciations. If I understand correctly, you would like to add extensions to be able to control outputs of the Arduino MEGA to turn on or off DELs for example.

     

    This would require not only adding these functions to the HTML page, but also modifying DCC ++ BaseStation. I already had the opportunity to say before I did not advise to modify DCC ++ BaseStation by adding this type of functionality.

     

    The work that we realized on the Satellites shows that this type of functions can be realized by specific interfaces like what I present in this video for example :

     

    https://youtu.be/ZPbDnoiOLdE

     

    Or this one :

     

    https://youtu.be/0wTkDJWdN_c

     

    When you talk about current sensors, I think it’s something similar to what we do with Satellites, and it shows the areas occupied by locomotives in red on the graph.

     

    We are going to publish a series of articles on this subject, but it takes time and we do not have many of them.

     

    Do not hesitate to return regularly on the homepage of the site. Do not hesitate to come back to me if I did not understand your request or that I do not answer well.

     

    Best regards.

     

    Christophe

    Répondre

    • Hello Christophe,

      yes I would like to achieve exactly what you do in the second video. I would like to be able to add Sensors and Turnouts.
      Create a tracklayout and in the end automate trainrides....
      Is the tracklayout and the traffic lights html based ? https://www.dropbox.com/s/okwptxj4x...
      I have added a screenshot where I added new Tabs to your controller. The aim is to create Sensors and Turnouts.
      I have started to translate the GUI also into English, because I do not speak French. Is there already a way to change the speech of the controller ? It would be great to support several languages. Languages could be switched depending on the locale of the browser. I could help you with that also. I could translate to German and English.

      What do you exactly mean if you talk about Satellites ? Are those extra devices which I have to connect to my arduino mega ?

      Thanks for answering my questions.

      Répondre

  • Bonjour à tous.
    je suis un débutant dans la programmation du shield Ethernet de l’Arduino et piloter certains paramètre de mon domicile à partir de mon site web préalablement paramétrer.
    Théorique, ledit site doit me permettre de voir sous forme graphique la variation de la température en fonction du temps et de l’humidité en fonction du temps ; mettre en marche et en arrêt les lampes.
    je me suis dit qu’il me faut une base de données pour stocker les paramètres de température et de l-humidité dans une base de données ainsi lorsque l’opérateur voudra consulter ces différentes évolution alors une requête sera envoyée sur la base de données. mais pratiquement je ne sais pas comment m’y prendre.
    j’ai vraiment besoin de votre aide
    merci

    Répondre

  •  

    Bonjour,

     

    Désolé de ne pouvoir vous répondre car Locoduino est un site spécifique au modélisme ferroviaire. Vous trouverez de nombreux articles sur internet qui abordent votre question. Pour ce qui est des bases de données, je vous invite à vous intéresser à MySQL Conector dont je parle ici : http://forum.locoduino.org/index.ph...

     

    Bien cordialement,

     

    Christophe.

    Répondre

  • AIDE-NOUS !
    Viens DM pour les info

    Répondre

  • Piloter son Arduino avec son navigateur web et Node.js (4) 30 novembre 2021 15:41, par Olivier CASSE

    Bonjour,

    vraiment de la belle ouvrage, chapeau !
    tout fonctionne après quelques tatonnements et une lecture trop rapide :)

    Olivier

    Répondre

Réagissez à « Piloter son Arduino avec son navigateur web et Node.js (4) »

Qui êtes-vous ?
Votre message

Pour créer des paragraphes, laissez simplement des lignes vides.

Lien hypertexte

(Si votre message se réfère à un article publié sur le Web, ou à une page fournissant plus d’informations, vous pouvez indiquer ci-après le titre de la page et son adresse.)

Rubrique « Programmation »

Les derniers articles

Les articles les plus lus