Dapatkan suhu PI menggunakan C

11

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?

opc0de
sumber
Anda mungkin menemukan ini berguna: mjmwired.net/kernel/Documentation/sysfs-rules.txt
goldilocks

Jawaban:

13

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);
Frepa
sumber
Pengalaman telah membuat saya percaya bahwa antarmuka aliran tingkat tinggi tidak dapat diandalkan pada file proc / sys, dan Anda harus menggunakan 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.
goldilocks
@goldilocks Menarik! Saya tidak tahu ini, berpikir itu hanya berperilaku seperti file apa pun. Anda mungkin benar.
Frepa
2

Seperti @Frepa katakan, sekarang ada driver thermal kernel untuk RaspberryPi jadi cara termudah adalah menggunakannya. Sejauh yang saya tahu, itu bukan cara vgencmdkerjanya. Itu bisa membaca suhu bahkan sebelum driver kernel termal ada. Itu menggunakan mekanisme komunikasi khusus yang tersedia di RaspberryPi yang dipanggil mailboxuntuk berkomunikasi dengan VideoCore OS yang berjalan pada GPU. Itu sebagian didokumentasikan di sini .

Krzysztof Adamski
sumber
Kursus Baking Pi memiliki beberapa bahan kotak surat lagi, namun di sana hanya digunakan untuk grafik.
Frepa