Nous sommes le Mar 24 Avr 2018, 04:06


communication entre plusieurs µcontrôleurs

Cette partie du site est dédiée à tous ceux qui se lancent dans la robotique ou qui se posent la question : par où commencer ?
  • Auteur
  • Message
Hors ligne
Avatar de l’utilisateur

Fred

Bricoleur débutant

  • Messages: 18
  • Inscription: Jeu 9 Mai 2013, 21:41

communication entre plusieurs µcontrôleurs

Message non luDim 18 Aoû 2013, 13:05

Bonjour,

Je cherche à faire communiquer plusieurs µ entre eux. L'architecture du réseau serait composé d'un maître qui doit pouvoir interroger plusieurs esclaves. L' esclave doit pouvoir envoyer des données au maître sans que celui ci ne l'ai sollicité. Les esclaves n'ont pas besoin de communiquer entre eux.

Les esclaves sont des arduino uno standalone et seront distant de plusieurs mètres du maître, 25m pour le plus éloigné.
Le maître sera un RaspberryPi B

Le bus sera filaire, je pense utiliser du câble réseau cat 5E. La vitesse de communication n'est pas trop importante.

En tenant compte de tous ces paramètres, selon vous quel est le type de bus/protocole à utiliser ??

Fred
Hors ligne
Avatar de l’utilisateur

leon

Roboticien confirmé

  • Messages: 634
  • Inscription: Dim 19 Juil 2009, 07:57

Re: communication entre plusieurs µcontrôleurs

Message non luDim 18 Aoû 2013, 14:28

Le plus simple, c'est d'utiliser un port série bidouillé.
Plus tu descend en débit et plus tu peux aller loins. A 19 200 bds (bauds) tu peux sans problème atteindre les 30m avec un signal +/-12V (RS232).

Pour le câble Cat5, c'est un peu riche, car un câble comporte 4 paires et que tu n'auras besoin que d'une ou 2 paires.

Une question importante à se poser est le type de matériel qui sera raccordé, et le fait de savoir s'ils auront une masse commune. Si tu veux par exemple relier des équipements dans un même logement, tous reliés à la même terre, ou alors sans qu'aucun ne soit relié à la terre, ça ne devrait pas poser de problème. Par contre, dès que tu passes d'un bâtiment à l'autre, avec 2 terres différentes, les problèmes apparaissent, et dans ce cas, il vaut mieux travailler avec un signal "symétrique" (type RS422 ou RS485), et non plus référencé au 0V (RS232). Dans tous les cas, un signal symétrique est plus robuste.

Ton besoin d'avoir un esclave qui puisse initier la communication est assez contraignant. Ne peux-tu pas t'en passer? Du coup, tu n'as plus réellement de topologie maitre-esclave. Est-ce vraiment indispensable? Certains réseaux maitre-esclave (où seul le maitre peut initier la communication) ont une ligne, ou un état particulier du réseau, qui permet à un esclave de prévenir qu'il a quelque chose à dire (un événement est survenu). Le maitre interroge alors 1 à 1 les esclaves pour savoir lequel veut parler. Ne peux-tu pas faire quelque chose d'équivalent? Ou alors carrément te passer de ce besoin, et accepter que le maitre doive interroger régulièrement (10 fois par seconde) tous les esclaves pour savoir s'ils ont quelque chose à dire.

Tu as plusieurs solutions selon la topologie que tu vises.

* Avec un bus en anneau, tu peux utiliser du "token ring". J'ai déjà vu ce genre de bidouille sur port série bas débit, et ça permet réellement d'avoir une communication "multi-maitre". Le TX du port série d'un des microcontrôleur est relié au RX du micro suivant, et ainsi de suite pour former un anneau. Note que la notion d'anneau peut très bien être réalisée par des faisceaux partant d'un point central. C'est sans doute la solution la plus simple pour du multi-maitre. Par contre, c'est contraignant du point de vue des faisceaux : impossible de faire des simples épissures entre 2 branches du réseau.

* utiliser un unique bus série partagé, de type RS485, mais alors tu as la nécessité d'avoir un seul maitre qui initie la communication. Voir la solution des interruptions ci dessus... Ca économise aussi les faisceaux, qui sont plus simples. 1 seule paire peut suffire.

Leon.
BOB4, mon drone hélicoptère autonome d'intérieur http://heli.bot.free.fr/
BOB3, mon robot autonome d'intérieur avec WiFi + FoxBoard Linux http://ze.bot.free.fr/
Hors ligne
Avatar de l’utilisateur

Fred

Bricoleur débutant

  • Messages: 18
  • Inscription: Jeu 9 Mai 2013, 21:41

Re: communication entre plusieurs µcontrôleurs

Message non luDim 18 Aoû 2013, 18:39

Bonjour Leon, merci de t'intéresser à mon cas.

Il m'a semblé voir qu'avec le RS232 on ne peut communiqué qu'entre 2 µ, c'est faux ?

Je parle du cat 5e car je peux en avoir gratos alors autant l'utiliser ^^
Les équipement auront une alimentation commune transportée par le même câble que les données. La consommation sera faible.
Certains réseaux maitre-esclave (où seul le maitre peut initier la communication) ont une ligne, ou un état particulier du réseau, qui permet à un esclave de prévenir qu'il a quelque chose à dire (un événement est survenu). Le maitre interroge alors 1 à 1 les esclaves pour savoir lequel veut parler.

C'est une solution envisageable.
Ou alors carrément te passer de ce besoin, et accepter que le maitre doive interroger régulièrement (10 fois par seconde) tous les esclaves pour savoir s'ils ont quelque chose à dire.

Possible aussi si j'ajoute un circuit qui gère cet aspect et qui préviens le RPi en cas de besoin. Mon Rpi aura d'autre tâche à effectuer qui ne lui permettent pas d'interroger les esclaves 10x/s

La solution de l'anneau me semble bien compliquée et peu souple dans le câblage pour une extension éventuelle.
Je penche plus pour une bus série partagé.

De ce que je peux voir la différence entre RS232 et 485 n'est que matériel. La partie soft reste donc la même ?
Hors ligne
Avatar de l’utilisateur

leon

Roboticien confirmé

  • Messages: 634
  • Inscription: Dim 19 Juil 2009, 07:57

Re: communication entre plusieurs µcontrôleurs

Message non luLun 19 Aoû 2013, 07:09

Mon Rpi aura d'autre tâche à effectuer qui ne lui permettent pas d'interroger les esclaves 10x/s
10 fois par secondes c'était un exemple. Tu ne nous as rien dit de ton application, donc soit tu nous donnes plus de détail, soit tu te fais ta propre idée. 1 fois par seconde est-ce acceptable?

De plus, est-ce que tu as déjà estimé la charge CPU qu'engendraient une dizaine de scans par seconde? Ca ne doit vraiment pas représenter grand chose, donc ca m'étonne beaucoup. Du coup, je ne vois pas pourquoi tu veux rajouter un "circuit supplémentaire". Ca sent l'usine à gaz.

De ce que je peux voir la différence entre RS232 et 485 n'est que
matériel. La partie soft reste donc la même ?

Non, la partie soft est forcément différente. En RS485, c'est à celui qui programme de gérer la partie Maitre-Esclave, et de s'assurer qu'un esclave ne parlera que quand il y est autorisé par le maitre. En RS232, c'est du "point à point", comme tu l'as dit, et c'est "full duplex", donc les 2 parties peuvent parler en même temps.

Leon.
BOB4, mon drone hélicoptère autonome d'intérieur http://heli.bot.free.fr/
BOB3, mon robot autonome d'intérieur avec WiFi + FoxBoard Linux http://ze.bot.free.fr/
Hors ligne
Avatar de l’utilisateur

Esprit

Membre asso caliban

  • Messages: 1641
  • Inscription: Jeu 11 Fév 2010, 11:14
  • Localisation: Ottignies

Re: communication entre plusieurs µcontrôleurs

Message non luLun 19 Aoû 2013, 19:38

Fred, j'ai édité ton message pour mettre des balises [ quote] et [ /quote]. C'est plus lisible. ;)
Je n'ai pas beaucoup le temps de me pencher là dessus avec toi pour l'instant mais si tu attends la fin de l'exposition en septembre, je devrais avoir le temps de m'y intéresser de plus près.

Léon, l'idée c'est de faire de la domotique. Avec suivi de température, gestion du chauffage, etc... Pas besoin de 10 fois/seconde à mon avis. 1 fois/seconde amplement suffisant je dirais.
Simon, membre fondateur de l'Association Caliban Belgique,
.·° Mon blog : Le Chipoteur de Brols .·°·. L' Association Caliban Belgique °·.
"L'impossible, nous ne l'atteignons pas, mais il nous sert de lanterne." (René Char)
Hors ligne
Avatar de l’utilisateur

leon

Roboticien confirmé

  • Messages: 634
  • Inscription: Dim 19 Juil 2009, 07:57

Re: communication entre plusieurs µcontrôleurs

Message non luMar 20 Aoû 2013, 05:55

Esprit a écrit:Léon, l'idée c'est de faire de la domotique. Avec suivi de température, gestion du chauffage, etc... Pas besoin de 10 fois/seconde à mon avis. 1 fois/seconde amplement suffisant je dirais.
Si c'est uniquement le suivi de température, même une fois toutes les 10 secondes, c'est amplement suffisant. Mais dans ce cas, pourquoi Fred parlait de données "poussées" depuis les esclaves vers le maitre?

Par contre, dès qu'on parle d'une action du "client" qui doit être effectuée très rapidement (allumer une lumière quand le client appuie sur un interrupteur), alors les temps de réponse sont très sensibles. Et si la lumière ne s'allume pas 1/2s (ordre de grandeur) après que le client ait appuyé sur son interrupteur, ça ne conviendra pas. Et dans ce cas, lire 5 à 10 fois par seconde, c'est le bon ordre de grandeur. On peut aussi privilégier de ne lire aussi fréquement que les modules esclaves qui sont sensibles en temps de réponse.

Leon.
BOB4, mon drone hélicoptère autonome d'intérieur http://heli.bot.free.fr/
BOB3, mon robot autonome d'intérieur avec WiFi + FoxBoard Linux http://ze.bot.free.fr/
Hors ligne
Avatar de l’utilisateur

Esprit

Membre asso caliban

  • Messages: 1641
  • Inscription: Jeu 11 Fév 2010, 11:14
  • Localisation: Ottignies

Re: communication entre plusieurs µcontrôleurs

Message non luMar 20 Aoû 2013, 06:27

Peut-être qu'il a eu d'autres idées depuis la dernière fois où nous en avons parlé, je ne sais pas. ;)
Simon, membre fondateur de l'Association Caliban Belgique,
.·° Mon blog : Le Chipoteur de Brols .·°·. L' Association Caliban Belgique °·.
"L'impossible, nous ne l'atteignons pas, mais il nous sert de lanterne." (René Char)
Hors ligne
Avatar de l’utilisateur

philopat

Membre asso caliban

  • Messages: 1720
  • Inscription: Mer 5 Nov 2008, 01:19
  • Localisation: Jonzac

Re: communication entre plusieurs µcontrôleurs

Message non luMar 20 Aoû 2013, 11:22

salut!

je dis peut etre une conn... :heu: voyez ça comme une question de novice interessé par vos approches...
mais pourquoi ne pas utiliser dans un cas de domotique, un réseau ethernet, tout simplement? dans les bureaux d'entreprise, ça court les murs , les plafonds, pour raccorder des imprimantes, des photocopieurs, de modems, des disques durs etc.. avec des pc partout..
ça necessite de faire un test avec 1 ou 2 cartes à 1m et 20m de cable, car l'arduino internet est un achat spécifique.
ou bien avec des cartes arduino standards, le bus I2c en basse fréquence peut atteindre les 20m de cable.. (voir 100m) parait il ce bus a justement été créé pour de la domotique...
?? :?

-
phil
ce qui voit , se voit dans les yeux de ceux qui nous regardent...
Hors ligne
Avatar de l’utilisateur

leon

Roboticien confirmé

  • Messages: 634
  • Inscription: Dim 19 Juil 2009, 07:57

Re: communication entre plusieurs µcontrôleurs

Message non luMar 20 Aoû 2013, 17:33

Salut Phil.
philopat a écrit:mais pourquoi ne pas utiliser dans un cas de domotique, un réseau ethernet, tout simplement? dans les bureaux d'entreprise, ça court les murs , les plafonds, pour raccorder des imprimantes, des photocopieurs, de modems, des disques durs etc.. avec des pc partout..

Pour l’Ethernet, ça peut paraître élégant, mais ça n’est pas forcément simple.
Déjà, ça nécessite des microcontrôleurs spécifiques, plus rares, plus chers.
En plus, l’effort de développement (codage, débuggage) est vraiment plus important avec de l’Ethernet qu’avec un simple réseau série. Il faut configurer toutes les couches réseau, par exemple les adresses IP, le DHCP, etc…
La taille du programme qui en résulte est également conséquente, et donc nécessite

L’avantage des réseaux série les plus simples (série asynchrone ou I2C), c’est justement qu’ils sont simples à mettre en œuvre. Pas de besoin d’encapsuler, de gérer des couches réseau, etc… Pour du bas débit, avec des messages de taille limitée et faible, c’est quand même plus simple.
ou bien avec des cartes arduino standards, le bus I2c en basse fréquence peut atteindre les 20m de cable.. (voir 100m) parait il ce bus a justement été créé pour de la domotique...
L’I2C est aussi une bonne solution. Ca gère nativement l’aspect « maitre-esclave ». Mais un esclave ne peut pas initier la communication.
S’il y a besoin pour plusieurs esclaves d’annoncer des événements au maitre, il y a quelques années, on ajoutait une ou plusieurs lignes d’interruption dédiée. Beaucoup de composants I2C (esclaves) sont déjà prévus avec cette lignes d’interruption en sortie.
Cette gestion par « ligne d’interruption » était une solution fréquente avant, quand les microcontrôleurs avaient des fréquence de traitement faibles (quelques MHz il y a 15 ans). Maintenant, c’est de moins en moins utilisé ; dans beaucoup de cas, le maitre interroge régulièrement chaque esclave, même avec un petit microcontrôleur pour le maitre (qui moulinent rapidement). Vu la rapidité des microcontrôleurs actuels, même bas de gamme, ça n'est plus un problème.
Par contre, pour des longues distances (plusieurs mètres), ça nécessite des composants supplémentaires spécifiques : un driver I2C longue distance. Clairement, l’I2C a été conçu initialement pour simplifier la conception interne d’un système (magnétoscope, TV, chaine HiFi), sur de courtes distances, et pas pour les longues distances, pour de la domotique.
Par contre, il faut vérifier si les arduino que vous voulez utiliser peuvent faire de l’I2C en esclave. Ca n’est pas le cas de tous les microcontrôleurs : certains ne savent que faire du « maitre ».

Leon.
BOB4, mon drone hélicoptère autonome d'intérieur http://heli.bot.free.fr/
BOB3, mon robot autonome d'intérieur avec WiFi + FoxBoard Linux http://ze.bot.free.fr/
Hors ligne

lordcuty

Membre asso caliban

  • Messages: 68
  • Inscription: Lun 4 Avr 2011, 20:12

Re: communication entre plusieurs µcontrôleurs

Message non luVen 23 Aoû 2013, 22:44

oui l'arduino supporte l'i2c slave, avec cette commande
Code: Tout sélectionner
Wire.onReceive(IMUDataHandler); // what to call when new IMU data has arrived

http://trandi.wordpress.com/2011/01/03/ ... o-arduino/

mais pour des connections longues distances en domotique le réseau est quand même utilisé mais avec des ,navigateurs web et des codes en php/js/ajax, plus simple que de recoder les couches réseaux, même si je reconnais que c'est plus chère....
après peut être faire un mixe des deux, une carte par pièce qui collecte les données en I2C et les transmets à un serveur par une simple requête GET ou POST en php...
Hors ligne
Avatar de l’utilisateur

Fred

Bricoleur débutant

  • Messages: 18
  • Inscription: Jeu 9 Mai 2013, 21:41

Re: communication entre plusieurs µcontrôleurs

Message non luSam 24 Aoû 2013, 17:47

Bonjour à tous,

Dans un premier temps je compte fabriquer 8 esclaves donc l'option ethernet est bcp trop cher.

Je voulais avoir la possibilité que l'esclave envoie par lui même des données car ce n'est pas juste une mesure de t°. Le module aura en fait une fonction de thermostat et chaque thermostat aura la possibilité de changer la t° de consigne. Et donc de ce fait il doit informer le master du changement de consigne.
Hors ligne
Avatar de l’utilisateur

leon

Roboticien confirmé

  • Messages: 634
  • Inscription: Dim 19 Juil 2009, 07:57

Re: communication entre plusieurs µcontrôleurs

Message non luSam 24 Aoû 2013, 19:07

Fred a écrit:Je voulais avoir la possibilité que l'esclave envoie par lui même des données car ce n'est pas juste une mesure de t°. Le module aura en fait une fonction de thermostat et chaque thermostat aura la possibilité de changer la t° de consigne. Et donc de ce fait il doit informer le master du changement de consigne.

Merci pour ces précisions.
Honêtement, avec cette description, je pense sérieusement que tu n'as pas besoin que l'esclave puisse initier une communication vers le maitre. La régulation de températude d'un logement est quelque chose de très lent. Tu n'as pas besoin de réactivité entre le moment où l'utilisateur ajuste la consigne du thermostat, et le moment où une action se déclenche. Un retard de 10 secondes est parfaitement acceptable. C'est tout le contraire pour un interrupteur de lumière qui doit donner un effet en quelques centaines de millisecondes après que l'utilisateur l'ait actionné.

Du coup, si ton maitre interroge toutes les 10 secondes chacun des esclaves (thermostats), ça devrait être amplement suffisant, à la fois pour connaitre la température de chaque pièce, mais aussi pour vérifier si une consigne a été modifiée; et ça ne représentera quasiment aucune charge de travail pour le maitre.

Dis moi si je n'ai pas compris ton besoin.

Leon.
BOB4, mon drone hélicoptère autonome d'intérieur http://heli.bot.free.fr/
BOB3, mon robot autonome d'intérieur avec WiFi + FoxBoard Linux http://ze.bot.free.fr/
Hors ligne
Avatar de l’utilisateur

Fred

Bricoleur débutant

  • Messages: 18
  • Inscription: Jeu 9 Mai 2013, 21:41

Re: communication entre plusieurs µcontrôleurs

Message non luDim 25 Aoû 2013, 22:28

Tu as raison Leon. Je vais me diriger dans cette direction. Pour le moment le temps me manque pour faire mes 1er essais mais je ne manquerai pas de vous tenir au courant de mes avancées.

Fred
Hors ligne
Avatar de l’utilisateur

philopat

Membre asso caliban

  • Messages: 1720
  • Inscription: Mer 5 Nov 2008, 01:19
  • Localisation: Jonzac

Re: communication entre plusieurs µcontrôleurs

Message non luVen 30 Aoû 2013, 10:10

salut
merci leon et lord' pour vos infos tres instructives! ;)

-
phil
ce qui voit , se voit dans les yeux de ceux qui nous regardent...

Retourner vers Zone débutants

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

cron