Envoyer des valeurs avec les modules de communication

Envoyer des valeurs avec les modules de communication

Les modules de communication série Yoctopuce comme le Yocto-RS485-V2 et le Yocto-I2C sont capables d'exécuter de manière autonome des petits protocoles de communication, par exemple pour interroger des capteurs. On nous a récemment demandé s'il était possible d'utiliser une valeur reçue d'un capteur dans un message envoyé ultérieurement. Comme souvent, la réponse est: maintenant, oui, c'est possible...


Dans le cas qui nous était demandé, il s'agissait de transmettre une mesure d'humidité effectuée par un capteur I2C à un capteur de gaz connecté sur le même bus, afin de permettre à ce dernier d'effectuer une compensation en humidité. Un protocole I2C de lecture permettait d'obtenir la mesure d'humidité voulue, mais jusqu'à présent il manquait une manière d'envoyer un message paramétrique au deuxième capteur pour paramétrer la valeur de compensation.

La nouvelle commande writeVar


Si vous mettez à jour le firmware de vos modules, vous trouverez désormais dans le drop-down des commandes que vous pouvez ajouter à vos jobs une nouvelle commande writeVar. Elle se comporte comme la commande write (ou writeLine sur le Yocto-I2C), mais va préalablement effectuer des substitutions dans la chaîne envoyée, en remplaçant les expressions suivantes:

  • ($x:INT) permet d'envoyer la valeur de la variable $x sous forme d'entier (décimal)
  • ($x:FLOAT) permet d'envoyer la valeur de la variable $x sous forme de nombre réel
  • ($x:BYTE) permet d'envoyer la valeur de la variable $x sous forme d'un octet hexadécimal (deux chiffres hexadécimaux)
  • ($x:WORD) et ($x:WORDL) permettent d'envoyer la valeur de la variable $x sous forme d'un word hexadécimal (quatre chiffres hexadécimaux). Le suffixe L permet l'envoi au format little-endian, c'est-à-dire avec l'octet de poids fort à la fin.
  • ($x:DWORD) et ($x:DWORDL) permettent d'envoyer la valeur de la variable $x sous forme d'un dword hexadécimal (huit chiffres hexadécimaux). Le suffixe L permet l'envoi au format little-endian, c'est-à-dire avec l'octet de poids fort à la fin.
  • ($x:FLOAT32B) et ($x:FLOAT32L) d'envoyer la valeur de la variable $x en hexadécimal sous forme de nombre à virgule flottante selon le standard IEEE 754 sur 32 bits, respectivement avec les octets ordonnés en big-endian ou little-endian

Pour s'assurer que cette nouvelle fonctionnalité n'interférerait pas avec les protocoles existants de nos clients, nous avons choisi d'introduire une nouvelle commande plutôt que de faire reconnaître ces expressions dans la commande write. Si vous avez besoin d'un saut de ligne après le writeVar, ajoutez un writeLine avec un contenu vide. Exception: pour le Yocto-I2C, comme l'envoi d'un message doit être atomique, le writeVar ne nécessite pas de writeLine.

Petit exemple


Par exemple, si vous mettez le job ci-dessous dans un Yocto-RS232

expect ($a:FLOAT) + ($b:FLOAT) compute $res = $a + $b writeVar result: ($res:FLOAT) writeLine


votre Yocto-RS232 sera capable de répondre à des additions:
Résultat de notre protocole de test
Ce qui est naturellement totalement inutile hors du contexte de cet exemple :-)

Limitations

Pour l'instant, cette fonctionnalité est restreinte au cas des write simples. Si vous deviez en avoir besoin pour des transmissions binaires ou en MODBUS, faites-nous signe sur support@yoctopuce.com.

Commenter aucun commentaire Retour au blog












Yoctopuce, get your stuff connected.