🛠 Surveiller température et fréquence du BCM2835
Objetivos
Establecer una monitorización continua del SoC BCM2835: temperatura, frecuencia ARM actual e indicador de estrangulamiento (throttling). El firmware limita la CPU por encima de 85 °C o en caso de subtensión detectada — sin corte franco documentado para esta placa. Utilizará vcgencmd, registrará en una base de texto e interpretará el indicador get_throttled bit a bit.
Material
- Raspberry Pi Model B Rev 1 (con o sin disipador/caja — ¡compare!)
- Imagen legacy de 32 bits con
raspberrypi-firmware(vcgencmdpreinstalado) - Carga de prueba:
sudo apt install -y stress(opcional, para provocar el estrangulamiento) - Acceso SSH (consulte el tutorial de Ethernet) para seguir los registros de forma remota.
Código completo
#!/bin/sh
# surveil.sh - journalise temperature, clock et drapeau de bridage
# format: horodatage;temp_c;arm_hz;throttled_hex
while true; do
T=$(vcgencmd measure_temp | sed 's/temp=//;s/.C//')
C=$(vcgencmd measure_clock arm | cut -d= -f2)
V=$(vcgencmd get_throttled | cut -d= -f2)
echo "$(date -Is);${T};${C};${V}" >> /var/log/pisoc.csv
sleep 30
done
# Lecture rapide :
# vcgencmd measure_temp -> 'temp=52.3'C (bridage au-dela de 85 C)
# vcgencmd measure_clock arm -> 700000000 au repos nominal
# vcgencmd get_throttled -> 0x0 = rien a signaler
# bit 0 sous-tension | bit 2 sous-tension subie | bit 3 bridage thermique
# bit 4 bridage sous-tension | bits 16-19 = memoire des evenements passes
# Provoquer la montee (test seulement, 256 MB de RAM : pas de stress --vm) :
stress --cpu 1 --timeout 120
Verificación esperada
tail -f /var/log/pisoc.csv muestra temperaturas coherentes (30-60 °C en reposo según la caja). Durante stress --cpu 1, la temperatura sube y la frecuencia medida puede bajar de 700 MHz si se alcanza el umbral de 85 °C; get_throttled muestra entonces un indicador distinto de cero con el bit 3 (estrangulamiento térmico) o el bit 0 (subtensión) activado.
Errores frecuentes
- Interpretar
get_throttleden decimal: es un hexadecimal enmascarado, léalo bit a bit (0x50000 = eventos pasados memorizados, no un problema activo). - Confundir subtensión y sobrecalentamiento: un indicador 0x1 proviene de la fuente de alimentación (polifusible F1, cargador débil), no del disipador.
vcgencmd: command not found: firmware ausente en la imagen (imágenes ARMv6 mínimas de terceros).- Prueba de estrés demasiado agresiva en 256 MB: el OOM mata procesos antes de que la información térmica sea interesante.
- Añadir
over_voltagepara ganar MHz sin monitorizar los indicadores: el estrangulamiento por subtensión anula todo el beneficio.
Otros tutoriales para esta placa
- Allumer une LED via le GPIO avec libgpiod
- Lire un bouton poussoir et afficher l'état dans la console
- Premier script Python : faire clignoter la LED
- Variation d'intensité LED avec le PWM matériel (et son piège)
- Lire un capteur I2C (température/humidité) sur le bus 1
- Configurer l'Ethernet 10/100 et piloter le Pi en SSH
Ejemplos de código para esta placa
led_blink.pyPythonbutton_led.pyPythonservo_sweep.pyPythondht_temp.pyPythonoled_i2c.pyPythonmcp3008_read.pyPython