【レビュー】ハードケース型Raspberry Pi学習キットCrowPiを使ってみた

【PR】この記事には広告が含まれています。

【レビュー】ハードケース型Raspberry Pi学習キットCrowPiを使ってみた

Raspberry Piの学習キットは数あれど、見た目のインパクトがここまで強烈な製品はまずないでしょう。ハードケース型のオールインワン学習キット「CrowPi」が以前から気になっており、レビュー記事がほとんど見当たらないこともあって、半ば使命感のような気持ちで購入を決意しました。

スパイグッズのようなケースを開くと、9インチタッチディスプレイと電子工作で定番のLCDやセンサー、スイッチ類が整然と配置されています。メカ好きな方なら、この外観だけで心をつかまれるはずです。

本記事ではCrowPiの外観の魅力を入口に、実際に動かして感じた楽しさや、初心者でも無理なく始められるかといった点から、高額なこの製品に購入する価値があるのかをレビューしていきます。

公式サイトから購入

Elecrowの公式サイトから購入したCrowPi。注文から到着までは7日間でした。購入したタイミングでは5ドルオフのクーポンが配布されており、送料込みで約36,000円。価格は購入時の為替レートによって前後します。CrowPiはAliExpressでも購入可能です。

出典:CrowPi販売ページ

購入時にACアダプターの電源プラグの規格を選択します。USプラグは日本のコンセントと形状が同じであるため、そのまま使用できます。

付属のACアダプター(USプラグを選択)

CrowPiの基本情報

CrowPiを手がけているElecrowは、中国・深圳を拠点に、電子工作やRaspberry Pi関連の製品を多く展開しています。

ハードケース型デザインと作り

Basic KitはRaspberry Pi本体が別売り

ハードケース型の筐体に9インチのタッチディスプレイや各種センサー、操作用の基板が組み込まれており、ケースを開いた状態で使う前提の構成になっています。

CrowPiには、Basic KitAdvanced Kitの2種類があります。私が購入したBasic KitはRaspberry Pi本体が付属しない構成で、すでに本体を持っている人向けです。Advanced KitはRaspberry Pi 5(8GB)が同梱され、その分価格が上がります。

CrowPiで使用できるモデルはRaspberry Pi 5またはRaspberry Pi 4となっています。

搭載されているパーツ

出典:CrowPi販売ページ

ケース内には9インチのタッチディスプレイをはじめ、カメラ、LEDマトリクス、ブザー、各種ボタン、温度・湿度センサー、距離センサー、モーター制御系、ブレッドボードなどがまとめられています。

そぞら
そぞら

配線を個別に行わなくても、多くのセンサーや入出力デバイスをすぐ試せるよう設計されているのが特徴です。

ステッピングモーターを動かしている様子

モーターなどの一部のパーツはCrowPi側の専用コネクタに挿して使用します。コネクタは向きを間違えて挿せない形状になっているため、接続で迷うことはありません。

出典:CrowPi販売ページ

本体のほかに、電源アダプターとOSを書き込んだmicroSDカードが付属しており、Raspberry Piを用意すればすぐに起動できます。加えて、モーター類やIRリモコン、RFIDカード、GPIOケーブルなど、Raspberry Piでの入出力や制御を試すための基本パーツがひと通りそろっています。

ユーザーマニュアルは英語ですが、PDF版をダウンロードしてGoogle翻訳を利用すれば、日本語で内容を把握できます。

使用開始までの準備

付属のmicroSDカード(CrowPi用OS書き込み済)

CrowPiは付属のmicroSDカードをRaspberry Piにセットするだけで、そのまま起動して使い始めることができます。ただし私の環境では、付属カードを使った場合、Webページの表示や VNC操作、パッケージのインストールが非常に遅く感じられました。そこで付属のmicroSDカードにCrowPi専用OSイメージを書き直して起動したところ、動作が明らかに軽くなりました。

そぞら
そぞら

まずは付属のmicroSDカードでそのまま起動し、重さを感じた場合は、次の手順でOSイメージを書き直してみると良いと思います。

CrowPi専用OSイメージをダウンロード

通常はこの手順を省略し、下のmicroSDカードの取り付けから始めて問題ありません。OSを書き直す場合は公式サイトからRaspberry Pi 5用イメージのファイルをPCにダウンロードします。

microSDカードにOSイメージを書き込み

PCにmicroSDカードをセットします。カードリーダーもキットに付属していました。

Raspberry Pi Imagerというソフトを使って、microSDにOSイメージを書き込みます。OSの選択画面で、「カスタムイメージを使う」をクリック後して、ダウンロードしたimgファイルを選択します。

Raspberry Pi Imagerの操作画面

OSイメージの書き込みは1時間かかりました。

microSDカードの取り付け

書き込みが完了したら、microSDをRaspberry Piにセットします。今回使用したのはRaspberry Pi 5の8GBモデルです。

Raspberry PiをCrowPiに取り付け

Raspberry Piに電源やHDMIのケーブルを接続して、CrowPiに固定します。ドライバーはキットに付属しています。

キーボードとマウスUSBポートを接続。Basic Kitにはキーボードとマウスが付属しないので、手持ちのものを使用しました。

フラットケーブルはGPIOピンへの取り付け前に、山折りに曲げておくと接続しやすいです。

実際に動かしてみる

ここからは、CrowPiを実際に起動し、基本的な使い方を一通り試していきます。

電源を接続して起動

CrowPiに電源ケーブルを接続すると、Raspberry Piやディスプレイを含むシステムが起動します。CrowPiの電源スイッチはありません。

Raspberry Piが起動すると、ディスプレイにデスクトップ画面が表示され、すぐに操作を始められます。CrowPiを動かすためのソフトウェアは最初から入っており、必要な設定も済んだ状態になっていました。

センサーやモジュールをPythonで操作する

温湿度センサーから取得した数値を表示

まずはデモコードを動かして、ディスプレイやセンサーなどのデバイスを動かしてみましょう。公式チュートリアルの通りに進めていけば問題ありませんが、以下の手順だとコマンド入力不要で簡単にプログラムを実行できます。

デスクトップの「CrowPi」フォルダを開いて「Examples」を開きます。

「Examples」には各デバイスを動かすための基本的なコードが、あらかじめ保存されています。ファイル名を見れば、どのデバイス用のコードかがわかりようになっています。

マトリクスLEDの動作確認

ここでは例として「matrix_demo.py」(マトリクスLEDのデモコード)を右クリックして、Thonnyで開きます。ThonnyはPython初心者向けに作られた統合開発環境で、コードの編集と実行を一つの画面で行えます。

実行ボタンを押すと、マトリクスLEDに「Hello World」がスクロール表示されました。

使用する部品によっては、以下の物理スイッチの切り替えが必要なものもあります。これは、Raspberry Piが使えるGPIOピンの数に限りがあり、複数の部品で同じピンを共有しているためです。

RFIDリーダーの動作確認

RFIDリーダー(MFRC522)を使うと、カードやタグに書き込まれたIDの読み取りや、文字データの読み書きができます。

デモコードを実行して、RFIDタグをリーダーに近づけます。

読み取りに成功すると、タグのIDがThonnyのShell画面に表示されます。

RFIDは本来、通信や制御などの複雑な処理が必要な仕組みです。しかし、このプログラムでは、そうした面倒な処理をまとめて引き受けてくれる仕組み(ライブラリ)を使っているため、わずか8行のコードでタグの読み取りができ、すぐに動作を確認できます。

RFIDリーダーの活用方法を模索

この仕組みを応用して、RFIDタグをかざすことでCrowPiを使える認証機能を実装してみました。Raspberry Piの起動時にプログラムが自動で立ち上がるように設定し、RFIDタグ認証が成功したときだけデスクトップ画面が開く仕組みです。

待機中の画面には映画「マトリックス」をイメージした動画を表示し、タグをかざすとサイバーパンク調の認証完了画面に切り替わります。このとき、7セグメントLEDやマトリクスLEDも同時に点灯させ、演出を盛り上げます。

Scratchでプログラミングもできる

CrowPiはPythonだけでなく、Scratchを使ったプログラミングにも対応しています。画面上でブロックを組み合わせるだけなので、コードを書く必要はありません。操作は直感的で、プログラミングが初めてでも動かしやすいように設計されています。

ブザーを鳴らすプログラムを作成

ブザーが鳴る、LEDが光るといった動作を、画面を見ながら確認できます。処理の流れを視覚的に理解しやすく、「なぜ動いたのか」が分かりやすい点が特徴です。

一方で、すべてのパーツをScratchで制御できるわけではありません。カメラを使った画像処理や、複雑な制御が必要なパーツは、Scratchでは扱えません。そうした処理はPython向けです。CrowPiは、Scratchで基礎を学び、必要に応じてPythonに進める構成になっています。

マインクラフトでも遊べる

CrowPiではRaspberry Pi向けに用意されたMinecraft Pi Editionを使って遊ぶこともできます。Raspberry Piで快適に動作するよう調整された特別版で、シンプルな構成が特徴です。

「Minecraft Pi」はスタートメニューのゲームから起動できます。

Minecraft Pi EditionはPythonと連携できる点が特徴です。コードを書いてブロックを配置したり、ゲーム内の情報を取得したりできます。まずはゲームとして遊び、興味が出てきたらプログラミングにも踏み込める構成です。

デモコードを応用して遊ぶ

用意されているデモコードをそのまま動かすだけでなく、少し手を加えながら遊んでみます。

そぞら
そぞら

コードを組み合わせることで、独自の使い方を生み出すのが電子工作の醍醐味です。

ここでは、カメラで顔を検出し、その結果を複数の表示デバイスに同時に出す構成を試しました。

顔認識した結果を表示デバイスで可視化

以下のコマンドをターミナルで実行して、PythonからOpenCVという画像処理ライブラリを使えるようにします。

sudo apt install python3-opencv

OpenCVで顔認識などを行うための 学習済みデータ一式をインストールします。

sudo apt install -y opencv-data

以下のプログラムはカメラ映像から顔を検出し、そのステータスを7セグメントLEDやLEDマトリクス、LCDに表示するものです。

import cv2
import smbus
from ht16k33segment_python import HT16K33Segment
from luma.led_matrix.device import max7219
from luma.core.interface.serial import spi, noop
from luma.core.legacy import show_message
from luma.core.legacy.font import proportional, CP437_FONT
import HD44780MCP
import MCP230XX
import threading
import time

# -----------------------------
# Haar Cascade configuration
# -----------------------------
HAAR_FILE = "/usr/share/opencv4/haarcascades/haarcascade_frontalface_default.xml"
cascade = cv2.CascadeClassifier(HAAR_FILE)

if cascade.empty():
    raise RuntimeError("Failed to load Haar Cascade XML file")

# -----------------------------
# 7-segment display (HT16K33) configuration
# -----------------------------
i2c = smbus.SMBus(1)
led = HT16K33Segment(i2c)
led.set_brightness(10)

# Initialize MCP
i2cAddr = 0x21
MCP = MCP230XX.MCP230XX('MCP23008', i2cAddr)

# Backlight ON
blPin = 7
MCP.set_mode(blPin, 'output')
MCP.output(blPin, True)

# Initialize LCD (16x2)
LCD = HD44780MCP.HD44780(MCP, 1, -1, 2, [3,4,5,6], rows = 2, characters = 16, mode = 0, font = 0)

LCD.clear_display()
LCD.cursor(False)

def display_count(value):
    """Display a count value (0?9999) on the 7-segment LED."""
    value = max(0, min(9999, value))
    bcd = int(str(value), 16)

    led.set_number((bcd & 0xF000) >> 12, 0)
    led.set_number((bcd & 0x0F00) >> 8, 1)
    led.set_number((bcd & 0x00F0) >> 4, 2)
    led.set_number((bcd & 0x000F), 3)
    led.update()
    
def show_detect_message():
    """Show 'detect' message on MAX7219 LED matrix."""
    serial = spi(port=0, device=1, gpio=noop())
    device = max7219(
        serial,
        cascaded=1,
        block_orientation=90,
        rotate=0
    )

    show_message(
        device,
        "detect",
        fill="white",
        font=proportional(CP437_FONT),
        scroll_delay=0.05
    )    

def lcd_show_detect():
    LCD.clear_display()
    LCD.set_cursor(0, 0)
    LCD.display_string("detect!")

# -----------------------------
# Camera configuration
# -----------------------------
cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc(*'MJPG'))
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 800)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 600)

detect_count = 0
prev_detected = False
lcd_active = False

cooldown_frames = 20
cooldown_counter = 0

display_count(detect_count)

# -----------------------------
# Main loop
# -----------------------------
while True:
    ret, frame = cap.read()
    if not ret:
        break

    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    faces = cascade.detectMultiScale(
        gray,
        scaleFactor=1.2,
        minNeighbors=5,
        minSize=(80, 80)
    )

    detected = len(faces) > 0

    # Case 1: detection starts (False -> True) and cooldown is over
    if detected and not prev_detected and cooldown_counter == 0:
        detect_count += 1
        display_count(detect_count)     # 7-segment update
        lcd_show_detect()               # LCD update
        #lcd_active = True
        # Run MAX7219 message in a separate thread
        threading.Thread(
            target=show_detect_message,
            daemon=True
        ).start()            

    # Case 2: detection ends (True -> False), start cooldown
    if not detected and prev_detected:
        cooldown_counter = cooldown_frames
        
    if cooldown_counter == 0 and not detected:
        LCD.clear_display()
        #lcd_active = False        

    # Decrease cooldown after detection has ended
    if cooldown_counter > 0:
        cooldown_counter -= 1

    prev_detected = detected

    for (x, y, w, h) in faces:
        cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 0, 255), 2)

    cv2.imshow("Face Detection Counter", frame)

    if cv2.waitKey(1) & 0xFF == ord("q"):
        break

# -----------------------------
# Cleanup
# -----------------------------
cap.release()
cv2.destroyAllWindows()
led.clear()
led.update()

コードを実行するとウィンドウにはカメラ映像が映し出され、検出された顔には赤い枠が描画されます。

顔が検出された回数を数え、その数値を7セグメントLEDに表示します。さらに、顔を検出した瞬間には、LCDに「detect!」という文字を表示し、LEDマトリクスには「detect」という文字が流れるようにしています。

同じ顔を連続して検出した場合に回数が増えすぎないよう、少し待ち時間を入れる工夫もしています。

画像処理の結果を複数の表示方法で見せることで、「認識した情報をどう表現するか」まで踏み込めるのが面白い点です。デモコードを組み合わせることで、CrowPiを使った遊び方の幅が広がります。

CrowPiはどんな人向けか

Raspberry Piや電子工作に興味はあるものの、

  • 何を買えばいいのか分からない
  • 部品や配線の扱いが不安
  • プログラミングに自信がない


といった理由で、これまで踏み出せなかった人に適しています。

ケースを開くと、何かすごいことができそうなワクワク感があり、実際に約20種類のパーツを手軽に動かすことができます。Raspberry Piの使い方に慣れるという意味でも有用です。

そぞら
そぞら

ただし、入門用としては価格が高めなのは気になるところ。

パーツはあらかじめ固定されており、構成を自由に組み替えたり、発展させたりする余地は限られています。そのため、すでに電子工作に慣れていて、自分で部品を選び構成を考えたい人には向きません。

CrowPiはソフトウェアの設計やマニュアルのわかりやすさも含め、全体としてよく作り込まれている印象を受けました。コンセプトに惹かれる部分があれば、自分の用途に合うかを考えたうえで検討してみるとよいでしょう。





コメントを残す

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