On s'est rendu compte que les sujets de nos derniers articles devenaient petit à petit de plus en plus pointus. Pour éviter de faire peur aux nouveaux utilisateurs, on s'est dit et qu'il était temps de revenir aux sources et de rassembler dans quelques articles les principes de base permettant l'utilisation de nos modules. Voici donc le premier article d'une série, qui aurait pu s'intituler Yoctopuce pour les nuls, si cela ne violait pas une marque déposée bien défendue.
Ce premier article assez théorique vous donnera une vue d'ensemble des concepts et des choix derrière les modules Yoctopuce. Sa lecture vous facilitera leur utilisation ultérieure.
Architecture
Le but commun de tous les modules Yoctopuce est de fournir une interface simple entre les machines et le monde réel. Tous nos modules ont une structure très similaire, qui découle directement de ce but commun:
- D'un côté, on trouve une électronique qui mesure ou communique avec l'extérieur
- De l'autre, un petit processeur qui rend ces mesures facilement accessibles à un ordinateur
La structure physique des modules Yoctopuce. Ici un capteur de temperature
Nous avons fait le choix délibéré de mettre dans tous nos modules, même les plus simples, un tout petit processeur qui offre une interface USB et publie proprement et explicitement les fonctions offertes par le module. Contrairement à un bête breakout boards qui comporterait juste un capteur à interfacer au niveau électrique, le processeur de module Yoctopuce offre des comportements prédéfinis assez avancés, comme l'enregistrement de données et des automatismes temporels.
Le processeur utilisé dans les modules Yoctopuce est minuscule: il n'y a pas la place pour un système d'exploitation comme Linux. Le comportement des modules Yoctopuce est dicté par des machines à états, comme un automate. Grâce à ceci, leur comportement ne change pas dans la durée et ne nécessite pas de maintenance. Mais le prix à payer, car il y a toujours un prix à payer, c'est que l'utilisateur ne peut pas changer le comportement d'un module Yoctopuce: il n'est pas possible d'y installer ses propres applications.
Types de modules et interactions
Les modules Yoctopuce de base peuvent être classés en trois familles:
- Les capteurs, qui servent à mesurer une caractéristique physique
- Les actuateurs, qui servent à agir sur l'environnement
- Les modules d'interfaces, qui servent à communiquer avec d'autres appareils électroniques
Un capteur, un actuateur et un module d'interface
Nos modules sont donc des briques qui remplissent chacune une fonction bien précise. Elles peuvent être combinées ensemble et avec un logiciel pour en faire un produit fini, mais elles ne sont pas en soi des produits complets et encore moins des solutions clef en main. Par exemple, nos capteurs de température n'ont pas d'écran car ils ne servent pas à afficher la température, ils servent à la mesurer. Pour l'afficher, il faut rajouter un écran et écrire programme qui lit la valeur du capteur de température et l'affiche sur l'écran en utilisant la librairie de programmation Yoctopuce.
Pour l'utilisateur qui intègre nos capteurs dans son projet, un module Yoctopuce se présente sous plusieurs facettes. D'une part, on peut interagir avec le module lui-même, par exemple pour détecter sa présence, lire sa consommation électrique ou lui attribuer un nom. D'autre part, on peut interagir avec chaque fonction de mesure offerte par le capteur. Par exemple, un Yocto-Thermocouple offre deux canaux de mesure de température indépendants. L'interface de chacun de ces canaux sera d'ailleurs exactement identique à celle utilisée pour la mesure de température faite par un Yocto-PT100. Cela va même plus loin: les interfaces permettant de gérer les différents modules ont toutes un fonctionnement semblable. Si vous savez faire fonctionner un module Yoctopuce particulier, il y a de grandes chances que vous arriviez à faire marcher les autres sans même lire la doc :-)
De même, les actuateurs offrent un ou plusieurs canaux de sortie, qui sont utilisables indépendamment. Chaque canal peut recevoir un nom permettant d'identifier son rôle dans le système. Il est ainsi possible de programmer un système d'automatisation nécessitant plusieurs modules en se basant uniquement sur le rôle logique de chaque fonction, plutôt que de devoir lier chaque fonction à un module physique particulier.
Les modules d'interface Yoctopuce, comme le Yocto-Serial, servent à faciliter l'intégration de produits tiers qui ne seraient pas conçus sur un modèle aussi pratique que les modules Yoctopuce. Par exemple, il existe des capteurs effectuant des très bonnes mesures mais qui ne disposent malheureusement que d'une interface basique par le port série. Pour éviter de devoir gérer en logiciel la communication asynchrone et la gestion du protocole propriétaire du capteur, il est possible de configurer nos modules d'interface pour qu'ils le prennent en charge de manière autonome. Ils peuvent alors offrir les mêmes fonctionnalités que les autres capteurs Yoctopuce: donner à tout moment la dernière valeur valeurs mesurée, effectuer un enregistrement des mesures, sans que ne programme principal n'ait à interroger explicitement le capteur.
Connexion
un module Yoctopuce branché par USB
Par USB
Tous nos modules utilisent le même type d'interface USB. Il s'agit de notre propre protocole, qui réutilise la couche USB HID présente dans tous les systèmes d'exploitation. Le gros avantage de cette solution est qu'il n'est pas nécessaire d'installer un driver pour communiquer avec un module Yoctopuce, puisque la couche HID est toujours là. Il suffit d'ajouter dans votre programme de contrôle notre librairie, fournie en format source, pour qu'il puisse s'adresser directement aux modules Yoctopuce.
L'utilisation d'un protocole HID, ainsi que le fait que nos modules fonctionnent en USB 1.1 Full speed, limite la vitesse de transfert maximale avec nos modules. Mais cette limitation n'est pas généralement contraignante pour le type de modules que nous produisons: il n'est vraiment pas nécessaire de communiquer à 1,25 Go/s pour commuter un relais ou lire une température. Cette solution a par contre un énorme avantage par rapport aux nombreux produits basés sur un port série virtuel émulé sur USB: chaque module peut être identifié et inventorié de manière unique par son numéro de série, et peut être déconnecté et reconnecté à volonté à n'importe quel port USB d'une même machine sans que cela n'influe sur son identification. Fini les problèmes de prolifération de ports COM virtuels :-)
Par le réseau
Il existe une quatrième famille de modules Yoctopuce: les YoctoHubs. Ils servent à étendre l'utilisation des modules Yoctopuce pour pouvoir les contacter à travers un réseau plutôt que par un câble USB. On peut brancher un ou plusieurs modules au YoctoHub, et le YoctoHub se connecte au réseau, soit par Ethernet, soit par le WiFi, soit par un réseau cellulaire GSM.
Les YoctoHubs sont conçus selon la même philosophie que les autres modules Yoctopuce: il ne s'agit pas de mini-PC Linux, mais de simples interfaces réseau avec quelques paramètres simples à configurer et un comportement immuable. Au niveau de l'interaction avec les modules depuis le programme de contrôle, il n'y a quasiment aucune différence entre l'utilisation d'un module branché par USB ou sur le réseau local. Les appels à la librairie de programmation restent identiques, il suffit d'indiquer l'adresse IP ou le nom du YoctoHub à l'initialisation.
Un module Yoctopuce connecté au réseau via un YoctoHub
Les Yoctohub font plus que proposer un interface réseau pour les modules Yoctopuce: ils offrent aussi une interface web basique pour interagir avec les modules. Et surtout, il sont capables de poster les mesures des modules qui leur sont raccordés à travers Internet sur un service de Cloud, ou sur votre propre serveur réseau, et ce de manière complètement autonome. Nous aurons l'occasion de traiter ce sujet dans un article ultérieur de cette série.
Outils pour accéder aux modules
Répétons-le: les modules Yoctopuce sont avant tout prévus pour être utilisés depuis vos propres programmes. Pour cela, nous fournissons notre librairie de programmation pour une douzaine de langages de programmation différents. A quelques exceptions près, toutes les librairies sont du même niveau et offrent autant que possible les même fonctionnalités. Dans chaque librairie, vous trouverez un exemple pour utiliser chaque module Yoctopuce.
Tous les modules Yoctopuce peuvent être configurés à travers une interface Web. Si vous utilisez un module à travers le réseau, c'est le YoctoHub qui offre directement cette interface web. Si vous avez branché votre module directement par USB, nous proposons le programme VirtualHub qui est l'équivalent software d'un YoctoHub. Le VirtualHub est disponible pour pour Windows, Linux et OS X. Non seulement il permet d'obtenir la même interface Web que celle offerte par un YoctoHub, mais il offre aussi les mêmes fonctionnalités réseau. Une fois le VirtualHub lancé, vous pourrez y accéder à l'adresse http://127.0.0.1:4444 et commencer à configurer vos modules connectés.
L'interface web pour configurer les modules Yoctopuce
Pour vos tests et vos configurations initiales, vous pouvez aussi utiliser notre librairie de ligne de commande. Que ce soit de manière interactive ou à l'aide de scripts, vous pouvez utiliser cette interface par commandes pour interroger les capteurs et les configurer. Referez-vous à la documentation en ligne pour plus de détails.
A suivre...
Nous continuerons cette série par différents exemples typiques de l'utilisation de nos modules: mesures, alarmes, etc. N'hésitez pas à mettre un commentaire à cet article si vous désirez qu'on approfondisse un sujet en particulier !