Calculs dans les interfaces série Yoctopuce

Calculs dans les interfaces série Yoctopuce

Il y a quelques mois, nous vous indiquions comment utiliser un module d'interface série Yoctopuce pour interroger automatiquement un capteur série TTL, SPI, RS232 ou RS485. Cette semaine, nous avons encore enrichi cette fonctionnalité pour vous permettre d'effectuer directement des calculs arithmétiques dans le module Yoctopuce, afin d'obtenir des valeurs directement utilisables avec un callback HTTP par exemple.



Cette nouvelle fonctionnalité apparaîtra dans vos modules Yoctopuce après avoir mis à jour le firmware à la révision 35770 ou suivante, et mis à jour votre VirtualHub à une version récente. Comme il s'agit d'un nouveau type de commande qui peut être exécutée par les tâches autonomes du module, vous trouverez cette fonction dans la définition des "jobs", dans le panneau de configuration du module. Si vous n'êtes pas sûr de connaître le mécanisme de définition des jobs, commencez par relire l'article précédent sur ce sujet.

Lorsque vous définissez un protocole personnalisé (Use a custom protocol dans l'interface) pour décoder des valeurs, vous deviez jusqu'à présent affecter les valeurs décodées directement à l'un des neuf genericSensor disponibles sur le module. Par exemple, pour lire les données de capteurs d'oxygène Luminox, on utilisait la chaîne suivante:


expect "O ($1:FLOAT) T ($2:FLOAT) P ($3:FLOAT) % ($4:FLOAT).*"
 


qui affectait directement les quatre mesures aux quatre premiers genericSensors.

Désormais, vous avez la possibilité de stocker les valeurs décodées dans des variables intermédiaires, que vous pourrez ensuite combiner si nécessaire pour effectuer des calculs complémentaires:


expect "O ($ppO2:FLOAT) T ($temp:FLOAT) P ($press:FLOAT) % ($o2:FLOAT).*"
 


Par exemple, vous pourriez convertir la température en degrés Fahrenheit avec la formule


compute "$2 = 1.8 * temp + 32"
 



Expressions reconnues


Vous pouvez aussi utiliser des expression arithmétiques beaucoup plus sophistiquées. Tous les opérateurs mathématiques usuels sont disponibles, avec l'ordre de précédence suivant:

**met à la puissance
~ + - notcomplément, plus/moins unaire, non logique
* / % //multiplie, divise, modulo et division entière
+ -ajoute, soustrait
>> <<décalage de bits à droite et à gauche
&ET bit-par-bit
| ^OU, XOR bit-par-bit
< <= >= >compare
== <> !=test d'égalité ou de différence
andET logique
orOU logique


Si vous le préférez, les symbols alternatifs suivants peuvent être utilisés:

div modpeuvent remplacer / et %
! && ||peuvent remplacer not, and, or


Les opérateurs de comparaison et les opérateurs logiques sont destinés à être utilisés avec l'opérateur d'évaluation conditionnel:


compute "(temp &gt; 0 ? log(temp) : -9999)"
 


Les constantes et fonctions mathématiques classiques sont disponibles aussi:

pi eles constantes universelles
cos sin tanfonctions trigonométriques
acos asin atan atan2fonctions trigonométriques inverses
cosh sinh tanhfonctions hyperboliques
exp log log10 pow sqr sqrtpuissance et fonctions logarithmiques
ceil floor round frac fmodfonctions d'arrondi
fabs min max isnan isinffonctions de numération



Fonctions arbitraires


Si besoin, typiquement pour appliquer des facteurs de correction en température, il est même possible de définir vos propres fonctions par interpolation linéaire entre des points définis. Vous pouvez par exemple définir une fonction fcorr de la manière suivante:

-40 : 1.3 -30 : 1.22 -20 : 1.15 -10 : 1.08 -5 : 1.06 -3 : 1.04 -2 : 1.02 -1 : 1.01 0.1 : 1 0 : 0.99 10 : 0.2 20 : 0.02 30 : 0.002 40 : 2e-4 50 : 1.4e-5 60 : 0


Dans votre protocole, vous pouvez alors l'utiliser dans une commande compute comme suit:


compute "$3 = ppO2 - fcorr(temp)"
 



Conclusion


Grâce à cette nouvelle possibilité, vos interface série Yoctopuce seront désormais capable d'extraire directement les mesures de vos capteurs série les plus exotiques, sans devoir les retravailler par logiciel après-coup. Cela vous permettra de stocker les résultats finaux sur l'enregistreur de données du module, mais aussi de les utiliser directement avec un YoctoHub-Ethernet ou un YoctoHub-GSM-3G par exemple, avec un callback HTTP, MQTT, InfluxDB ou autre...

Commenter aucun commentaire Retour au blog












Yoctopuce, get your stuff connected.