LOCODUINO

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

. Par : bobyAndCo

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++ (…)

Retourner à l'article

Vous répondez à :

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

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.)

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

Rubrique Programmation

Les derniers articles

Les articles les plus lus