🛠 Surveiller température et fréquence CPU sous contrainte
Objectifs
Instrumenter l'Orange Pi 3B (4× Cortex-A55 jusqu'à 1,8 GHz, RK3566 en 22 nm) : lire les températures des zones thermiques, observer la fréquence réelle de chaque cœur, déclencher un seuil d'alerte et tester le refroidissement passif vs ventilateur sur le connecteur 2 broches.
Matériel
- Orange Pi 3B sous Armbian, alimentation 5 V / 3 A
- Dissipateur adhésif et/ou ventilateur 5 V sur le connecteur 2 broches ventilo
- >
Code complet
# 1. Températures (degrés milli-C) et politiques thermiques
paste <(for z in /sys/class/thermal/thermal_zone*/type; do cat $z; done) \
<(for z in /sys/class/thermal/thermal_zone*/temp; do echo "scale=1;$(cat $z)/1000"|bc; done)
# 2. Fréquence réelle par cœur pendant une charge
sudo apt install stress-ng
(trap 'kill %1' INT; stress-ng --cpu 4 --timeout 60s) &
while sleep 2; do grep -H . /sys/devices/system/cpu/cpufreq/policy*/scaling_cur_freq; done
# 3. Alerte simple toutes les 10 s
while sleep 10; do
t=$(($(cat /sys/class/thermal/thermal_zone0/temp)/1000))
[ $t -gt 75 ] && logger -p user.warning "CPU trop chaud : ${t}°C"
done
# 4. Compteur de passages en limitation thermique (throttle)
grep . /sys/class/thermal/thermal_zone*/policy 2>/dev/null
sudo dmesg | grep -i -e thermal -e throttle
Vérification attendue
Sous stress-ng --cpu 4, scaling_cur_freq grimpe vers 1,8 GHz puis se stabilise ; sans dissipateur la fréquence redescend et dmesg peut afficher des messages thermiques. Avec dissipateur/ventilateur, la température plafonne plus bas et la fréquence tient plus longtemps.
Erreurs fréquentes
- Lire
/sys/class/thermal/thermal_zone0/tempsans diviser par 1000 : les valeurs sont en milli-degrés. - Se fier à
cpufreq-infoune seule fois : la fréquence est instantanée, il faut échantillonner sous charge. - Alimenteur 5 V / 2 A : les bridages peuvent venir d'une sous-alimentation, pas du thermique.
- Inverser le ventilateur 2 broches (polarité) ou le brancher sans masse commune.
- Comparer les zones :
soc-thermal(die) etpmu-thermalne montent pas à la même vitesse.
Autres tutoriels pour cette carte
- Faire clignoter une LED via le GPIO avec libgpiod
- Lire un bouton poussoir et afficher l'état dans la console
- Premier script Python : bouton + LED avec python3-libgpiod
- Variation d'intensité d'une LED avec un signal PWM
- Interroger un capteur I2C sur les broches 3/5 du connecteur
- Configurer Ethernet gigabit et Wi-Fi puis se connecter en SSH
Exemples de code pour cette carte
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash