Rasberry Pi 4って意外と熱を持つなぁと思った話

Rasberry Pi 4を購入しました

最近ふと何か作ってみようかなと思いラズパイを勢いで購入しました。 購入したのはこちら。 初めてラズパイを触るのでスターターキットが無難かな思って選びました。

Pi4 B 8GB スターター キット V2 オンライン教材付 [RASST48STA0321]

実際に買ったものがこちら。 ヒートシンクとかケースは本キットに付属しています。

f:id:rsym1290:20201004000354p:plain

セットアップしていたら熱を持っているのが気になった

OS入れて諸々セットアップしていたら気になることがありました。 ラズパイを触ってみると思いのほか熱を持ってるなぁと。 ぐぐってみると、同じことを気にしている人が結構いるようです。 というわけで実際どれくらい熱を持つのか調べてみました。

計測方法

  • 電源投入後20分間の温度上昇の推移を計測する
    • vcgencmd measure_tempコマンドを利用した検証用コードで計測する
    • 詳しくは後述
  • CPUに負荷をかけない場合/かける場合それぞれの温度変化を計測する
    • CPUに負荷をかけるときは stress-ng --cpu 4 -qをバックグラウンドで実行してCPU使用率を100%にする

vcgencmdコマンドについて

ラズパイでは、vcgencmdコマンドを使うことでCPUの温度や動作クロックを見ることができます。

実行例)

pi@raspberrypi:~ $ vcgencmd measure_temp
temp=38.0'C

vcgencmdコマンドを使うことで、他にも出来ることがありますがここでは割愛します。 詳しく知りたい人は以下のドキュメントを読んでみてください。

www.raspberrypi.org

検証用コード

なんとなくpythonで書いてみました。 60秒毎に vcgencmd measure_tempを実行してcpu温度を出力します。

import subprocess
import time

def main():
  while True:
    date = time.ctime()
    cpu_temp = run_vcgencmd(['vcgencmd', 'measure_temp'])
    cpu_temp = run_vcgencmd(['vcgencmd', 'measure_temp'])
    print( "{}, temp:{}'C".format(date, cpu_temp) )
    time.sleep(60)

def run_vcgencmd(command):
  proc = subprocess.run(command, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
  result = proc.stdout.split("=")[1].replace("'C\n","")
  return result

if __name__ == '__main__':
    main()

コードを実行すると以下のような結果が出力されます。

$ python3 raspi_cpu.py
Sat Oct 17 15:03:59 2020, temp:36.0'C
Sat Oct 17 15:04:59 2020, temp:37.0'C
Sat Oct 17 15:05:59 2020, temp:39.0'C

...

測定結果

負荷をかけない場合は、計測開始直後は 36.0℃で20分経過すると48℃まで上昇しました。 計測開始から15分程度で47℃〜48℃あたりで落ち着きます。

負荷をかける場合は、20分後に74℃とかなりの温度まで上昇しました。 20分経過時点でも温度上昇し続けていたので、長時間動かすと80℃まで上がるのではないでしょうか。 サーマルスロットリング機能が80℃で動くらしいので、これ以上負荷をかけるのはやめておきます(ちょっと怖い💦)。

f:id:rsym1290:20201017223524p:plain

さいごに

長時間CPUが忙しくなるようなプログラムはラズパイ4では避けたほうが良いでしょう。 また、そうでない場合でもケースに触れると熱を持ってることがわかるレベルなので、気になる人は冷却性に優れたケースに変えたりcpuファンを導入するなりしましょう。 いずれにせよ、熱対策はしっかりしたほうが良さそうです。