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

This article is available in english: Raspberry Pi: CPU usage monitoring using GPIO
Nouvelle version du script ! Maintenant avec 7 leds !

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)