このガイドでは、Node-REDのPi Sense HATノードについて、初心者の方でも理解できるように詳しく説明します。
⚠️ ハードウェア要件(必ずお読みください)
npm install node-red-node-pi-sense-hat でも可能です。Raspberry Pi Sense HATは、Raspberry Piに接続できる多機能センサーボードです。 Pi Sense HATノードを使うと、このボードのセンサーデータを読み取ったり、LEDディスプレイを制御したりできます。
モーション 加速度計・ジャイロ・磁力計
環境 温度・湿度・気圧
ジョイスティック 5方向入力
8×8マトリックス 64個のフルカラーLED
ピクセル単位・テキストスクロール・回転・反転に対応
このパッケージは2種類のノードで構成されています:
| 設定項目 | 説明 | デフォルト |
|---|---|---|
| モーションイベント | 加速度計、ジャイロスコープ、磁力計、方位計からのデータを取得する | 有効(チェックあり) |
| 環境イベント | 温度、湿度、気圧センサーからのデータを取得する | 有効(チェックあり) |
| ジョイスティックイベント | ジョイスティック(UP/DOWN/LEFT/RIGHT/ENTER)の操作を検出する | 有効(チェックあり) |
| 名前 | ノードの表示名 | 空("Sense HAT" と表示) |
| 設定項目 | 説明 | デフォルト |
|---|---|---|
| 名前 | ノードの表示名 | 空("Sense HAT" と表示) |
💡 ポイント: rpi-sensehat out は設定項目が名前のみです。LEDへの出力内容はすべて msg.payload で制御します。
rpi-sensehat in は、各イベントが発生するたびにメッセージを出力します。msg.topic でイベントの種類を判別できます。
約10回/秒の頻度で送信されます。msg.payload に以下のデータが含まれます:
| プロパティ | 内容 | 単位 |
|---|---|---|
acceleration.x/y/z |
加速度計(X/Y/Z軸) | G(重力加速度) |
gyroscope.x/y/z |
ジャイロスコープ(X/Y/Z軸) | ラジアン/秒 |
orientation.roll/pitch/yaw |
向き角度(ロール/ピッチ/ヨー) | 度 |
compass |
磁方位 | 度 |
約1回/秒の頻度で送信されます。msg.payload に以下のデータが含まれます:
| プロパティ | 内容 | 単位 |
|---|---|---|
temperature |
温度(Sense HAT基板上の温度センサーのため、CPUの熱影響を受ける場合あり) | ℃ |
humidity |
湿度 | % |
pressure |
気圧 | ミリバール(hPa) |
⚠️ 温度精度について: Sense HATの温度センサーはRaspberry PiのCPUに近いため、実際の室温より5〜10℃高く表示されることがあります。補正が必要な場合は msg.payload.temperature - 5 のように差し引いて使用してください。
ジョイスティックの操作時に送信されます。msg.payload に以下のデータが含まれます:
| プロパティ | 内容 | 値 |
|---|---|---|
key |
押されたキーの方向 | "UP" / "DOWN" / "LEFT" / "RIGHT" / "ENTER" |
state |
キーの状態 | 0 = 解放、1 = 押下、2 = 保持(長押し) |
rpi-sensehat out は msg.payload に文字列でコマンドを送ることで、8×8 LEDマトリックスを制御します。
形式: x,y,色
| 書式 | 内容 | 例 |
|---|---|---|
x,y,色 |
指定座標のピクセルを点灯(x/y: 0〜7) | 3,3,red |
*,y,色 |
指定行の全ピクセルを点灯 | *,0,blue |
x-x,y-y,色 |
指定範囲のピクセルを点灯 | 0-3,0-3,green |
x,y,off |
指定座標のピクセルを消灯 | 3,3,off |
色の指定方法:
red, blue, green, white など#ff0000255,0,0(ピクセル設定では使用不可)warmwhite などoff| コマンド | 内容 |
|---|---|
R0 / R90 / R180 / R270 |
ディスプレイを指定角度で回転 |
FH |
水平方向に反転(左右反転) |
FV |
垂直方向に反転(上下反転) |
msg.payload に通常の文字列を送ると、8×8 LEDに自動スクロール表示されます。
| プロパティ | 内容 | デフォルト |
|---|---|---|
msg.payload |
スクロール表示するテキスト | - |
msg.color |
テキストの色 | white |
msg.background |
背景色 | off(消灯) |
msg.speed |
スクロール速度(1〜10) | 3 |
| コマンド | 内容 |
|---|---|
D0 |
LEDの明るさを低く設定(暗い環境向け) |
D1 |
LEDの明るさを高く設定(通常) |
📥 サンプルフローのインポート方法:
⚠️ このノードはRaspberry Pi + Sense HATがある環境のみで実際に動作します。
Sense HATの全センサーデータをデバッグパネルで確認する基本パターンです。
全センサーデータをデバッグパネルに表示します
環境センサーのデータを取得し、温度に応じてLEDの色を変えるパターンです。
温度が30℃以上なら赤、25℃以上なら橙、それ以外は青でLEDを点灯します
ジョイスティックの操作に応じてLEDにメッセージをスクロール表示するパターンです。
ENTERキーを押すと "Hello!" をスクロール表示します
InjectノードからLEDの各種コントロールコマンドを手動で送信するパターンです。
各種コマンドの動作確認に使用できます
課題: rpi-sensehat in から来るメッセージをtopicで振り分け、環境データのみデバッグに表示するフローを作成してください。
✅ 成功の条件:
msg.topic: "environment" のメッセージのみが約1秒ごとに表示されるmotion や joystick のメッセージはデバッグパネルに一切表示されないtemperature・humidity・pressure の3つのキーが含まれているヒント: SwitchノードでSwitchの条件を msg.topic == "environment" にします。
課題: ジョイスティックの各方向(UP/DOWN/LEFT/RIGHT)に対応した色でLED全面を点灯させるフローを作成してください。
✅ 成功の条件:
ヒント: Switchノードで msg.payload.key の値(UP/DOWN/LEFT/RIGHT)ごとに出力を分岐し、各Changeノードで msg.payload を *,*,色 に設定します。
課題: モーションセンサーの傾き(orientation)を監視し、Sense HATが水平から30度以上傾いたときにLEDを点灯させるフローを作成してください。元に戻したら3秒後に自動消灯します。
✅ 成功の条件:
💡 なぜ傾きを使うのか: orientation.roll(左右の傾き)と orientation.pitch(前後の傾き)は、ボードを手で傾けるだけで確実に大きく変化します。実際に手に持って試してみましょう。
ヒント:
msg.topic === 'motion' のときのみ処理し、msg.payload.orientation.roll と msg.payload.orientation.pitch を確認します| 症状 | 原因 | 解決方法 |
|---|---|---|
| ノードが「赤いエラー」状態になる | Raspberry Pi以外の環境で実行している | Raspberry Pi上のNode-REDで実行してください |
| ノードが起動しない / Sense HATが応答しない | Sense HATが正しく接続されていない | 電源を切ってから再接続し、sudo apt install sense-hat を実行 |
| 温度が実際より高く表示される | CPUの熱がSense HATの温度センサーに影響している | Functionノードで補正値を引く(例: temp - 5) |
| モーションデータが多すぎる | 約10回/秒で送信されるため過負荷になることがある | Switchノードやフローコンテキストを使い、一定間隔でのみ処理する |
| LEDにコマンドが効かない | msg.payload の書式が間違っている |
座標は x,y,色(スペースなし)、色はHTML色名かHEXで指定 |
💡 Pi Sense HATノードのポイント:
msg.payload の文字列コマンドで8×8 LEDを制御