Sé que puede obtener la temperatura usando la herramienta vcgencmd, pero me preguntaba si hay alguna API que pueda usar en C para obtener la temperatura mediante programación sin leer el estándar de vcgencmd.
Sé que puede obtener la temperatura usando la herramienta vcgencmd, pero me preguntaba si hay alguna API que pueda usar en C para obtener la temperatura mediante programación sin leer el estándar de vcgencmd.
Respuestas:
Puede leer el archivo /sys/class/thermal/thermal_zone0/temp
, como se especifica en esta respuesta . Ahí se trata de medir desde la línea de comando, y el archivo se lee con cat
. Pero debería poder abrir el archivo en C. La temperatura se devuelve en miligramos centígrados y como números ASCII. Quizás así, no probado :)
FILE *temperatureFile;
double T;
temperatureFile = fopen ("/sys/class/thermal/thermal_zone0/temp", "r");
if (temperatureFile == NULL)
; //print some message
fscanf (temperatureFile, "%lf", &T);
T /= 1000;
printf ("The temperature is %6.3f C.\n", T);
fclose (temperatureFile);
open()
y en su read()
lugar, pero YMMV. También hay un "libsysfs", pero ha sido abandonado y los desarrolladores del núcleo han dicho explícitamente a la gente que se mantenga alejado de él.
Como dijo @Frepa, ahora hay un controlador térmico del núcleo para RaspberryPi, por lo que la forma más fácil es usarlo. Hasta donde sé, vgencmd
sin embargo , esa no es la forma en que funciona. Fue capaz de leer la temperatura incluso antes de que existiera el controlador térmico del núcleo. Está utilizando un mecanismo de comunicación especial disponible en RaspberryPi llamado mailbox
para comunicarse con VideoCore OS que se ejecuta en GPU. Está parcialmente documentado aquí .