Après 15 ans d'articles hebdomadaires, on commence à avoir de la peine à trouver de nouveaux sujets intéressants. En cherchant l'inspiration, on est tombé sur un vieil article de 2012 dans lequel on avait réalisé un VU-mètre physique pour afficher l'utilisation du CPU et on s'est dit que, actuellement, il y avait moyen de faire plus simple.
À l'époque nous n'avions pas encore notre librairie Python ni notre librairie en ligne de commande et nous avions bricolé une solution qui mixait du C++ et du Python. En gros, nous avions écrit deux petits programmes. Un en Python qui récupérait l'utilisation du CPU et un en C++ qui commandait le Yocto-Servo. La solution était un peu bout de bois mais fonctionnait.
Cette semaine, on va voir qu'on peut maintenant faire ça beaucoup plus simplement avec un seul programme en Python.
Le VU-mètre
Pour la partie physique, on va réutiliser le même VU-mètre. Pour rappel, le cadrant est un empilement de plaques en PVC que nous avons découpées au laser. L'aiguille du VU-mètre est fixée à un servomoteur qui est piloté par le Yocto-Servo.

L'explosé du VU-mètre
Récupérer l'utilisation du CPU
Il n'y a pas que Yotopuce qui a évolué, Python est devenu un langage plus populaire et il existe des libraires toutes faites pour presque n'importe quoi. En l'occurrence il existe désormais un package psutil qui permet de récupérer facilement l'utilisation du CPU sous Linux, mais aussi sous Windows.
Il faut simplement installer le package avec la commande "pip install psutil" et utiliser le code suivant:
...
cpu_usage = psutil.cpu_percent()
Contrôler le Yocto-Servo
Il n'est plus nécessaire de passer par une application C++, il suffit d'utiliser notre librairie Python.
Tout comme la librairie psutil, notre libraire est disponible sur PyPi et est instalable avec la commande "pip install yoctopuce".
On peut ensuite utiliser les mêmes méthodes que nous avions utilisées dans notre programme C++.
Notez que, si vous n'avez encore jamais utilisé nos modules, il est recommandé d'aller faire un tour sur notre page tutoriel pour se familiariser avec les concepts de nos librairies.
from yoctopuce.yocto_servo import *
...
errmsg = YRefParam()
if YAPI.RegisterHub("usb", errmsg) != YAPI.SUCCESS:
sys.exit("error: %s" % errmsg.value)
..
while True:
cpu_usage = psutil.cpu_percent()
cpu_pos = cpu_usage * 20 - 1000
try:
servo_cpu = YServo.FindServo(my_servo_hwid)
servo_cpu.move(cpu_pos, args.delay * 1000)
except Exception as e:
print("Unable to update cpu gauge: %s" % e)
Le code est assez simple:
- On importe "yocto_api" pour la classe YAPI et "yocto_servo" pour la classe YServo.
- On appelle YAPI.RegisterHub pour utiliser les ports USB.
- On récupère l'utilisation du CPU.
- On fait une règle de trois pour obtenir la position correspondante (-1000...+1000)
- On récupère l'objet YServo avec YServo.FindServo.
- On déplace le servomoteur à l'aide de la commande move.
Le code complet est disponible sur GitHub: https://github.com/yoctopuce-examples/CPUGauge.
Si vous l'examinez en détail, vous verrez qu'on a ajouté quelques fonctionnalités, comme l'affichage de l’utilisation du disque et la possibilité d'utiliser un YoctoHub au lieu du port USB.
Conclusion

Le VU-mètre
Voilà, 14 ans plus tard, on fait toujours la même chose... mais en mieux.
