Uzyskaj temperaturę PI za pomocą C.


Odpowiedzi:


13

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

Doświadczenie doprowadziło mnie do przekonania, że ​​interfejs strumieniowy wysokiego poziomu nie jest niezawodny w plikach proc / sys, więc powinieneś użyć 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.
Złotowłosa

@goldilocks Ciekawe! Nie wiedziałem tego, myślałem, że zachowuje się jak każdy plik. Być może masz rację.
Frepa

2

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 vgencmddziała. Był w stanie odczytać temperaturę, zanim jeszcze istniał sterownik jądra termicznego. Korzysta ze specjalnego mechanizmu komunikacji dostępnego na RaspberryPi, zwanego mailboxw celu komunikacji z systemem operacyjnym VideoCore działającym na GPU. Jest to częściowo udokumentowane tutaj .


Kurs Baking Pi zawiera trochę więcej materiałów do skrzynki pocztowej, ale jest tam używany tylko do grafiki.
Frepa,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.