Saya tahu Anda bisa mendapatkan suhu menggunakan alat vcgencmd tapi saya bertanya-tanya apakah ada API yang dapat saya gunakan di C untuk mendapatkan suhu secara pemrograman tanpa membaca stdout dari vcgencmd?
Saya tahu Anda bisa mendapatkan suhu menggunakan alat vcgencmd tapi saya bertanya-tanya apakah ada API yang dapat saya gunakan di C untuk mendapatkan suhu secara pemrograman tanpa membaca stdout dari vcgencmd?
Jawaban:
Anda dapat membaca file /sys/class/thermal/thermal_zone0/temp
, seperti yang ditentukan dalam jawaban ini . Ini tentang mengukur dari baris perintah, dan file dibaca dengan cat
. Tetapi Anda harus dapat hanya membuka file dalam C. Suhu dikembalikan dalam mili derajat Celcius dan sebagai angka ASCII. Mungkin seperti ini, tidak diuji :)
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()
dan read()
sebagai gantinya - tetapi YMMV. Ada juga "libsysfs", tetapi telah ditinggalkan dan devs kernel secara eksplisit mengatakan kepada orang-orang untuk menjauh darinya.
Seperti @Frepa katakan, sekarang ada driver thermal kernel untuk RaspberryPi jadi cara termudah adalah menggunakannya. Sejauh yang saya tahu, itu bukan cara vgencmd
kerjanya. Itu bisa membaca suhu bahkan sebelum driver kernel termal ada. Itu menggunakan mekanisme komunikasi khusus yang tersedia di RaspberryPi yang dipanggil mailbox
untuk berkomunikasi dengan VideoCore OS yang berjalan pada GPU. Itu sebagian didokumentasikan di sini .