Coms entre un Pi et plusieurs Arduino : quel support et protocol de com ?

Bonjour,

Je suis actuellement sur un projet impliquant un raspberry et plusieurs Arduino.
Si vous voulez plus de renseignements vous pouvez allez voir ici : Projet KTANE

Je viens ici vous demander des informations / conseils sur le coté communication entre un ordinateur et plusieurs Arduino.

Présentation du problème :

Chaque Arduino correspond à un module.
Je veux que mon ordinateur communique avec un certain nombre d'Arduino (de 2 à 13).
Les communications se passent dans les deux sens (ça peut être de l'Arduino à l'ordinateur).
Pour le moment aucune communication entre Arduino n'est prévue.
Les modules et donc les Arduino doivent pouvoir être déconnectés / remplacés du réseau "facilement". C'est à dire, au pire une opération manuelle de moins de 30s.
Je n'ai pas de soucis de temps réel, même si un temps de réaction court est souhaitable.

Je cherche un support et un protocole de communication (voir une bibliothèque C/C++) qui correspondent à mes besoins.

Pour information :
L'ordinateur en question est un Raspberry, il dispose donc de gpio si besoin (même si je ne suis pas convaincu que ça soit la meilleur solution).
Je pense coder en C/C++ des deux cotés.
Je suis ouvert à toute question, suggestion, proposition ! Que ça soit sur mon projet ou sur de la documentation.

Mes connaissances en électronique / hardward sont limitées.
Mais je suppose qu'il y a deux grandes familles pour faire ça :
filaire : "serial port" (qui veut pour moi tout et rien dire) (Usb, ...), gpio, Ethernet
sans-fil : ondes radios, bluetooth, wifi, ...

Autant le sans-fil répond bien au soucis de déconnexion facile d'un module, autant il me semble que ça entraine une complexité pas nécessairement souhaitée. Par exemple gestion de l'alimentation, périphérique de communication radio, ...

Si un câblage Usb est envisageable sans trop de contraintes, alors cette piste me parait prometteuse.

Voilà,
Merci d'avoir pris le temps de lire ces quelques lignes.

Benjamin

ben, tu peux passer avec du RS485, qui est une liaison serie dont tu peux avoir jusqu'a 256 connexion de carte et jusqu'a 1KM facilement.

Bonjour hazerty,

RS485 à l'air d'être une norme de communication. J'ai l'impression que ça reste trop vague pour moi.
J'aimerai utiliser quelques chose de plus concret.
As tu des implémentations de cette norme à me conseiller ?

Quand on parle de liaison série, on fait référence à une liaison Usb, port série ou indiféremment l'un ou l'autre ?

RS485 est un protocole de communication Serie, c'est un peu le meme genre que le RS232

Tu as le bluetooth, qui est sans fils, tu as un maitre, et jusqu'a 248 esclaves.

Si un câblage Usb est envisageable sans trop de contraintes, alors cette piste me parait prometteuse

Bonjour,
c'est le plus facile concernant la connectique : un usb host, l'un ou l'autre hub avec alim, des cordons tout faits, puis les arduinos
je serais plus réservé (d'abord car plutôt ignorant), concernant la partie soft

il faudrait nous en dire + :

  • longueur des liaisons
  • ordre de grandeur des débits
  • alimentation électrique des modules
    et éventuellement, si ce n'est pas top secret, la finalité de tout ceci : cela peut aider les intervenants à orienter leurs réponses

Les liaisons font 30cm maximum.
Je ne saurai pas quantifier les débits attendu, mais je dirai "faible".
C'est principalement des communications en retour utilisateur (pression bouton par exemple).

Pour l'alimentation des modules c'est encore l’inconnu.
Mon Pi ne pourra très probablement pas alimenter 13 arduino et leur équipement (led principalement).
Peut être doubler un Usb (pour les comm) par un câbles d'alimentation (ce qui nécessiterai 2 câbles par modules). Ou bien un hub Usb avec alimentation extérieur.

La finalité est la construction d'un jeu de société, comme précisé en premier post.
Je met un peu plus de détail dans ce post : Projet KTANE

Je suis encore au début du projet. Même si j'ai une bonne vue d'ensemble, je cherche toujours à concrétiser pas mal de points.

  • comme dit, la solution usb, en utilisant des hubs qui peuvent alimenter les arduinos, est la plus facile à mettre en œuvre au niveau de la connectique

par contre je ne pourrais pas t'aider au niveau de la prise en compte par usb host au niveau du Pi

pour avoir une idée de la richesse de l'aide que tu pourras avoir à ce niveau, tu peux poser la question suivante sur un forum Pi : usb host : vaut-il mieux utiliser la classe IHM ou la classe CDC ?

la réponse à son importance car elle détermine le choix des arduinos

** par ailleurs, toujours dans le domaine des transmissions filaires, devoir travailler sur de la connectique ne doit pas t'effrayer car de toutes manières tu devras réaliser du câblage entre l'arduino et tes modules

à côté du rs485 déjà cité, et qui à mon avis représente la plus grande simplicité au niveau du soft, il y a aussi l'I2C qui est disponible au niveau du PI et des arduinos. L'I2C aurait également l'avantage de pouvoir faire fonctionner des modules ... I2C, cad. directement à partir du PI, sans nécessiter d'arduino

la question de l'interface n'est pas critique pour ton projet, plusieurs solutions fonctionnent et peuvent même être remplacées voire panachées en cours de projet. Le fait est que sans interface il n'y a rien, donc il faut bien commencer par là

si c'est 30cm...

alors i2C c'est l'ideal, tu peux facilement mettre le RPi en master, et les 13 arduino en esclave

ou en USB, avec un switch USB...

pour l'usb: (exemple)

pour l'i2C: ( exemple)