Même au temps des objets connectés, il existe des applications d'automatisation et de mesure qui demandent à pouvoir fonctionner de manière entièrement autonome, sans aucune connection réseau quelle qu'elle soit. On nous a récemment demandé comment réaliser avec nos capteurs un tel enregistreur de données autonome, qui ne soit pas connecté mais dont on pourrait relever les données à l'aide d'une clé USB par exemple. Nous allons donc traiter cet exemple en détail, et en profiter pour tester un relativement nouveau mini-PC que nous venons de découvrir...
Il n'est pas compliqué d'enregistrer les mesures d'un capteur Yoctopuce: tous les capteurs sont capable de le faire eux-même, grâce à la mémoire flash intégrée. Mais il y a deux problèmes annexes à résoudre pour cette application:
- Pour sortir les données de la mémoire flash des modules et faciliter leur traitement ultérieur, il faudra être capable de détecter l'insertion d'une clé USB, de relire les données enregistrées par chaque capteur, puis de les retranscrire sur la clé USB dans un tableau unique au format CSV. C'est le genre d'opérations qu'on peut réaliser sur un mini-PC, en Python par exemple.
- Pour que les données soient correctement horodatées, il faut une source de temps absolue. Lorsque qu'on n'a pas de réseau à disposition, la seule solution est d'avoir une horloge à quartz protégée par une batterie: c'est ce qu'on appelle une RTC (Real time clock). Les vrais ordinateurs en ont tous une, mais c'est beaucoup plus rare sur les mini-PC qu'on aimerait pouvoir utiliser pour ce genre d'application.
Le CuBox-i2eX: un mini-PC avec horloge RTC
En cherchant un mini-PC qui incluait une horloge RTC, nous sommes tombés sur la la société SolidRun, qui fait plusieurs de mini-PC un peu plus soignés que la concurrence. Dans la catégorie des mini-PC ARM à basse consommation, on trouve plusieurs variantes basées un processeur NXP iMX6, avec 1 à 4 coeurs. Vous avez le choix entre le board de développement dans le style du Raspberry Pi, ou une petite machine compacte livrée dans un boîtier avec un bloc secteur.
Le CuBox-i2eX de SolidRun est l'un des rares mini-PC ARM à faible consommation doté d'une horloge RTC
La version qui nous intéresse le plus, avec RTC, boîtier et bloc secteur coûte $119. C'est plus cher qu'un Raspberry Pi ou qu'un BeagleBone, mais le fait d'avoir un RTC intégré fait toute la différence. SolidRun fournit plusieurs images Linux supportées à choix, dont Linux Debian. Le système d'installation proposé, appelé Ignition est très efficace. En suivant les instructions, nous avons obtenu rapidement et sans obstacle une Debian prête à l'emploi sur la machine. Comme le but est de mettre en place un système sans clavier ni écran, nous avons choisi la distribution sans l'interface graphique.
Réalisation
Principe
Le scénario est le suivant:
- En temps normal, le capteur Yoctopuce enregistre les mesures en interne. Le PC ne sert qu'à fournir l'heure au capteur pour l'horodatage
- De temps à autre, un opérateur vient relever les données avec une clé USB. La clé USB contient un fichier indiquant la période de temps pour laquelle on désire récupérer les mesures. L'opérateur branche la clé et peut s'assurer à l'aide d'un mini-écran USB que le transfert se déroule comme prévu. Les données sont stockées dans un fichier CSV portant le nom spécifique du capteur sauvegardé. L'opérateur est informé lorsqu'il peut retirer la clé USB.
Comme un mini-PC n'a pas d'écran, nous avons été obligé d'introduire dans le système un petit écran USB (le Yocto-MiniDisplay) pour que l'opérateur puisse avoir du feedback sur l'opération. L'écran peut être attaché au mini-PC, ou peut être amené par l'opérateur avec la clé USB, comme illustré ci-dessous:
Les éléments de notre système de récupération des données enregistrées sans réseau
Implémentation
Pour détecter facilement l'insertion de la clé USB, il faut installer le package usbmount avec la commande:
sudo apt-get install usbmount
Grâce à cela, la clé USB apparaîtra magiquement sous /media/usb lorsqu'elle sera branchée. On demande à l'opérateur de créer sur la clé un fichier texte appelé autoload.txt qui contient simplement la date à partir de laquelle il désire récupérer les données, au format AAAA-MM-JJ. Toutes les secondes, le programme python va vérifier si ce fichier apparaît sous /media/usb, et si c'est le cas, la procédure de récupération des données est lancée.
Notre système d'enregistrement autonome, avec récupération des données par clé USB
La lecture des données est faite capteur par capteur, en utilisant la méthode get_recordedData(). Comme cette opération peut prendre du temps, on affiche sur le Yocto-MiniDisplay une barre de progression globale durant le chargement de tous les capteurs, à l'aide des primitives graphiques de l'écran. Le code n'est pas très compliqué, mais il est néanmoins un peu long pour être commenté ligne par ligne dans cet article. Vous le trouverez intégralement sur GitHub, libre à vous de le personnaliser selon vos besoins.
Pour réconcilier les données retournées par tous les capteurs dans un seul tableau CSV, on doit tenir compte du fait que tous les capteurs n'enregistrent pas forcément les données à la même vitesse. On commencer donc par établir la liste de tous les timestamps trouvés parmi toutes les mesures enregistrées, on la trie, et on génère ensuite le fichier CSV avec une ligne par timestamp, en vérifiant pour chaque capteur si il dispose d'une mesure pour cette heure-là. Dans le cas contraire, la cellule est laissée vide.
Le fichier est écrit ligne par ligne, avec à nouveau une barre de progression globale. A la fin, un message invite l'opérateur à retirer la clé. Les réglages standards de usbmount garantissent que les données sont écrites sur le disque USB sans délai, de sorte à ce qu'aucune opération manuelle ne soit nécessaire avant de retirer le clé.
Démonstration
Et voici le système en fonctionnement:
Conclusion
Le cocktail CuBox + modules Yoctopuce s'est avéré très efficace sur ce projet, réalisé en moins d'une journée. L'utilisation du Yocto-MiniDisplay a permis d'ajouter une petite touche de convivialité, permettant une utilisation du mini-PC un peu plus rassurante pour l'opérateur.
Nous n'avons constaté aucun problème USB, ni aucun autre problème de fiabilité avec cette petite machine. Par ailleurs, lorsque le système est en mode normal (enregistrement autonome par les capteurs Yoctopuce), le CuBox-i2eX est très économe en énergie: il ne consomme que 200mA, dont 30mA servent à alimenter le capteur Yoctopuce. Cela représente à peine 1 Watt. C'est mieux que la plupart des mini-PC que nous avons essayé. Nous allons donc certainement le réutiliser pour d'autres applications...