Raspberry Pi: monitoring de l’utilisation CPU grâce au GPIO


Si vous possédez un Raspberry Pi, vous connaissez certainement l’utilité des pins verticaux présents dans un des coins de la carte. Ils forment en effet le GPIO de celle-ci.
En récupérant quelques leds (facilement trouvables dans de vieilles unités centrales par exemple), j’ai pu commencer à programmer (en Shell scripts) quelques petits programmes afin de contrôler l’allumage et l’extinction de ces leds. En tout cas en Shell script, c’est en effet extrêmement simple: voici en effet les seules commandes permettant de contrôler une led (connectée au pin gpio4 par exemple):
# A faire une seule fois au début du script echo "4" > /sys/class/gpio/export echo "out" > /sys/class/gpio/gpio4/direction # Allumer la led: echo "1" > /sys/class/gpio/gpio4/value # Eteindre la led: echo "0" > /sys/class/gpio/gpio4/value
Plutôt simple, non ? En utilisant ces commandes, on peut alors faire des tas de choses, comme par exemple monitorer l’utilisation CPU du Raspberry Pi avec plusieurs leds ! Tout d’abord, voici ce à quoi cela va ressembler (la vidéo montre le fonctionnement avec 3 leds, mais le script fonctionne bien avec 7 leds):
Le principe est très simple. Voici les grandes lignes du code (le script complet est disponible plus bas):
# Au début du script, on déclare toutes les leds connectées. # Le "2> /dev/null" permet de masquer les éventuelles erreurs echo "4" > /sys/class/gpio/export 2> /dev/null [...] # Les fonctions principales du script: function ON { [...] } function OFF { [...] } function allON { [...] } function allOFF { [...] } function flash { [...] } # Permet de faire clignoter les leds [...] while [ ${i} -lt 200 ] # On limite le nombre d'itérations [...] # Calcul de la valeur actuelle de l'utilisation CPU idle=`vmstat 2 3 | tail -n1 | sed "s/ */ /g [...] # Suit ensuite l'ensemble de cas pour l'allumage des leds
Attention: le numéro de la led correspond au numérotage final des leds, de 1 à 7 dans le cas de 7 leds. Il est à différentier du numéro GPIO, correspondant au pin sur lequel est branchée la led correspondante. Pour faciliter les choses, j’ai laissé dans le script mon tableau de correspondance:
################# # 1 | 23 # # 2 | 22 # # 3 | 17 # # 4 | 4 # # [...] # #################
Le code sera bien sûr à adapter selon le nombre de leds connectées au Raspberry, et selon les connexions des leds sur les pins. Ce code peut bien évidemment être optimisé (si vous trouvez des améliorations, n’hésitez pas à les soumettre en commentaire !). Le plus dur ici était de trouver une commande permettant de récupérer facilement l’utilisation CPU actuelle. Dans ce script, on récupère la valeur actuelle idle qu’on soustrait à 100.
Pour l’utiliser, copiez simplement ce code dans un fichier sur votre Raspberry, branchez les leds, adaptez-le en conséquence, puis lancez-le grâce à la commande
sudo ./script.sh
Récupérer le script Shell sur Pastebin
(source image 1)