Una de las ventajas de la Raspberry Pi es su eficiencia, teniendo una capacidad de cálculo superior a la que en su momento tenían los Pentium III, con un consumo eléctrico infinitamente inferior, lo que entre otras cosas también hace que se caliente mucho menos, haciéndola ideal para usos industriales y científicos, en los que se precisa equipos capaces de trabajar dentro de un amplio rango de temperaturas, y un consumo eléctrico tan bajo como sea posible.
A pesar de lo comentado anteriormente, su uso en entornos con poca ventilación y alta temperatura, sin hacer uso de ningún tipo de ventilador puede llegar a generarnos dudas sobre el nivel de estrés de nuestras Raspberry, lo que hace que sea interesante poder monitorizar la temperatura de los dos componentes más propensos a calentarse (CPU y GPU), información que podéis obtener de la siguiente manera:
Para saber la temperatura de la CPU (procesador):
cat /sys/class/thermal/thermal_zone0/temp
Lo que nos mostrará algo como esto
50843
Que no es otra cosa que 50’843 Cº (hay que dividir entre 1000)
Para saber la temperatura de la GPU (chip gráfico)
vcgencmd measure_temp
Que en mi ejemplo me ha dado
temp=50.8’C
Como es un dato que probablemente queramos consultar más de una vez, es recomendable que lo traslademos a un shell script:
sudo nano temp.sh
Se abrirá el editor de texto con un documento en blanco, en el que pegaremos las siguientes líneas:
#!/bin/bash # Shell script: temp.sh # Autor: Santiago Crespo cpu=$(cat /sys/class/thermal/thermal_zone0/temp) echo "$(date) @ $(hostname)" echo "-------------------------------------------" echo "Temp.CPU => $((cpu/1000))'Cº" echo "Temp.GPU => $(/opt/vc/bin/vcgencmd measure_temp)" echo "-------------------------------------------"
Tras lo cual saldremos guardando los cambios con CTRL + ‘X’, pulsando a continuación ‘Y’ para confirmar que queremos guardar los cambios, y ENTER.
Para que el script sea ejecutable, necesitaremos hacer lo siguiente:
chmod +x temp.sh
Tras lo cual podremos probar el resultado con:
./temp.sh
Que mostrará algo parecido a lo siguiente:
Sun 24 Apr 19:15:17 CEST 2016 @ RASPBERRY-2
——————————————-
Temp.CPU => 45’Cº
Temp.GPU => temp=45.5’C
——————————————-
ó
Sun 24 Apr 17:37:50 UTC 2016 @ RASPBERRY-3
——————————————-
Temp.CPU => 53’Cº
Temp.GPU => temp=52.6’C
——————————————-
Ambas llevan instalados unos disipadores de aluminio que pueden adquirirse en cualquier tienda especializada en Raspberry por unos 3 euros (cada kit), y que reducen la temperatura en aproximadamente unos 5 ºc.
En mi caso, este script me ha servido para darme cuenta de la gran diferencia de temperatura a la que trabajan tres tipos distintos de RPI tras minutos de trabajar con sus procesadores al 100%, así mientras la RPI 1 y la 2 trabajan prácticamente a la misma temperatura (entre 59 y 62 cº), la RPI 3 lo hace en un rango de temperaturas sorprendentemente más alto (entre 81 y 83 Cº).
En base a esa información parece lógico pensar que en entornos de altas temperaturas y poca ventilación la Raspberry 2 puede ser mejor opción que la Raspberry 3.
Para los que estéis interesados en poder monitorizar vuestro sistema con mayor detalle, comprobando por ejemplo la frecuencia del procesador, consumo en voltios del mismo, memoria… a continuación adjunto un pequeño shell script (.sh) que podéis añadir al script anterior o aprovechar para cualquier otro proyecto
echo "" echo "Otros datos del sistema" echo "-------------------------------------------" echo "CPU $(vcgencmd measure_clock arm)'Hz" echo "CPU $(vcgencmd measure_volts core)" echo "Memoria repartida entre el sistema y la gpu:" echo "Sistema $(vcgencmd get_mem arm)" echo "GPU $(vcgencmd get_mem gpu)" echo "-------------------------------------------" echo "Memoria libre $(free -o -h)" echo "-------------------------------------------"
La forma de conseguir hacer lo mismo en Python :
# python script # autor : Santiago Crespo import commands temp = int(open('/sys/class/thermal/thermal_zone0/temp').read()) / 1e3 print 'Temp.CPU =>' + str(temp) tempgpu = commands.getoutput('/opt/vc/bin/vcgencmd measure_temp' ).replace('temp=', '' ).replace('\'C', '') print 'Temp.GPU =>' + str(tempgpu)
Como ver el % de uso de la CPU usando Python
import psutil cpusan = psutil.cpu_percent(interval=1, percpu=False) print cpusan
Para tener accesible el módulo psutil es posible que antes tengáis que instalarlo:
sudo pip install psutil
Si necesitáis cualquier aclaración no dudéis en contactarme.
Rev 16.9.2016