ソースに絡まるエスカルゴ

貧弱プログラマの外部記憶装置です。

【Raspberry Pi/python】Raspberry PiのCPU温度などを取得する

 Raspberry Pi 4は発熱がものすごく、普通に使っていてもCPU回りを触ると温かくなります。

 ファンやヒートシンクはほぼ必須なのですが、具体的にどれぐらいの温度になるのかを知りたくて調べたところ簡単にCPUの温度などの情報を取得できることがわかりました。

 案外使う場合があるかと思ったので備忘録として記事にした次第です。

 では始めます。


1:Raspberry PiのCPU情報を取得するコマンド
 LXTerminalを開いて以下のコマンドを入力すれば、各情報を取得できます。

・CPU温度

$ vcgencmd measure_temp

・CPU周波数(クロック数)

$ vcgencmd measure_clock arm

・CPU電圧

$ vcgencmd measure_volts

・CPUのメモリ使用量

$ vcgencmd get_mem arm

GPUのメモリ使用量

$ vcgencmd get_mem gpu

 1回だけそれぞれの情報を取得するだけならコマンドを叩くだけでよいですが、定期的に取得したい場合はpythonなどで記述するのが楽です。


2:pythonからCPU情報を取得するコマンドを実行する
 pythonでshellを実行する場合にはsubprocessを使います。それを使ってコマンドの結果を変数に格納すればpython内で扱うことができるようになります。

 実際にsubprocessを使って1秒ごとにCPUの情報を取得するプログラムは以下の通りです。Ctrl+Cで終了させます。

・cpu_info.py

# -*- coding: utf-8 -*-
import subprocess
import time
from datetime import datetime

def main():
    while True:
        date = datetime.now().strftime("%Y/%m/%d %H:%M:%S")          # 現在時刻
        temp       = run_shell_command("vcgencmd measure_temp")      # CPU温度
        clock      = run_shell_command("vcgencmd measure_clock arm") # CPU周波数
        volts      = run_shell_command("vcgencmd measure_volts")     # CPU電圧
        memory_cpu = run_shell_command("vcgencmd get_mem arm")       # CPUのメモリ使用量
        memory_gpu = run_shell_command("vcgencmd get_mem gpu")       # GPUのメモリ使用量

        # 結果表示
        print("{}, temp:{}, clock:{}, volts:{}, cpu_m:{}, gpu_m:{}".format(date, temp, clock, volts, memory_cpu, memory_gpu))
        time.sleep(1) # 1秒待つ

# シェルコマンドを実行する関数
def run_shell_command(command_str):
    proc = subprocess.run(command_str, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, text=True)
    result = proc.stdout.split("=")
    return result[1].replace('\n', '')

if __name__ == '__main__':
    main()

 Raspberry Piで上記を実行すると1秒ごとにそれぞれのCPU情報がコンソールの表示されます。
 シェルコマンドの実行結果をsplitしたりreplaceしているのは、イコールが入っていたり改行が入っていたりするのでそれを除去するために入れてあります。


 以上がRaspberry PiのCPU温度などを取得する方法になります。

 今回作ったpythonでのサンプルは結果をprintで表示させているだけですが、CSVなどに出力させるようにすればCPU温度の変化をグラフ化する際のデータ取得などにも使えるかと思います。


・参考資料