Eu sei que você pode obter a temperatura usando a ferramenta vcgencmd, mas eu queria saber se existe alguma API que eu possa usar em C para obter a temperatura programaticamente sem ler o stdout do vcgencmd?
Eu sei que você pode obter a temperatura usando a ferramenta vcgencmd, mas eu queria saber se existe alguma API que eu possa usar em C para obter a temperatura programaticamente sem ler o stdout do vcgencmd?
Respostas:
Você pode ler o arquivo /sys/class/thermal/thermal_zone0/temp
, conforme especificado nesta resposta . Trata-se de medir a partir da linha de comando, e o arquivo é lido com cat
. Mas você deve conseguir abrir o arquivo em C. A temperatura é retornada em mili-graus centígrados e como números ASCII. Talvez assim, não testado :)
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()
em vez disso - mas YMMV. Há também um "libsysfs", mas foi abandonado e os desenvolvedores do kernel explicitamente disseram às pessoas para ficarem longe dele.
Como a @Frepa disse, agora existe um driver térmico de kernel para o RaspberryPi, portanto a maneira mais fácil é usá-lo. Até onde eu sei, não é assim que vgencmd
funciona. Foi capaz de ler a temperatura mesmo antes da existência do driver térmico do kernel. Ele está usando um mecanismo de comunicação especial disponível no RaspberryPi chamado mailbox
para se comunicar com o VideoCore OS em execução na GPU. Está parcialmente documentado aqui .