So che puoi ottenere la temperatura usando lo strumento vcgencmd ma mi chiedevo se ci sono API che posso usare in C per ottenere la temperatura programmaticamente senza leggere lo stdout di vcgencmd?
So che puoi ottenere la temperatura usando lo strumento vcgencmd ma mi chiedevo se ci sono API che posso usare in C per ottenere la temperatura programmaticamente senza leggere lo stdout di vcgencmd?
Risposte:
Puoi leggere il file /sys/class/thermal/thermal_zone0/temp
, come specificato in questa risposta . Qui si tratta di misurare dalla riga di comando e il file viene letto con cat
. Ma dovresti essere in grado di aprire il file in C. La temperatura viene restituita in gradi centigradi milli-gradi e come numeri ASCII. Forse così, non testato :)
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()
e read()
invece - ma YMMV. C'è anche un "libsysfs", ma è stato abbandonato e gli sviluppatori del kernel hanno esplicitamente detto alla gente di starne alla larga.
Come ha detto @Frepa, ora esiste un driver termico del kernel per RaspberryPi, quindi il modo più semplice è usarlo. Per quanto ne so, non è così che vgencmd
funziona comunque. Era in grado di leggere la temperatura anche prima che esistesse il driver termico del kernel. Sta utilizzando uno speciale meccanismo di comunicazione disponibile su RaspberryPi chiamato mailbox
per comunicare con il sistema operativo VideoCore in esecuzione su GPU. È parzialmente documentato qui .