Отримайте температуру PI за допомогою C


11

Я знаю, що ви можете отримати температуру за допомогою інструмента vcgencmd, але мені було цікаво, чи є який-небудь API, який я можу використовувати в C, щоб отримати температуру програмно, не читаючи строку vcgencmd?


Ви могли б знайти це корисним: mjmwired.net/kernel/Documentation/sysfs-rules.txt
Золотоволоска

Відповіді:


13

Ви можете прочитати файл /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);

Досвід змусив мене вважати, що інтерфейс потокового потоку високого рівня не є надійним для файлів proc / sys, і вам слід використовувати це, open()а read()замість цього - але YMMV. Існує також "libsysfs", але це було занедбане, і ядра чорти явно сказали людям триматися подалі від нього.
goldilocks

@goldilocks Цікаво! Я цього не знав, думав, що він просто поводиться як будь-який файл. Можливо, ти можеш мати рацію.
Фрепа

2

Як сказав @Frepa, зараз існує термічний драйвер ядра для RaspberryPi, тому найпростішим способом є його використання. Наскільки я знаю, vgencmdпроте це не так . Він зміг прочитати температуру ще до існування драйвера теплового ядра. Він використовує спеціальний механізм зв’язку, доступний на RaspberryPi, який викликається mailboxдля спілкування з ОС VideoCore, що працює на GPU. Це частково задокументовано тут .


Курс Baking Pi має ще кілька матеріалів поштової скриньки, проте там він використовується лише для графіки.
Фрепа
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.