Je voudrais commencer à implémenter un système composé de N microcontrôleurs (N> = 2 MCU), mais je voudrais connaître les possibilités de les laisser communiquer entre eux.
Idéalement, les microcontrôleurs (N-1) sont placés à l'intérieur de la maison en tant que clients, tandis que le dernier (le "serveur") est connecté à un PC via USB. Le problème que j'ai en ce moment est de savoir comment connecter ces (N-1) microcontrôleurs au "serveur". Les MCU clients effectuent des tâches très simples, donc ce n'est peut-être pas une bonne solution d'utiliser des ARM pour effectuer des tâches aussi simples simplement parce qu'ils fournissent CAN / PHY-MAC .
La communication ne se fera pas plus d'une fois toutes les quelques minutes pour la plupart des appareils et à la demande pour d'autres. La vitesse n'est pas très critique (le message est court): 1 Mbit / s je pense que c'est beaucoup trop pour mes besoins.
Les MCU que j'envisage d'utiliser sont les suivants.
- Atmel AVR Tiny / Mega
- TI MSP430
- ARM Cortex M3 / M4
- (Peut-être Atmel AVR UC3 - 32 bits)
J'aimerais éviter les PIC si possible (choix personnel), tout simplement parce qu'il y a moins de possibilités de les programmer (tous ceux-ci ont des outils plus ou moins open source ainsi que certains outils officiels).
Je sais que certains ARM offrent une fonctionnalité CAN et je ne suis pas sûr des autres.
En ce moment, j'ai trouvé ces possibilités:
- GPIO simple pour envoyer des données (disons> 16 bits à HIGH pour indiquer le début du message,> 16 bits à LOW pour indiquer la fin du message). Cependant, il doit être à une fréquence standard << (fréquence_client, fréquence_server) pour pouvoir détecter tous les bits. Besoin d'un seul câble par MCU client.
- RS-232 : Je pense que c'est de loin le protocole de communication le plus utilisé, mais je ne sais pas à quel point il évolue. J'envisage jusqu'à 64 MCU clients en ce moment (probablement plus tard)
- USB: AFAIK, c'est principalement comme RS-232, mais je ne pense pas qu'il évolue très bien dans ce cas (bien que l'USB supporte de nombreux appareils - 255 si je me souviens bien - cela peut être trop compliqué pour cette application)
- RJ45 / Ethernet: c'est ce que j'aimerais vraiment utiliser, car il permet une transmission sur de longues distances sans problème (au moins avec un câble blindé> Cat 6 ). Le problème est le coût (PHY, MAC, transformateur, ...). Je ne sais pas si vous pouvez vraiment bien le souder à la maison. De cette façon, je n'aurais pas besoin d'un MCU client
- Sans fil / ZigBee : les modules sont très chers, mais c'est peut-être le chemin à parcourir pour éviter les "spaghettis" derrière le bureau
- Modules / émetteurs-récepteurs RF: je parle de ceux dans la bande 300 MHz - 1 GHz, ils devraient donc être difficiles à souder à la maison. Les modules sont tous intégrés, mais ils sont tout aussi chers que le ZigBee (au moins les modules RF de Mouser, de Sparkfun semblent être moins chers).
- POUVEZ? Il semble être très robuste. Même si je ne prévois pas de l'utiliser dans des applications automobiles, cela peut être une bonne alternative.
- I²C / SPI / UART ? Encore une fois - mieux vaut éviter les "spaghettis" avec les câbles si possible
- Les API ne sont pas vraiment une option. Les performances se dégradent assez rapidement à mesure que la longueur augmente et dépend de la charge capacitive du réseau électrique. Je pense que le prix est à peu près identique à Ethernet.
De plus, quel protocole serait "meilleur" en cas de transmissions simultanées (supposons le cas rare où au même instant deux appareils commencent à transmettre: quel protocole fournit le meilleur "système de gestion des conflits" / "système de gestion des collisions"?
Pour résumer : j'aimerais savoir quelle peut être la meilleure solution pour un système client distribué qui fait une communication de données très légère, compte tenu de la flexibilité (nombre maximum d'appareils, système de gestion des conflits / collisions, ...), du prix , facile à faire à la maison (soudure), ... Je voudrais éviter de dépenser 20 $ pour le module de communication, mais en même temps, avoir 30 fils derrière le bureau serait nul.
La solution que j'imagine actuellement serait de faire une communication de base entre des MCU proches par GPIO ou RS-232 ( pas cher !) Et d'utiliser Ethernet / ZigBee / Wi-Fi sur un MCU par "zone" pour communiquer avec le serveur ( cher , mais c'est toujours beaucoup moins cher qu'un module Ethernet par MCU client).
Au lieu de câbles, il peut également être possible d'utiliser des fibres optiques / fibres optiques. Bien que des conversions supplémentaires soient nécessaires, et je ne sais pas si ce serait la meilleure solution dans ce cas. J'aimerais entendre des détails supplémentaires à leur sujet.