見出し画像

Raspberry pi 5用ケース「Pironman 5」購入レビュー


購入したもの

すべてAmazonで購入しました
ケースの方は現在(2024/09/22)Amazonでは在庫切れのようです。最初にAmazonで出た後、在庫切れになり、在庫が復活してからすぐに購入しました。次在庫が復活しても1ヶ月ほどでなくなってしまうかもしれませんね。
Amazon以外にも公式や他のサイトから購入はできるみたいです。

すでに持っているもの(他に必要なもの)

購入理由

  • 見た目: 中が見えるようになっているデザインが気に入りました

  • LEDの色操作: LEDライトのカスタマイズが可能で、色々活用できそうだと思いました

  • 温度管理: 今まではこちらの小さいファンとヒートシンクがついたケースを使用していました。それにこちらの極小 コンパクトSSDをつけて使用していたこともあり、夏場エアコンをつけていないと60度を超えることがありました。今後、webサーバなどもっと色々動かしたかったので熱対策のためです。

開封&組み立て

ちょっと箱が凸凹でしたが無事届きました

届いたときの写真

入っているもの

ドライバなども入っていて、ラズパイ本体、電源以外に必要なものはありませんでした。

入っているものの写真

組み立て

入っていた組み立て書と、公開されている動画をみながら組み立てました。

だいたい2時間ほどで終わりました。このような組み立てをするのが初めてだったので慣れている人は1時間かからずにできるのだと思います。
一番苦労したのは、アクリル板の保護紙を剥がす作業ですね…笑とても薄いので爪で端を少しずつ剥がしまました。

組み立て後、購入前に使用していた、USBのSSDに入れていたRaspberry Pi OSに入っていたRaspberry Pi imagerを使用してM.2 SSDにOSの書き込みを行いました。最初、認識しなくて手こずりましたが、接続部分がちゃんと押せてないだけでした。

ソフトウェアのセットアップ

公式の説明書を見ながら進めました。
セットアップが終わるとケースについている小さなディスプレイに、CPU、メモリ、IPアドレス、ディスク容量などの情報が表示されるようになりました。

ダッシュボード

見やすく、細かい設定ができます
詳しくはこちら
コマンドでの操作もできます

ダッシュボード

気に入った点

  • 細かい設定が可能
    LEDの色や、点灯の仕方、温度によってファンの速度の変更などダッシュボード、コマンドの両方から設定できるのが良かったです。夜寝る時は明かりが邪魔なので、cronでLEDを消すコマンドを実行しています。

  • CPU温度
    あんなでかいヒートシンクとファンがついているので当たり前ですが、CPU温度が40度代まで下がりました。

  • ファンの音
    懸念していた点ですが、そこまで大きな音はせず、睡眠の邪魔にはならなそうです。

  • GPIOピンについて
    アクリル板にそれぞれのピンの情報が書いてあって使いやすいです

懸念点

  • ラズパイ本体の取り出しにくさ
    解体が少し大変になりそうなので、頻繁に本体を出したい人には向きません

  • ミニディスプレイのON,OFF
    もしかしたらあるかもしれませんが、ミニディスプレイのON,OFFがインストールしたソフトウェアを停止する以外に方法がなさそうです。LED同様コマンドから操作できると嬉しいのですが…もし方法知っている方いましたら教えてください。分かり次第追記予定です。

  • ファンについているLEDの制御
    こちらももしかしたら制御する方法があるのかもしれませんが、ファンについているLEDに関しては色の制御ができません。こちらも解決方法が分かり次第追記予定です。上部についている4つのLED(こちらは制御可)の方が明るいためそこまで問題はないのですが、色でなにか伝えたい場合は、モードを固定以外にすると分かりづらくなってしまいます。

  • 耐久性
    まだ使って数日しか経っていないので分かりません。半年ほどつかって問題なければ追記しようと思います。

おまけ:降水確率によってLEDの色を変える

LEDの色の制御がコマンドからできるのでpythonを使用してOpenWeather APIから3時間ごとの降水確率を取得し、12時間以内で一番高い確率を元にLEDの色を変えるプログラムを作成しました。

フォルダ構成

.
├── pop_led.py
├── token.txt(openweather apiで取得したAPIkeyを記述)
├── weather_forecast.py
└── zip_code.txt(郵便場号をハイフンありで記述)

weather_forecast.py(天気予報取得)

import requests
from datetime import datetime, timezone
from zoneinfo import ZoneInfo
import os


# 郵便番号(-あり)をファイルから取得
def get_zip_code():
    with open(f"{os.path.dirname(__file__)}/zip_code.txt", "r") as f:
        zip_code = f.read()
    return zip_code


# APIキーをファイルから取得
def get_api_key():
    with open(f"{os.path.dirname(__file__)}/token.txt", "r") as f:
        api_key = f.read()
    return api_key


# 郵便番号から経度、緯度の取得
def get_lat_lon(zip_code, api_key):
    url = f"https://api.openweathermap.org/geo/1.0/zip?zip={zip_code},JP&appid={api_key}"
    res = requests.get(url)
    json_data = res.json()
    lat, lon = json_data['lat'], json_data['lon']
    return lat, lon


# APIからJSONデータを取得
def get_json(lat, lon, api_key):
    # 日間/3時間のデータを取得
    url = f"https://api.openweathermap.org/data/2.5/forecast?lat={lat}&lon={lon}&appid={api_key}&units=metric"
    res = requests.get(url)
    json_data = res.json()
    return json_data


# jsonデータ処理
def json_data_processing(json_data):
    jst_zone = ZoneInfo("Asia/Tokyo")
    result = list()
    # 5日間/3時間のデータの処理
    for info in json_data["list"]:
        # utc時刻の取得
        date_utc = datetime.strptime(info["dt_txt"], "%Y-%m-%d %H:%M:%S").replace(tzinfo=timezone.utc)
        # utc時刻を日本時間に変換
        date_jst = date_utc.astimezone(jst_zone)
        # 気温の取得
        temp = info["main"]["temp"]
        # 天気の取得
        weather = info["weather"][0]["main"]
        # 降水確率の取得
        pop = info["pop"]
        # 上記データをリストに格納
        result.append({"date": date_jst.strftime('%Y-%m-%d %H:%M:%S'), "weather": weather, "temp": temp, "pop": pop})
    return result


def get_weather_forecast():
    api_key = get_api_key()
    zip_code = get_zip_code()
    lat, lon = get_lat_lon(zip_code, api_key)
    json_data = get_json(lat, lon, api_key)
    data = json_data_processing(json_data)
    return data


if __name__ == "__main__":
    # print(get_weather_forecast())
    api_key = get_api_key()
    zip_code = get_zip_code()
    lat, lon = get_lat_lon(zip_code, api_key)
    json_data = get_json(lat, lon, api_key)
    data = json_data_processing(json_data)
    print(data)

pop_led.py(降水確率によってLEDの色を変更)

import subprocess
import weather_forecast
import datetime

# 12時間分(4個)の降水確率の取得
def pop_12_hours():
    data = weather_forecast.get_weather_forecast()
    pop_list = [item['pop'] for item in data[0:4]]
    return pop_list

def change_led():
    for try_count in range(3):
        try:
            # 一番高い降水確率の取得
            max_pop = max(pop_12_hours())
            print(max_pop)
            # 雨(青)
            if max_pop >= 0.5:
                rgb_code = "0000FF"
            # 曇り(グレー)
            elif max_pop >= 0.2:
                rgb_code = "808080"
            # 晴れ(オレンジ)
            else:
                rgb_code = "ee7800"
            break
        except Exception as e:
            print(f"{try_count + 1}回目")
            print(e)
            rgb_code = "FF0000"

    # 色を設定するコマンドの実行
    command = ["sudo", "pironman5", "-rc", rgb_code]
    subprocess.run(command, capture_output=True, text=True, check=True)
    # 設定を反映
    command = ["sudo", "systemctl", "restart", "pironman5.service"]
    subprocess.run(command, capture_output=True, text=True, check=True)


if __name__ == "__main__":
    print(datetime.datetime.now())
    change_led()

あとはこのプログラムをcronで指定の時間に実行するように設定します。
このケースには上部についている4つのLEDと2つのファンについているLEDがあるのですが、色の操作ができるのは上部についているLEDのみのようです。なので、明るさを100にして、モードを固定(solid)にしないと分かりづらくなってしまうので注意が必要です。

この記事が気に入ったらサポートをしてみませんか?