Protocol de communication entre plusieurs Arduino [RESOLU]

Allo Houston, on a un probleme!!!!

Bonjour à tous,

Débutant et passionné de ces petites bestioles Atmega, j'aurais une question à vous soumettre.
Quand il s'agit de connecter plusieurs Arduinos entre eux le moyen le plus facile semble être le I2C!
Mais l'endroit ou blesse le bas c'est que dans mon projet, 9 Arduinos connectés, et chacun d'eux a pour ne citer que ceux la, 2 oleds differents toujours sur le bus i2c car beaucoup plus simple à mettre en oeuvre!

On se rencontre tout de suite que chaque entité pourra fonctionner individuellement mais si ils sont tous sur le meme bus on aura un soucis d'adresse! et vu que les périphériques I2C n'ont que 4 possibilité d'adresses max parfois juste une seule, je me retrouve donc coincé avec ce projet!

Si j'isole le maitre et 1 esclave ma foie cela peu marcher! Mais pour corser le tout chaque esclave peut etre le maitre d'un autre esclave! Je m'excuse par avance si cela semble tirer par les cheveux!

Je vous décris ci dessous sommairement de quoi est composer le maitre et les esclaves pour éclaircir un l'affaire!

Composition du Maitre:

AtMega328
Oled en i2c 128X64
potentiometre digital en i2c
boutons poussoirs
potentiomètre analogique
etc..

composition esclaves:

AtMega328
1 Oled 0.91"
1 Oled 1602
potentiometre digital en i2c
boutons poussoirs

Voila donc je recherche un moyen de communication pour faire cohabiter tout ce petit monde!

Merci d'avance pour vos lumieres!!
etc...

Bonjour,

Il ne faut pas espérer mettre tout sur le même bus I2C. Sans même parler des adresses communes, gérer l'arbitration de 9 processeurs qui peuvent être soit maitre soit esclave me parait quasiment impossible.

Je vois deux solutions:

  • Utiliser une liaison RS485 pour communication entre les différents processeurs
  • Utiliser l'I2C pour la communication entre processeurs et utiliser un I2C software pour communication des esclaves avec leurs périphériques.

Le choix dépend aussi de la distance entre chaque processeur et de l'environnement. Qu'est ce que tu veux faire avec ces 9 processeurs connectés?

kamill:
Bonjour,

Il ne faut pas espérer mettre tout sur le même bus I2C. Sans même parler des adresses communes, gérer l'arbitration de 9 processeurs qui peuvent être soit maitre soit esclave me parait quasiment impossible.

Je vois deux solutions:

  • Utiliser une liaison RS485 pour communication entre les différents processeurs
  • Utiliser l'I2C pour la communication entre processeurs et utiliser un I2C software pour communication des esclaves avec leurs périphériques.

Le choix dépend aussi de la distance entre chaque processeur et de l'environnement. Qu'est ce que tu veux faire avec ces 9 processeurs connectés?

Bonjour et merci d'avoir répondu!

Je suis tout à fait d'accord que l'on ne puisse pas tous les mettre sur le meme bus, c'est bien la le problème, les adresses. Après avoir posté ma requète, j'ai parcouru le net encore une fois et crois avoir trouvé une partie de la solution.

Chaque esclave pourra fonctionner avec ses périphériques respectifs en I2C, et pour la communication Maitre esclave je vais essayer le SPI. Mais demeure le dernier soucis, si par exemple l'esclave 1 veut envoyer une information à l'esclave 3 il faudrait qu'il passe par le Maitre afin de relayer l'information, ce qui serait d'un point de vu cablage plus simple!

le projet tiens dans un espace de 50X30 cm à peut près!

Et plus je regarde le protocol SPI et plus j'ai l'impression que c'est la solution a mon problème!

Les esclaves communiqueraient avec leurs périphériques respectifs en I2c, mais communiqueraient entre eux ou avec le maitre en SPI! cela me semble faisable! Mon seul doute est comment faire communiquer les esclaves entre eux si besoin en passant par le Maitre!

il existe plusieurs topologie, vous pourriez faire une étoile, avec un seul "maître" qui arbitre toutes les communications et relaie les messages entre Arduinos. s'il n'y a pas trop de bavardage c'est potentiellement envisageable. Il faut juste structurer le "langage" de commande et l'analyser sur le maître pour savoir quoi faire. ensuite à tour de rôle le maître parle à chaque esclave et lui dit 'J'ai un message pour toi, le voilà, as tu un message pour moi" et gère tout cela.

ensuite il existe des multiplexeurs I2C par exemple le TCA9548A qui va vous donner 8 ports I2C à partir d'un seul.

ça permet de choisir un bus et d'écouter ce qu'il 'y passe, ça ne gère pas tous les bus à la fois cependant

J-M-L:
il existe plusieurs topologie, vous pourriez faire une étoile, avec un seul "maître" qui arbitre toutes les communications et relaie les messages entre Arduinos. s'il n'y a pas trop de bavardage c'est potentiellement envisageable. Il faut juste structurer le "langage" de commande et l'analyser sur le maître pour savoir quoi faire. ensuite à tour de rôle le maître parle à chaque esclave et lui dit 'J'ai un message pour toi, le voilà, as tu un message pour moi" et gère tout cela.

ensuite il existe des multiplexeurs I2C par exemple le TCA9548A qui va vous donner 8 ports I2C à partir d'un seul.

ça permet de choisir un bus et d'écouter ce qu'il 'y passe, ça ne gère pas tous les bus à la fois cependant

Bonjour,
Je vous remercie pour vos lumières, je pense choisir l'option étoile comme vous dites. Et vue que le SPI est assez rapide, je pense qu'il fera l'affaire. En ce qui concerne le bavardage, chaque esclave gere sa tache sans trop déranger le maitre, ni les autres esclaves donc je me penche dessus de ce pas!

Merci a tous pour votre contribution!