Получите температуру PI, используя C


11

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


Вы можете найти это полезным: mjmwired.net/kernel/Documentation/sysfs-rules.txt
goldilocks

Ответы:


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

Опыт привел меня верить интерфейс поток высокого уровня не является надежным на прок / SYS файлы, и вы должны использовать open()и read()вместо этого - но YMMV. Есть также "libsysfs", но он был заброшен, и разработчики ядра явно сказали людям держаться подальше от него.
Златовласка

@goldilocks Интересно! Я этого не знал, думал, что он просто ведет себя как любой файл. Вы вполне можете быть правы.
Frepa

2

Как сказал @Frepa, для RaspberryPi теперь есть драйвер ядра для ядра, поэтому его проще всего использовать. Насколько я знаю, это не так vgencmdработает, однако. Он мог считывать температуру даже до того, как появился тепловой драйвер ядра. Он использует специальный механизм связи, доступный на RaspberryPi mailbox, который вызывается для связи с ОС VideoCore, работающей на графическом процессоре. Это частично задокументировано здесь .


В курсе Baking Pi есть еще несколько материалов для почтовых ящиков, но там он используется только для графики.
Frepa
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.