Я знаю, що ви можете отримати температуру за допомогою інструмента vcgencmd, але мені було цікаво, чи є який-небудь API, який я можу використовувати в C, щоб отримати температуру програмно, не читаючи строку vcgencmd?
Я знаю, що ви можете отримати температуру за допомогою інструмента vcgencmd, але мені було цікаво, чи є який-небудь API, який я можу використовувати в C, щоб отримати температуру програмно, не читаючи строку vcgencmd?
Відповіді:
Ви можете прочитати файл /sys/class/thermal/thermal_zone0/temp
, як зазначено у цій відповіді . Там йдеться про вимірювання з командного рядка, і файл читається за допомогою cat
. Але ви повинні мати можливість просто відкрити файл у C. Температура повертається в міліграмах градусів Цельсія і як ASCII числа. Можливо, так, не перевірено :)
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()
а read()
замість цього - але YMMV. Існує також "libsysfs", але це було занедбане, і ядра чорти явно сказали людям триматися подалі від нього.
Як сказав @Frepa, зараз існує термічний драйвер ядра для RaspberryPi, тому найпростішим способом є його використання. Наскільки я знаю, vgencmd
проте це не так . Він зміг прочитати температуру ще до існування драйвера теплового ядра. Він використовує спеціальний механізм зв’язку, доступний на RaspberryPi, який викликається mailbox
для спілкування з ОС VideoCore, що працює на GPU. Це частково задокументовано тут .