🛠 Surveiller température et fréquence CPU
Objectifs
Mettre en place une surveillance de la température et de la fréquence des cœurs du Raspberry Pi 3 Model B. Connaître les seuils du 3B : ralentissement progressif des cœurs Arm entre 80 °C et 85 °C, bridage matériel CPU + GPU à 85 °C (pas de limite logicielle douce sur ce modèle). Interpréter le drapeau get_throttled et journaliser l'historique pour dimensionner un boîtier ou un ventilateur.
Matériel
- Raspberry Pi 3 Model B (attention : les cartes pré-2019 utilisent le BCM2837 sans dissipateur, plus sensible à la chauffe que le BCM2837B0 à capot métallique)
- Raspberry Pi OS Lite, outils inclus :
vcgencmd,/sys/class/thermal - Option : dissipateurs ou petit ventilateur USB pour tester l'effet du refroidissement
- Chargeur de test :
stress(sudo apt install -y stress)
Code complet
#!/usr/bin/env bash
# thermal_log.sh — échantillonne température, fréquence et drapeaux de bridage
# seuils du 3B : 80 °C ralentissement progressif, 85 °C bridage dur CPU+GPU
while true; do
temp_c=$(vcgencmd measure_temp | grep -oE '[0-9]+\.[0-9]+')
temp_sysfs=$(($(cat /sys/class/thermal/thermal_zone0/temp) / 1000))
freq=$(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq)
throttled=$(vcgencmd get_throttled | cut -d= -f2)
echo "$(date -Is) temp_C=$temp_c temp_sysfs=$temp_sysfs freq_kHz=$freq throttled=$throttled"
sleep 5
done | tee -a /var/log/thermal.log
# Dans un autre terminal, provoquer la montée en température :
# stress --cpu 4 --timeout 300
# Decoder un drapeau (ex. 0x50000 = sous-tension + bridage) :
# printf '%x\n' $((0x50000 & (1<<0))) # bit 0 : sous-tension
Vérification attendue
Au repos, vcgencmd measure_temp et le fichier sysfs donnent la même température (±1 °C), par exemple 40–45 °C. Pendant stress --cpu 4, la fréquence scaling_cur_freq descend sous 1200000 kHz quand la température franchit 80 °C, et vcgencmd get_throttled passe à une valeur non nulle dont le bit de bridage est armé. Après arrêt de la charge, température et fréquence redescendent. Le journal permet de tracer la courbe et de comparer boîtier ouvert/fermé.
Erreurs fréquentes
- Paniquer devant un
throttlednon nulle : c'est un historique ; redémarrer ou lire les bits pour distinguer sous-tension (bit 0) et bridage thermique. - Confondre sous-tension et surchauffe : un câble micro-USB fin déclenche les mêmes bridages ; vérifier d'abord l'alimentation 2,5 A.
- Attendre 1,4 GHz : le 3B est plafonné à 1,2 GHz (le B0 le permet, pas le firmware du 3B).
- Lire un seul instantané : le bridage est transitoire ; journaliser toutes les 5 s avec le script.
- Boîtier fermé sans flux d'air sur une carte pré-2019 sans capot : bridage garanti en charge soutenue — c'est précisément ce qui a motivé le passage au BCM2837B0.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
led_blink.pyPythonbutton_led.pyPythonservo_sweep.pyPythondht_temp.pyPythonoled_i2c.pyPythonmcp3008_read.pyPython