Ottieni la temperatura di PI usando C


Risposte:


13

Puoi leggere il file /sys/class/thermal/thermal_zone0/temp, come specificato in questa risposta . Qui si tratta di misurare dalla riga di comando e il file viene letto con cat. Ma dovresti essere in grado di aprire il file in C. La temperatura viene restituita in gradi centigradi milli-gradi e come numeri ASCII. Forse così, non testato :)

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

L'esperienza mi ha portato a credere che l'interfaccia di flusso di alto livello non sia affidabile sui file proc / sys, e dovresti usare open()e read()invece - ma YMMV. C'è anche un "libsysfs", ma è stato abbandonato e gli sviluppatori del kernel hanno esplicitamente detto alla gente di starne alla larga.
Riccioli d'oro

@goldilocks Interessante! Non lo sapevo, pensavo che si comportasse come un qualsiasi file. Potresti benissimo avere ragione.
Frepa,

2

Come ha detto @Frepa, ora esiste un driver termico del kernel per RaspberryPi, quindi il modo più semplice è usarlo. Per quanto ne so, non è così che vgencmdfunziona comunque. Era in grado di leggere la temperatura anche prima che esistesse il driver termico del kernel. Sta utilizzando uno speciale meccanismo di comunicazione disponibile su RaspberryPi chiamato mailboxper comunicare con il sistema operativo VideoCore in esecuzione su GPU. È parzialmente documentato qui .


Il corso Baking Pi ha un po 'più di materiale per le cassette postali, tuttavia lì viene utilizzato solo per la grafica.
Frepa,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.