Domanda:
Come ottenere direttamente la temperatura della CPU in Python?
SDsolar
2018-06-28 11:22:48 UTC
view on stackexchange narkive permalink

L'obiettivo è accendere una ventola di scarico in una stazione di registrazione dati esterna in una centrale solare. Il programma di raccolta dati è scritto in Python sotto Raspbian.

Per leggere la temperatura della CPU da una riga di comando, c'è il comando vcgencmd .

Esempio in bash:

  echo "La CPU è a $ (vcgencmd measure_temp) gradi." La CPU è a temp = 39,2'C gradi.  

come il comando restituisce la stringa "temp = 39.2'C"

Non l'ho mai visto personalmente fallire, anche se so che c'è una domanda su questo punto.

vcgencmd measure_temp non sempre funziona

Nel frattempo, vorrei ottenere la temperatura della CPU in Python.

Ritorno all'obiettivo: le ventole sono controllate dalle chiamate PiGPIO e durante la registrazione dei dati mantengo le mie chiamate di sistema esterne al minimo (cioè, non ce ne sono diverso dall'I / O di file Python). Inoltre, sarebbe molto preferibile ottenere la risposta come un semplice valore in virgola mobile piuttosto che estrarla da un valore restituito.


La domanda è: come ottenere direttamente la temperatura della CPU in Python?

Sei risposte:
#1
+9
hg8
2019-01-20 20:24:13 UTC
view on stackexchange narkive permalink

Per chi arriva qui da Google. Puoi ottenere la temperatura della CPU Raspberry in Python utilizzando il pacchetto gpiozero .

  pip install gpiozero  

Crea il tuo temp.py

  from gpiozero import CPUTemperaturecpu = CPUTemperature () print (cpu.temperature)  

Output:

  $ python temp.py56.92  
#2
+3
SDsolar
2018-06-28 11:22:48 UTC
view on stackexchange narkive permalink

Per prima cosa, configura Python:

  pip install setuptoolssudo pip install git + https: //github.com/nicmd/vcgencmd.git  

Pratico script bash cputemp

  (shebang) / usr / bin / pythonimport vcgencmdCPUc = vcgencmd.measure_temp () print str ( CPUc) chmod + x cputempsudo cp cputemp / usr / bin  

Esempio di utilizzo in bash:

  echo "La CPU è a $ (cputemp) gradi C. "La CPU è a 39,6 gradi C.  

Breve e al punto, e nel formato dati mobile per i confronti all'interno del Programma Python ..

Buona risposta. È più veloce o più lento di `os.popen ('vcgencme measure_temp')`?
#3
+2
Milliways
2018-06-28 11:29:14 UTC
view on stackexchange narkive permalink

"In Stretch non esiste alcun comando vcgencmd."

Allora, qual è

  vcgencmd commandscommands = "vcos, ap_output_control, ap_output_post_processing, vchi_test_init, vchi_test_exit, vctest_memmap, vctest_start, vctest_stop, vctest_stop, vctest_stop, pmctest_stop, pmctest_stop pm_start_logging, pm_stop_logging, versione, comandi, set_vll_dir, set_backlight, set_logging, get_lcd_info, arbitro, cache_flush, otp_dump, test_result, codec_enabled, get_camera, get_mem, measure_clock, measure_volts, scaling_kernel, scaling_sharpness, get_hvs_asserts, get_throttled, measure_temp, get_config, hdmi_ntsc_freqs, hdmi_adjust_clock, hdmi_status_show, hvs_update_fields, pwm_speedup, force_audio, hdmi_stream_channels, hdmi_channel_map, display_power, read_ring_osc, memtest, dispmanx_list, get_rsts, schmoo, render_bar, disk_notify, inuse_notify, sus_suspend, sus_status, sus_is_enabled, sus_stop_test_thread, egl_platform_switch, mem_validate, mem_oom, mem_reloc_stats, hdmi_cvt, hdmi_timings, file "vcgencmd measure_temptemp = 4 2.9'C  
Hai ragione. Modifica di domande e risposte per concentrarsi su Python.
traduzione ... sì, vcgencmd è effettivamente disponibile su Stretch, e qui ci sono tutti i suoi argomenti disponibili.
#4
+1
uhoh
2018-06-28 12:16:39 UTC
view on stackexchange narkive permalink

Correlato alle altre risposte:

Usare la bella risposta a Modo meno brutto ma affidabile per trovare questo valore a virgola mobile incorporato in una stringa senza padding?:

  import re, commandsdef check_CPU_temp (): temp = None err, msg = commands.getstatusoutput ('vcgencmd measure_temp') if not err: m = re.search (r '-? \ d \.? \ d *', msg) # https://stackoverflow.com/a/49563120/3904031 try: temp = float (m.group ()) eccetto: pass return temp, msgtemp , msg = check_CPU_temp () print "temperature (" + u '\ xb0' + "C):", tempprint "messaggio completo:", msg  

che restituisce entrambi un valore in virgola mobile e il messaggio originale in cui è contenuto.

  temperature (° C): 49.0full message: temp = 49.9'C  
nota che `commands` è python2, è stato sostituito con` subprocess`, sebbene ci siano anche altre cose specifiche di py2 qui.
@tedder42 grazie per questo! Cercherò di occuparmene presto, ma puoi modificarlo tu stesso o pubblicare una nuova risposta se ti senti così incline. Sono consapevole che il momento sta arrivando e il 2.7 non sarà più supportato e noi 2.7er dobbiamo portarci via, stavo solo procrastinando ... il che mi ricorda che non avevo ancora accettato la tua risposta Space .. . fatto!
Ero / sono ancora reticente a cambiarlo drasticamente. Penso che vada bene lasciarlo, soprattutto perché non esiste un modo canonico per farlo comunque.
#5
+1
eftshift0
2018-07-01 09:27:41 UTC
view on stackexchange narkive permalink

È già stato risposto e accettato ma vedo che nessuno ha proposto questa alternativa che non dipende dall'esecuzione di un comando ma piuttosto dalla lettura da un file: / sys / class / thermal / thermal_zone0 / temp .

Questo file contiene la temperatura in milli-gradi Celsius.

  $ vcgencmd measure_temp && cat / sys / class / thermal / thermal_zone0 / temptemp = 47.8'C47774  

Quindi, apri il file e leggi il contenuto. Non è necessario eseguire l'elaborazione delle stringhe.

#6
  0
Unknown Name
2018-07-05 06:05:23 UTC
view on stackexchange narkive permalink

Sul sito RPi Foundation, c'è una guida su come creare un registro della temperatura. In esso ci sono le istruzioni sulla libreria GPIO Python integrata in Raspbian. https://projects.raspberrypi.org/en/projects/temperature-log

[Risale] (https://projects.raspberrypi.org/en/projects/temperature-log/4) allo stesso modo della risposta data da @hg8 cioè `pip install gpiozero` e` from gpiozero import CPUTemperature` per ottenere il temp .


Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 4.0 con cui è distribuito.
Loading...