Obter a temperatura do PI usando C


Respostas:


13

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);

Experiência me levou a acreditar que a interface de fluxo de alto nível não é confiável em proc / sys arquivos, e você deve usar 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.
goldilocks

@goldilocks Interesting! Eu não sabia disso, pensei que só se comporta como qualquer arquivo. Você pode muito bem estar certo.
FREPA

2

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 vgencmdfunciona. 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 mailboxpara se comunicar com o VideoCore OS em execução na GPU. Está parcialmente documentado aqui .


O curso Baking Pi tem um pouco mais de material da caixa de correio, mas é usado apenas para gráficos.
FREPA
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.