Obtenga la temperatura de PI usando C

Respuestas:

13

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);
Frepa
fuente
La experiencia me ha llevado a creer que la interfaz de flujo de alto nivel no es confiable en los archivos proc / sys, y debería usar, 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.
Ricitos de oro
@goldilocks ¡Interesante! No sabía esto, pensé que simplemente se comporta como cualquier archivo. Usted puede muy bien estar en lo cierto.
Frepa
2

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é, vgencmdsin 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 mailboxpara comunicarse con VideoCore OS que se ejecuta en GPU. Está parcialmente documentado aquí .

Krzysztof Adamski
fuente
El curso Baking Pi tiene más material de buzón, sin embargo, allí solo se usa para gráficos.
Frepa