Raspberry Pi 4/5 サーマルスロットリング対策完全ガイド

みなさん、こんにちは。

「なんだか最近、Piの動作がもっさりしている気がする」

「動画エンコードを始めると、すぐにパフォーマンスが落ちる…」

それはもしかすると、「サーマルスロットリング」が原因かもしれません。

ラズベリーパイは小型で便利な反面、特に高性能なPi 4やPi 5は想像以上に熱くなります。今回は、この熱問題を根本から解決するための完全ガイドをお届けします!

 


 

サーマルスロットリングって何?

 

サーマルスロットリング(thermal throttling)とは、CPUやGPUが過熱しすぎないように、意図的に動作クロック(処理速度)を下げる安全機能のことです。

ラズパイの場合、おおむね80℃を超えるとこの機能が働き、性能が低下します。つまり、CPUの使用率が低く見えても、温度が高いせいで本来のパフォーマンスが出ていない、という状況が起こりうるんです。

せっかくのPiの高性能を活かすためにも、この熱問題への対策は避けて通れません。

 


 

自分のPiは大丈夫?温度と負荷を測ってみよう

 

まずは、今の自分のPiがどれくらいの状態なのかを確認してみましょう。

1. CPU温度の確認

ターミナルで以下のコマンドを実行します。

vcgencmd measure_temp

temp=65.0'Cのように、現在のCPU温度が表示されます。

2. サーマルスロットリングの履歴確認

過去にスロットリングが発生したことがあるかを確認できます。

vcgencmd get_throttled

出力が0x0なら、一度もスロットリングは発生していません。これ以外の値(非ゼロ)が表示された場合は、「過去または現在に熱暴走や電圧不足が発生した」ことを意味します。

3. 負荷(ロードアベレージ)の確認

現在どれくらいの負荷がかかっているかを知ることができます。

uptime

出力のload average:の数値に注目してください。Pi 4や5は4コアなので、この数値が4.0に近づくとCPUがほぼフル稼働している状態です。

 


 

どのくらいで危険になるの?実測ベースの目安

 

色々な環境でテストした結果、次のようなケースでサーマルスロットリングが発生しやすいことが分かっています。

  • 室温25〜30℃の環境
  • CPU負荷が1.5〜2.5程度の状態を長時間維持した場合
  • 温度が75〜85℃に達し、スロットリングが発生

特にPi 5はPi 4よりも高性能になった分、発熱も大きくなっています。Pi 4ではギリギリ耐えていた処理でも、Pi 5では早めの冷却対策が必要になることが多いので注意が必要です。

 


 

サーマルスロットリングを回避する5つの方法

 

自分のPiが熱くなりがちなことが分かったら、いよいよ対策です。手軽なものから本格的なものまで、5つの方法をご紹介します。

1. パッシブ冷却ケースを使う

アルミ製のヒートシンクが一体になったケース(FLIRCケースなど)に変えるだけで、10〜15℃も温度を下げられることがあります。ファンを使わないので静かに使いたい方におすすめです。

2. 小型ファンで強制空冷

冷却効果を最大限に高めたいなら、ヒートシンクと小型ファンの組み合わせが最強です。30mm程度の小型ファンでも、低速で回すだけでサーマルスロットリングをほぼ完璧に回避できます。

3. 設置環境を見直す

お金をかけずにできる対策です。

  • 直射日光が当たる場所を避ける。
  • 棚の中に詰め込まず、空気が流れやすい場所に置く。

4. クロック/電圧を調整する

どうしてもファンレスで使いたいけど、ちょっとだけ負荷が高い、という場合は、CPUの動作クロックを下げることで発熱を抑えることもできます。/boot/config.txtに以下の設定を追加してみましょう。

arm_freq=1400

※Pi 4の標準は1500MHzです。性能とのトレードオフになるので、必要な場合に試してみてください。

5. 温度監視と自動制御を導入する

リアルタイムで温度をチェックしたいなら、簡単なWebインターフェイスを作るのがおすすめです。今回は、PythonのFlaskを使った温度モニターのサンプルコードを用意しました。

 


 

FlaskでCPU温度を表示するサンプルコード

 

このコードを使えば、ブラウザからいつでもPiのCPU温度を確認できます。

1. Flaskのインストール

pip3 install flask

2. サンプルコードの準備

以下のコードをtemp_monitor.pyという名前で保存してください。

from flask import Flask, jsonify, render_template_string
import subprocess

app = Flask(__name__)

# HTMLテンプレート
HTML = """
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Raspberry Pi 温度モニタ</title>
    <style>
        body { font-family: sans-serif; text-align: center; margin-top: 50px; }
        .temp { font-size: 2em; margin: 20px; }
    </style>
    <script>
        async function updateTemp() {
            let res = await fetch("/api/temp");
            let data = await res.json();
            document.getElementById("temp").innerText = data.temperature + " °C";
        }
        setInterval(updateTemp, 3000); // 3秒ごとに更新
        window.onload = updateTemp;
    </script>
</head>
<body>
    <h1>Raspberry Pi CPU 温度</h1>
    <div class="temp" id="temp">-- °C</div>
</body>
</html>
"""

def get_temp():
    result = subprocess.run(["vcgencmd", "measure_temp"], capture_output=True, text=True)
    if result.returncode == 0:
        temp_str = result.stdout.strip().replace("temp=","").replace("'C","")
        return float(temp_str)
    return None

@app.route("/")
def index():
    return render_template_string(HTML)

@app.route("/api/temp")
def api_temp():
    temp = get_temp()
    return jsonify({"temperature": temp})

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000, debug=False)

3. サーバーの起動

python3 temp_monitor.py

4. ブラウザでアクセス

PCやスマホのブラウザで、http://<ラズベリーパイのIPアドレス>:5000/にアクセスすると、現在のCPU温度が数秒ごとに自動更新されて表示されます。

temp_monitor
temp_monitorの画面

 


 

まとめ

 

今回のガイドはいかがでしたか?

Raspberry Pi 4や5は、その高性能ゆえに想像以上に発熱するという特性があります。特に、温度が80℃を超えるとサーマルスロットリングが発生し、処理性能が大きく低下してしまうんです。

まずはvcgencmdコマンドなどを使って、ご自身のPiの温度や状態をこまめにチェックしてみましょう。もし温度が高いようであれば、冷却ケースや小型ファンの導入、そして設置環境の見直しといった対策をぜひ検討してみてください。

適切な冷却を行うことで、Piのパフォーマンスを最大限に引き出し、より安定したプロジェクト運用が可能になりますよ!

 

本日も最後までお読みいただきありがとうございました。

それでは、よい Raspberry Pi ライフを!

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール