0Home Page test forums PROGRAMMATION MYROBOTLAB [TUTO][MRL] Branchement en série de plusieurs arduino

This topic contains 18 replies, has 4 voices, and was last updated by  anthony 3 years, 9 months ago.

  • Author
    Posts
  • #5296

    anthony
    Moderator

    ** source : Calamity, post MRL **

    Il est possible de brancher en série plusieurs arduino , sans utiliser le port usb
    Pour ce faire vous pouvez utiliser les Pin dédiés de l’arduino :

    Serial Arduino

    Code :

    • This topic was modified 3 years, 9 months ago by  anthony.
    • This topic was modified 3 years, 9 months ago by  anthony.
    • This topic was modified 3 years, 9 months ago by  anthony.
    • This topic was modified 3 years, 9 months ago by  anthony.
    • This topic was modified 3 years, 9 months ago by  anthony.
    Attachments:
    You must be logged in to view attached files.
  • #5304

    My’s Moov
    Moderator

    Kikou tony !! tu veux dire que pour deux USB tu en élimine un ? mais on en as tjrs au moins un a raccorder ?

    ps: ok : pour le code et les apostrophes (mets le en pièce jointe sinon) ?

  • #5306

    anthony
    Moderator

    Coucou ! Oui Alain il y aura toujours un maitre à brancher en usb.

  • #5374

    Christian
    Participant

    Salut Anthony

    je viens de voir ton post, juste quelque petite précision

    Pour que le tout puisse communiquer avec MRL, les connections de série ne peuvent se faire a partir d’un arduino Mega vers n’importe quel type d’arduino.

    La connection s’effectue toujours comme ceci

    MRL -> USB -> (Serial) MEGA (Serial1-3) -> (Serial) Arduino
    (le port Serial (tx/rx) est utilisé par la connection USB)

    plusieur niveau de connections peuvent etre ajouté

    MRL -> USB -> (Serial) MEGA1 (Serial1-3) -> (Serial) MEGA2 (Serial1-3) -> … -> (Serial) Arduino

  • #5379

    anthony
    Moderator

    Coucou ! merci pour ces précisions Christian

  • #5455

    Dominique
    Participant

    Bonjour,

    @christian

    Serais t’il possible d’ajouter dans MrlComm la possibilité de gérer les ports de communications séries 1, 2 et 3.

    Apparemment d’après le post, c’est possible, mais rien dans le soft du mega me fait penser que cela est bien gérer.

    Je suppose aussi que cela dépens du type de carte car pour un UNO ou NANO il y a qu’un seul port.

    Sinon, ai je la possibilité de modifier le soft par moi même afin d’y intégrer la gestion de ces ports ? Mais alors comment se passerais les futurs update sans écrases les modifs ?

    Merci
    Dom.

  • #5476

    Dominique
    Participant

    Bonjour,

    J’ai reçu une partie de la réponse.

    Nous avons donc bien la possibilité de mettre un mega (gauche par exemple) sur USB et l’autre mega (droite par exemple) sur le port série 1 du mega connecté en USB.
    Ici le but est d’utiliser le moins possible de ports USB et même ne pas utiliser de hub pour tout le robot.

    L’autre demande était: A t’on la possibilité de connecter un arduino custom sur le port série 2 du mega USB ET utiliser un protocole custom avec MRL ?
    Si oui, auriez vous un exemple python ?

    Merci.
    Dom.

  • #5478

    anthony
    Moderator

    Pour scinder ces 2 fonctionnalités, d’après les travaux de Christian, je tenterais ça :

    Coté python : ( att j ai enlevé les guillemets, bug forom )

    Coté Arduino
    On flash MRLCOMM sur les 2
    Et dans l’esclave on ajoute notre code sur le modèle suivant :
    https://github.com/MyRobotLab/pyrobotlab/blob/develop/home/Calamity/customMsgMrlComm.ino

    • This reply was modified 3 years, 9 months ago by  anthony.
  • #5500

    Christian
    Participant

    Salut Dominique

    Désolé pour la réponse tardive, je n’avais pas vu la question avant

    Le code example d’anthony me semble approprié

    La gestion des ports de série se fait dans la classe MrlIo de MRLComm. Afin de facilité la gestion et d’etre compatible avec la plupart des arduinos utilisé, la réception des messages de MRL -> Mrlcomm s’effectue toujours par le port Serial (USB ou par les pins). L’arduino Maitre envois les messages vers l’esclave a partir d’un des port Serial1, Serial2 ou Serial3 vers le port Serial.

    Afin d’éviter d’écraser ton code custom, tu copies tout les fichiers de MRLComm sauf MRLComm.ino (pour utiliser ton fichier.ino modifier) MRLComm.ino contient tres peu de code susceptible d’etre modifié.

    Une autre facon plus sure et l’utilisation de git pour récuperer la derniere version de MRLComm. Git fera a merge des fichers ou te d’avertira s’il y a un probleme

  • #5515

    Dominique
    Participant

    Bonjour,

    Après plusieurs essais, rien ne sort du port série demandé. Je précise que la led RX du nano qui est connecté sur le port série du mega maître ne s’allume pas.

    Voici mon code:

    activator = Runtime.createAndStart(“activator”,”Arduino”)
    activator.setBoardUno()
    activator.connect(right,”Serial1″)
    activator.digitalWrite(1,0)

    J’ai mis Serial1 entre guillemets sinon il y a erreur de syntaxe.

    Pouvez vous me dire où est l’erreur.

    Dom.

  • #5518

    Christian
    Participant

    pour le digitalWrite is faut faire un pinMode avant

    Sinon envoie un noWorky, ca me permettra de voir ton log file et comprendre ce qui ne marche pas pour toi

  • #5523

    anthony
    Moderator

    Alors pour résumer suite aux derniers test dans un script dédié :

    Les commandes fonctionnent parfaitement

    1/ Emmission
    L’arduino “autonome” reçoit bien le customMsg(55,44) et une fonction est exécutée en conséquence du message reçu. ( peu importe la fonction )
    Mais Dom tu veux utiliser autre chose que customMsg(55,44) , un digitalwrite depuis python avec une modification de mrlcomm autre que le .ino principal . Modifications non fusionnées sur le dépôt principal. d’après ce que j’ai compris. c’est ça?
    Juste pour comprendre que va apporter ces modifications de plus que le traitement d’info simple du customMsg. En faisant ça es tu sure que ça va suivre les évolutions de mrlcomm Je dis ça afin d’anticiper les évolutions du protocole / les changements de versions

    2/ Réception
    Test OK de mon coté, à valider chez toi.

    J’essaye de nettoyer le script principal ce soir

    @++

  • #5531

    Dominique
    Participant

    Bon Anthony, a voir tes remarques, je continue de croire que tu me comprends pas.

    Activator est un soft qui n’a rien à voir avec MrlComm et il ne sera mis à jour QUE par moi même suivant les demandes.

    Je ne touche pas du tout au MrlComm d’origine qui ce trouve dans les megas.

    J’ai inclus le protocoles MrlComm dans ACTIVATOR pour que celui ci soit reconnue comme un arduino UNO avec MrlComm et pour pouvoir utiliser les commandes pythons standards.

    J’espère enfin me faire comprendre.
    On va y arriver !!!

    Dom.

  • #5535

    anthony
    Moderator

    Oui on va y arriver, c’est le but. Tu dis que je ne comprend pas mais précise techniquement justement. On est la pour ça ! Que tout le monde parle le même language. Pour qu’on puisse s’entre aider mutuellement.

    Sans entrer dans les détails fonctionnels de ton code arduino, j’ai compris que tu souhaite envoyer et recevoir des commandes série depuis le mega principal ( pour les traiter dans ton programme et effectuer des actions diverses ) Si j’ai mal compris , explique nous pour ne pas que qu’il y ai de malentendus.

    En tous cas c est une fonctionnalité que je vais utiliser aussi autant qu’on aille dans le même sens.
    Je pense que ma question est pertinente sur mrlcomm ( le changement des fichiers autres que le .ino principal ) car en cas d’évolution du protocole, ton arduino risque de ne plus être reconnu par le mega. Enfin je ne suis pas du tout expert en mrlcomm ! Si Christian passe par la! Mais si ça marche comme ça c’est parfait! Il faut juste en être sure

    Le but de tout cet écosystème open source est justement que tout le monde puisse modifier et ( tenter de ) comprendre le travail de chacun.
    Et tu ne sera pas le seul a maintenir ton code . C’est le jeu de Github de mrl et plus généralement de l open source. enfin il faut prendre en compte que des gens vont l utiliser voir avoir envie de le modifier avec ta validation bien sure. Je l’utiliserais moi même certainement et apporterais des modifications !

  • #5536

    Dominique
    Participant

    En faite, j’utilise peu de commandes susceptibles d’être changés dans le futur. Maintenant si il y a une évolutions, alors il suffira de mettre à jour nous même.

    Autrement seules les fichiers MrlComm.cpp et MrlComm.h on été modifié.

    A+
    Dom.

  • #5688

    Dominique
    Participant

    Bonjour,

    J’ai toujours un problème lors de la réception de données: je m’explique:

    Si je branche mon Arduino sur port usb et que celui ci envoie un PublishCustomMsg cela fonctionne sans problème.
    Si je branche mon Arduino sur le port série du méga gauche, alors mon message PublishCustomMsg est bien reçu par le méga car on peut voir “Message Ack received: CUSTOM_MSG” MAIS ou sont les data ? Le listener python ne voit rien !!

    ex:

    Voici un extrait du log:

    Voici ce que j’obtiens dans myrobotlab.log.

    Pouvez vous m’aider ? Merci

    Dom
    A+

    • This reply was modified 3 years, 9 months ago by  Dominique.
  • #5690

    anthony
    Moderator

    Ok la on parle bien de la communication dans l autre sens cad code arduino > python ? En effet vu le log tu as reçu qq chose. Regarde dans la fenetre python ( la ou les print s affichent ) tu va donc voir : j ai reçu des données les voici : . avec le contenu de data . enfin normalement

  • #5691

    Dominique
    Participant

    Bon non rien. En faite c’est plus compliqué que ça sinon je n’aurais pas appelé “a l’aide”.

    Il y a 2 onglets associés à Activator. Premier onglet activator, 2eme activator.serial
    Dans l’onglet activator, c’est bien mis connecté et on peux simuler des actions.
    Dans l’onglet activator.serial il ne se passe rien, pas de print. Si je connecte sur un port USB alors des print apparaît avec des erreurs de structure…

    En résumé, j’ai bien les acquis quand je fait des commandes Python->mega->activator sinon il y aurait pleins d’erreurs et rien ne fonctionnerais. ce n’est pas le cas.
    Par contre le sens activator->mega->python rien ne ce passe dans le listener.

    A+
    Dom

    • This reply was modified 3 years, 9 months ago by  Dominique.
  • #5693

    anthony
    Moderator

    Ok juste pour être sure : dans ce bout de code ce sont des print console python pas des print serial arduino. Regarde la pj

    Attachments:
    You must be logged in to view attached files.

You must be logged in to reply to this topic.