Files

101 lines
4.0 KiB
Markdown

# Relever la température du SoC d'un Raspberry Pi
Surveiller la température de votre Raspberry Pi permet d'anticiper les ralentissements et d'éviter les dommages matériels. **À partir de 80 °C, le Pi réduit automatiquement sa fréquence** (throttling) pour se protéger ; au-delà de 85 °C, le throttling devient plus agressif. Les composants ne risquent pas de griller dans des conditions normales — la protection thermique est intégrée — mais une température qui plafonne haut indique qu'un meilleur refroidissement s'impose.
À noter : sur un Raspberry Pi, le CPU et le GPU partagent le même SoC (Broadcom). Les deux commandes ci-dessous renvoient donc des valeurs quasi identiques, issues de capteurs très proches. On parle plus justement de « température du SoC ».
Tests réalisés sur un Raspberry Pi 4 sous Raspberry Pi OS Bookworm.
## Fondamentaux
La température rapportée par le firmware VideoCore est accessible via `vcgencmd` :
```
$ vcgencmd measure_temp
temp=43.0'C
```
La température exposée par le kernel se trouve dans `/sys/class/thermal/thermal_zone0/temp`, en millièmes de **°C** :
```
$ cat /sys/class/thermal/thermal_zone0/temp
44790
```
Pour l'afficher en **°C**, on divise par 1000 :
```
$ awk '{printf("temp=%.1f°C\n", $1/1e3)}' /sys/class/thermal/thermal_zone0/temp
temp=44.7°C
```
## Script
Le script ci-dessous affiche les deux mesures côte à côte, avec un formatage homogène.
```bash
#!/bin/bash
# Script : piSensorsTemp
# Objet : Afficher la température du SoC d'un Raspberry Pi (2/3/4/5)
# Auteur : Cédric Abonnel — https://www.abonnel.fr — licence CC BY
# ------------------------------------------------------------------
echo "$(date) @ $(hostname)"
echo "-------------------------------------------"
# Température rapportée par le firmware (VideoCore)
gpu_temp=$(vcgencmd measure_temp | sed "s/'C/°C/")
echo "Firmware (VideoCore) => $gpu_temp"
# Température rapportée par le kernel (zone thermique cpu-thermal)
for zone in /sys/class/thermal/thermal_zone*; do
if [[ "$(cat "$zone/type" 2>/dev/null)" == "cpu-thermal" ]]; then
awk '{printf("Kernel (cpu-thermal) => temp=%.1f°C\n", $1/1e3)}' "$zone/temp"
break
fi
done
```
Trois améliorations par rapport à la version originale :
- `vcgencmd` est appelé sans chemin absolu — `/opt/vc/bin/` n'existe plus depuis Raspberry Pi OS Bullseye et a totalement disparu sur le Pi 5.
- La zone thermique est détectée dynamiquement plutôt que codée en dur sur `thermal_zone0`, ce qui évite les surprises selon les configurations kernel.
- Le symbole degré est harmonisé (`°C` partout) via un simple `sed` sur la sortie de `vcgencmd`.
Rendre le script exécutable :
```
$ chmod +x piSensorsTemp
$ ./piSensorsTemp
```
Rafraîchir l'affichage toutes les secondes (l'option `-d` surligne les valeurs qui changent) :
```
$ watch -n 1 -d ./piSensorsTemp
```
Exemple d'exécution :
```
$ ./piSensorsTemp
vendredi 15 mai 2026, 11:25:31 (UTC+0200) @ rpitst
-------------------------------------------
Firmware (VideoCore) => temp=43.0°C
Kernel (cpu-thermal) => temp=43.3°C
```
## Si la température est trop haute
Quelques pistes si vous observez du throttling régulier :
- **Dissipateurs passifs** : utiles, mais insuffisants seuls sur un Pi 4 sous charge soutenue.
- **Ventilateur** : la solution la plus efficace ; le boîtier officiel du Pi 4 en intègre un, piloté par le kernel.
- **Boîtier dissipateur** (type Argon ONE, FLIRC) : tout le boîtier sert de radiateur.
- **Vérifier la ventilation de la pièce** et éviter les boîtiers fermés sans circulation d'air.
## Pour aller plus loin
- [How to find out Raspberry Pi GPU and ARM CPU temperature on Linux](https://www.cyberciti.biz/faq/linux-find-out-raspberry-pi-gpu-and-arm-cpu-temperature-command/) — l'article qui m'a servi de point de départ.
- [lm-sensors does not detect integrated temperature sensor on Raspberry Pi](https://github.com/lm-sensors/lm-sensors/issues/30) — pourquoi `sensors` ne suffit pas sur Pi.