🛠 Surveillance thermique et bridage : le sprint-marathon
Objectifs
Instrumenter la gestion thermique spécifique à la 3B+ : limite douce par défaut à 60 °C (temp_soft_limit, plafonnée à 70 °C) qui fait passer le CPU de 1,4 GHz à 1,2 GHz, puis bridage dur entre 80 et 85 °C. Vous apprendrez à lire température, fréquence et masque de bridage via vcgencmd, à générer une charge de test et à journaliser le tout avec systemd.
Matériel
- Carte type Raspberry Pi 3 Model B+ (idéalement avec dissipateur ou petit boîtier ventilé)
- Alimentation 5,1 V / 2,5 A (le bit d'sous-tension fausse les mesures)
sudo apt install -y sysbenchpour la charge de test
Code complet
#!/usr/bin/env bash
# thermal-watch.sh — journalise temperature, fréquence ARM et masque de bridage.
# vcgencmd parle au GPU : c'est la source exacte selon la doc officielle.
LOG=/var/log/thermal.csv
[ -f "$LOG" ] || echo "horodatage,temp_c,arm_mhz,throttled" > "$LOG"
while true; do
temp=$(vcgencmd measure_temp | cut -d= -f2 | tr -d "'C")
clk=$(( $(vcgencmd measure_clock arm | cut -d= -f2) / 1000000 ))
# Masque : bit 0 sous-tension ; bit 3 (valeur 8) fréquence bridsee ;
# bit 5 (32) sous-tension subie ; bit 6 (64) limite douce ; bit 8 (256) limite dure.
thr=$(vcgencmd get_throttled | cut -d= -f2)
echo "$(date -Is),${temp},${clk},${thr}" >> "$LOG"
printf "temp=%s C arm=%s MHz throttled=%s\r" "$temp" "$clk" "$thr"
sleep 1
done
# Lancer la surveillance et la charge en parallele
sudo ./thermal-watch.sh &
sysbench cpu --cpu-max-prime=20000 --time=600 run # 10 min de charge quad-core
# Attendu : 1400 MHz sous 60 C, puis 1200 MHz au-dessus (limite douce),
# puis bridage progressif 80-85 C. temp_soft_limit se regle dans config.txt.
Vérification attendue
Sous charge, le CSV montre le palier : fréquence à 1400 MHz tant que la sonde reste sous 60 °C, puis 1200 MHz avec le bit de limite douce qui s'allume dans get_throttled. Au repos, tout redescend. Un bit de sous-tension (bit 0/5) qui s'allume indique l'alimentation, pas la chaleur.
Erreurs fréquentes
- Confondre bridage thermique et sous-tension : le masque
get_throttleddistingue les deux — lire chaque bit. - Remonter
temp_soft_limitau-delà de 60 : possible jusqu'à 70 °C seulement, et « peut causer de l'instabilité » selon la doc ;force_turbo=1+over_voltage_*grave le bit d'overclock dans le SoC. - Mesurer avec
cat /sys/class/thermal/...et comparer au GPU : la référence officielle restevcgencmd measure_temp. - Boîtier fermé sans flux d'air : la masse thermique est une ressource qui s'épuise en quelques minutes de charge quad-core.
- Oublier d'arrêter le script de fond :
sudo pkill -f thermal-watch.sh; sinon le CSV grossit indéfiniment — penser à logrotate. - Alimentation de téléphone en 1 A : faux bridages permanents qui polluent les mesures.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
led_blink.pyPythonbutton_led.pyPythonservo_sweep.pyPythondht_temp.pyPythonoled_i2c.pyPythonmcp3008_read.pyPython