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

11

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

opc0de
источник
Вы можете найти это полезным: 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);
Frepa
источник
Опыт привел меня верить интерфейс поток высокого уровня не является надежным на прок / SYS файлы, и вы должны использовать open()и read()вместо этого - но YMMV. Есть также "libsysfs", но он был заброшен, и разработчики ядра явно сказали людям держаться подальше от него.
Златовласка
@goldilocks Интересно! Я этого не знал, думал, что он просто ведет себя как любой файл. Вы вполне можете быть правы.
Frepa
2

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

Кшиштоф Адамски
источник
В курсе Baking Pi есть еще несколько материалов для почтовых ящиков, но там он используется только для графики.
Frepa