Wiem, że możesz uzyskać temperaturę za pomocą narzędzia vcgencmd, ale zastanawiałem się, czy istnieje jakiś interfejs API, którego można użyć w C, aby uzyskać temperaturę programowo bez odczytywania standardowego poziomu vcgencmd?
Wiem, że możesz uzyskać temperaturę za pomocą narzędzia vcgencmd, ale zastanawiałem się, czy istnieje jakiś interfejs API, którego można użyć w C, aby uzyskać temperaturę programowo bez odczytywania standardowego poziomu vcgencmd?
Odpowiedzi:
Możesz przeczytać plik /sys/class/thermal/thermal_zone0/temp
, jak określono w tej odpowiedzi . Tam chodzi o pomiary z linii poleceń, a plik jest odczytywany za pomocą cat
. Ale powinieneś być w stanie po prostu otworzyć plik w C. Temperatura jest zwracana w stopniach Celsjusza i jako liczby ASCII. Być może tak, nie testowałem :)
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()
i read()
zamiast tego - ale YMMV. Istnieje również „libsysfs”, ale został on porzucony, a twórcy jądra wyraźnie powiedzieli ludziom, aby trzymali się od niego z daleka.
Jak powiedział @Frepa, istnieje teraz sterownik termiczny jądra dla RaspberryPi, więc najłatwiej jest go użyć. O ile wiem, jednak nie tak to vgencmd
działa. Był w stanie odczytać temperaturę, zanim jeszcze istniał sterownik jądra termicznego. Korzysta ze specjalnego mechanizmu komunikacji dostępnego na RaspberryPi, zwanego mailbox
w celu komunikacji z systemem operacyjnym VideoCore działającym na GPU. Jest to częściowo udokumentowane tutaj .