🛠 Surveiller température et fréquence CPU

Raspberry Pi 3 Model B (model-3b) · avance · Schéma : IMG-model-3b-avance-2-model3b-surveillance-thermique.svg — courbe de température du BCM2837 avec zones 80 °C (ralentissement progressif) et 85 °C (bridage matériel CPU+GPU), sondes vcgencmd et /sys/class/thermal

Objetivos

Implementar la monitorización de la temperatura y la frecuencia de los núcleos del Raspberry Pi 3 Model B. Conocer los umbrales del 3B: reducción progresiva de los núcleos Arm entre 80 °C y 85 °C, limitación por hardware de CPU + GPU a 85 °C (sin límite suave por software en este modelo). Interpretar el indicador get_throttled y registrar el historial para dimensionar una carcasa o un ventilador.

Material

Código completo

#!/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

Verificación esperada

En reposo, vcgencmd measure_temp y el archivo sysfs proporcionan la misma temperatura (±1 °C), por ejemplo, 40–45 °C. Durante stress --cpu 4, la frecuencia scaling_cur_freq desciende por debajo de 1200000 kHz cuando la temperatura supera los 80 °C, y vcgencmd get_throttled pasa a un valor distinto de cero cuyo bit de limitación está activo. Tras detener la carga, la temperatura y la frecuencia descienden. El registro permite trazar la curva y comparar la carcasa abierta/cerrada.

Errores frecuentes

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales