Raspberry PiのCPU温度はvcgencmd measure_temp
で取得できます。
モニタリング用に1秒ごと60回測定し、最後にその平均を表示するようにしました。
追記
軽量化した改良版を公開しました。
情報を取得するモジュールをsubprocess
からopen
に変更して負荷を軽減しています。
#コード
使用言語はPython3.7です。
ラズパイではPythonと打つと標準ではPython2が出てきますが、3.7とは互換性がないのでエラーとにらめっこしないようお気を付けください。
え?そんなことするのは私だけですね。ハイ。
sudo chmod a+x temp.py
で実行権限を付与して./temp.py
とすれば動きます。
#!/usr/bin/python3.7
import subprocess
import time
import sys
import re
num = 60
ave = 0
print(subprocess.run('lsb_release -a', shell=True, encoding='utf-8', stdout=subprocess.PIPE).stdout)
try:
while num > 0:
temp = subprocess.run('vcgencmd measure_temp', shell=True, encoding='utf-8', stdout=subprocess.PIPE).stdout.split('=')
freq = subprocess.run('vcgencmd measure_clock arm', shell=True, encoding='utf-8', stdout=subprocess.PIPE).stdout.split('=')
volt = subprocess.run('vcgencmd measure_volts', shell=True, encoding='utf-8', stdout=subprocess.PIPE).stdout.split('=')
temp = temp[1].replace('\n', '')
freq = int(freq[1].replace('\n', '')) / 1000000000
volt = volt[1].replace('\n', '')
print('Temp: ' + temp + ', Freq: ' + f'{freq:.2f}' + 'GHz, Volt: ' + str(volt) + ' (' + str(num) + ')')
ave += int(re.sub('\\D', '', temp))
num -= 1
time.sleep(1)
print('Average: ' + f'{ave / 600:.1f}' + "'C (60s)")
except KeyboardInterrupt:
sec = 60 - num
print(' Aborted.\nAverage: ' + f'{ave / sec / 10:.1f}' + "'C (" + str(sec) + 's)')
sys.exit()
#工夫したところ
夏休みの自由研究かよっていう見出しですがご容赦ください。
初心者なりに色々調べて書きました。
#####バージョン情報
~~めっちゃ要らないですが、~~最初にLinuxのバージョン情報を表示させてます。
ループ前のprint
の中にあるlsb_release -a
を書き換えれば好きなコマンドの実行結果を表示できます。
完全に自己満足です。
#####Subprocess
調べたところpythonからコマンドを実行するにはsubprocess
が良いようです。
理由はよくわかりませんが長い物には巻かれろということでsubprocess
を使いました。
#####温度以外の値
温度だけではつまらないので(何が)、クロック周波数と動作電圧も表示するようにしました。
これが余計と思いきや見ていて結構面白いです。
私の環境では、意外と1.5GHzまでは使っていないですね。
#####KeyboardInterrupt
Ctrl + C
でループを抜けられますがエラーが吐き出されてしまいます。
精神衛生上よろしくないということでループ処理をtry
で囲ってCtrl + C
をexcept KeyboardInterrupt
でキャッチしています。
こうすることでエラーも吐き出されませんし、抜けるときの処理も書き込むことができます。
#その他
- 変数
num
の60
を変えれば測定する秒数を変えられます。 - 本ファイルを
/{hogehoge}
に置いて、ln -s /{hogehoge}/temp.py /usr/bin/temp
とすれば任意のディレクトリでtemp
と打つだけで本プログラムを実行できます。 - 趣味グラマーの初投稿故にお見苦しい点が多々あるかと思いますが、ご容赦ください。
- 「プロ」グラマーの方、何かコメントがありましたら是非ビシバシとご指摘ください。