Я знаю, что вы можете получить температуру, используя инструмент 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, работающей на графическом процессоре. Это частично задокументировано здесь .