Il y a une question de débutant qui arrive au support de temps en temps: est-il possible d'utiliser plusieurs modules Yoctopuce, identiques ou non, depuis la même machine? La réponse est évidement oui. C'est même une exigence qui figurait en bonne place quand le design général des produits Yoctopuce a été imaginé il y a dix ans. Ceci dit, peut-être qu'on pourrait élaborer un peu...
Ne souriez pas, cela a beau être une question de débutant, cela n'en reste pas moins une question pertinente. De nombreux produits concurrents bon marché posent des problèmes des lors qu'on essaie d'en brancher plusieurs sur la même machine:
- Beaucoup fonctionnent en série sur USB: les brancher crée un port série virtuel que peuvent utiliser les applications pour communiquer avec le périphérique. C'est pratique et facile à utiliser dans n'importe quel langage de programmation. Le hic c'est qu'il est difficile de prévoir le numéro du port qui va être créé, de plus ce numéro peut parfois changer si on branche le périphérique sur un autre port USB. La solution qu'utilisent beaucoup d'éditeurs consiste à scanner tous les ports série jusqu'à trouver le bon périphérique, ce qui nous amène au deuxième problème.
- Une façon de simplifier la production de masse d'un produit électronique consiste à fabriquer des produits tous identiques tant au niveau hardware qu'au niveau firmware. Du coup si vous avez deux modules strictement identiques branchés à la même machine, vous n'avez aucun moyen de les différencier, pire vous ne pouvez même pas compter à 100% sur le numéro de port qui leur a été attribué car rien ne vous garantit que le câblage n'a pas été inversé à un moment ou un autre.
On peut donc se demander comment Yoctopuce a fait pour éviter ces problèmes.
La version Yoctopuce
Les produits USB de la gamme Yocto ne sont pas basés sur un protocole série sur USB, mais sur un protocole dit "HID vendor specific", cette façon de faire à de multiples avantages:
- Pas besoin de port communication série
- Pas besoin d'installer de driver parce qu'il y a toujours un driver HID installé sur toutes les machines de la création: il est utilisé par le clavier et la souris
Numéros de série
De plus tous les modules Yoctopuce du même modèle ne sont pas strictement identiques: ils ont tous un numéro de série différent. Il y a chez Yoctopuce toute une infrastructure qui s'assure que tous les modules qui sortent de chez nous ont un numéro de série unique. Ce numéro de série est stocké dans une zone non effaçable du micro-contrôleur du module et ne peut pas être modifié.
Grâce à cela, vous pouvez brancher plusieurs de modules Yoctopuce, identiques ou non, sur la même machine et les différencier sans aucune ambiguïté.
Les noms logiques
Cependant, vous n'aurez pas forcement envie de coder en dur les numéros de série de tous vos modules dans votre software. C'est pourquoi chaque module et chaque fonctionnalité d'un module peuvent se voir attribuer par l'utilisateur un nom logique pour identifier sa fonction. Ces noms sont stockés dans la mémoire non volatile du micro-contrôleur du module: ils résistent à un redémarrage du module. C'est très utile si vous voulez fabriquer plusieurs exemplaires d'un même système basé sur des modules Yoctopuce.
Bien entendu, toutes les librairies de programmation Yoctopuce offrent le moyen d'énumérer tous les modules Yoctopuce connectés à une machine et de retrouver aussi bien leur numéro de série que leur nom logique. Vous trouverez de plus ample détails dans cet article.
Limitations
Comme toujours, ce n'est pas totalement magique: il y a des limitations. Par exemple ce n'est pas parce qu'il y a 127 adresses disponibles sur un bus USB que vous pourrez brancher 127 périphériques USB en même temps. Votre ordinateur et votre système d'exploitation ont probablement une limite bien plus basse.
L'API Yoctopuce a une autre limitation, sur une même machine, il ne peut y avoir qu' un seul programme à la fois qui parle aux modules Yoctopuce en mode USB. Cela peut paraître un problème si vous comptez faire tourner plusieurs expériences indépendantes sur la même machine, mais en fait, cette limitation peut facilement être contournée grâce au mode réseau.
Le VirtualHub
Vous n'êtes pas obligé de connecter vos modules directement sur la machine sur laquelle tourne votre programme de contrôle. Vous trouverez dans la section "support" du site web de Yoctopuce un petit programme appelé VirtualHub. Non seulement ce programme offre une interface pour configurer les modules Yoctopuce, mais il offre aussi un accès par réseau aux modules Yoctopuce connectés à la machine sur laquelle il tourne. Et il se trouve que passer un programme du mode USB au mode réseau ne demande qu'une seule ligne de code.
Rien n’empêche d'utiliser le mode réseau pour accéder à la machine locale, ainsi si on lance un VirtualHub sur notre machine et que dans notre code, et qu'on remplace l'appel
YAPI.RegisterHub("usb",errmsg)
par
YAPI.RegisterHub("127.0.0.1",errmsg)
On accède aux modules Yoctopuce connecté à la machine locale à travers le VirtualHub et on n'a plus la limitation sur le nombre de programme différents qui accèdent aux modules Yoctopuce en même temps. Notez quand même que le VirtualHub compte comme un programme qui tourne en mode USB.
Conclusion
Oui, on peut connecter plusieurs modules Yoctopuce en même temps sur la même machine, ça été conçu pour. Il y a bien quelques limitations, mais elles peuvent être facilement contournées.