🛠 Surveiller température et fréquence CPU
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
- Raspberry Pi 3 Model B (atención: las tarjetas anteriores a 2019 utilizan el BCM2837 sin disipador, más sensible al calentamiento que el BCM2837B0 con tapa metálica)
- Raspberry Pi OS Lite, herramientas incluidas:
vcgencmd,/sys/class/thermal - Opcional: disipadores o pequeño ventilador USB para probar el efecto de la refrigeración
- Cargador de prueba:
stress(sudo apt install -y stress)
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
- Alarmarse ante un
throttleddistinto de cero: es un historial; reiniciar o leer los bits para distinguir entre subvoltaje (bit 0) y limitación térmica. - Confundir subvoltaje y sobrecalentamiento: un cable micro-USB fino provoca las mismas limitaciones; verificar primero la alimentación de 2,5 A.
- Esperar 1,4 GHz: el 3B está limitado a 1,2 GHz (el B0 lo permite, pero no el firmware del 3B).
- Leer una sola instantánea: la limitación es transitoria; registrar cada 5 s con el script.
- Carcasa cerrada sin flujo de aire en una tarjeta anterior a 2019 sin tapa: limitación garantizada bajo carga sostenida — esto es precisamente lo que motivó el cambio al BCM2837B0.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
led_blink.pyPythonbutton_led.pyPythonservo_sweep.pyPythondht_temp.pyPythonoled_i2c.pyPythonmcp3008_read.pyPython