前回の記事で紹介した人感センサーLD2410を、Raspberry Pi 4 (RPi4) のGPIOピンに接続しました。GPIOピン状態をHomeKit人感センサーに橋渡しするHomebridgeプラグインを使用して、HomeKitから使えるようにしました。
前回のあらすじ
LD2410は、24GHzのFMCW(周波数変調連続波)レーダーを使った人検出センサーです。AliExpressで送料別393円で売ってます。工場出荷時状態で適切に動作するので、電源を接続するだけで、人感知を反映した1ビットOn/Off信号が得られます。
上記の記事では、これをESP32に接続しました。人の検出結果をESP32が、RPi4 で動作しているMQTTブローカーMosquittoに送ります。それをHomebridgeのMqttthingプラグインで受けて、HomeKitに橋渡ししてました。
この構成では、ESP32とRPi4がWiFiで接続しているので、センサーを家のどこにでも設置できます。
今回はRPi4のGPIOに接続
実はLD2410を設置したい部屋では、RPi4が動作してます。なのでWiFi接続を利用せず、RPi4に直接接続しても良いです。ということで、今回は、RPi4のGPIOにセンサーを直結します。以下の構成です。
そこで、LD2410のVCC, GND, OUTを、RPi4の5V PWR, GND, GPIO4に接続しました。GPIOの接続先はどこでも良かったのですが、5V, GNDピンの近いところということで適当にGPIO4に配線しました。
RPi4は、AliExpressで買ったファン付きケースに入ってます。
ケース上部には、GPIOの場所にスリットが空いてますので、LD2410のケーブルをそこに挿しました。RPi4は、部屋の棚の上の段に置いているので、LD2410は斜め下に居る人に向くように、テープと粘着剤(ひっつき虫)で固定しました。
LD2410は、指向性がシビアなようで、人を確実に検出し続けるためには、人の方向に向けておく必要があります。市販の製品と比較すると、TuyaのZY-M100センサーに近い感じです。これに対して、AqaraのFP1は、高価格なだけに、適当に設置しても安定して人検出し続けます。そこで写真のようにセンサーを設置しました。これで検出に失敗する事はほとんど無くなりました。
次に、RPi4にssh接続して、raspi-gpioコマンドでセンサーの状態を確認します。
$ raspi-gpio get 4 GPIO 4: level=1 fsel=0 func=INPUT pull=UP
GPIO 4番のlevelが1ということで、人を検出しているらしいことが確認できます。pull upされているので、接続できていないだけの可能性もありますが、人を検知しなくなると、lever=0になりました。LD2410にはpull upは不要ですが、デフォルトを変更するのが面倒なので、このままにしておきました。
GPIOプラグインを選定
GPIOに接続したので、これをプログラムで(例えばPythonで)読み込むこともできます。例えば、プログラムからMQTTブローカーにメッセージを送れば、前回の記事と同じくMqttthingプラグインでHomebridge/HomeKitに接続できます。でも今回はもっと簡単に、GPIOの状態を読み込むプラグインを使うことにしました。
GPIOを扱えるプラグインを探すために、HomebridgeのWeb UIの「プラグイン」のページで、gpioをキーワードに検索しました。そこ結果、30個のプラグインが見つかりました。
Rpiプラグイン
この中でも、Homebridge Rpiというプラグインが、一番汎用的で、メンテナンスもされている様子です。様々な目的に使えて、Motion sensorにも対応してます。
対応しているアクセサリーは、
- Buttons
- Contact sensors (Eveの履歴機能対応)
- DHTxx 温度/湿度 sensors
- Doorbells
- Motion sensors (Eveの履歴機能対応)
- Leak sensors
- Smoke sensors
- リレー、LED, ファンなどのスイッチ
- PWM方式の調光LED(電球)
- サーボモーター(HomeKitからスイッチとして見える)
- 調色LED
とのことです。対応アクセサリ種類に、Mqttthingでは用意されていたOccupancy sensorはありません。でも、Motion sensorは、PIR(パッシブ赤外線)人感センサーのことで、ホームアプリからの扱いは、Occupancy sensorと全く同じなので、これでも問題ないと思います。
Motion sensor plusプラグイン
ということで、Homebridge Rpiをインストールして設定を始めようとしました。が、pigpiodデーモンの設定が必要でした。Raspberry PiのGPIOを使うためには、数種類のライブラリがあって、その中でも一番玄人向けがpigpioらしいです。pigpiodデーモンは、さらにそれをソケット通信から使うために機能で、LAN接続も可能にします。ただ、あまり複雑なことはしたくなかったので、pigpiodを使わない他のプラグインを探しました。
他の選択肢として、Motion sensor plusプラグインが良さそうでした。こちらはpigpiodの設定が不要で、すぐに使い始められるようです。
Motion sensorに特化したプラグインで、機能は少ないです。でもセンシングの細かい調整も可能なようです。ということで、Motion sensor plusプラグインを使用することにしました。
プラグインを設定
Motion sensor plusをインストールして、「設定」をクリックします。必須の設定項目は、「Name」「sensorType」「gpioPin」の3箇所です。gpioPinは4番に設定します。sensorTypeは、PIR SensorとDopplerraderから選択します。どちらかというとDoppler raderかと思ったのですが、こちらはGPIOピンがLOWの時に人が居ると判定するようです。LD2410に合わせて、人の検知でHIGHになるRIP Sensorを選択しました。
この結果、「コンフィグ」を確認すると、以下になりました。
{
"name": "LD2410",
"sensorType": "pir",
"gpioPin": 4,
"timeoutSeconds": 1,
"cacheSeconds": 0,
"delayMilliseconds": 0,
"delayCacheSeconds": 0,
"accessory": "Motion Plus Sensor"
}
ここで、timeoutSecondsは、センサーをポーリングする時間間隔(秒)のようです。0秒では、頻繁すぎて他の処理に影響与えそうな気もしたので、最小値の1秒にしました。整数指定なので0と1の中間値は指定できません。
HomeKitから使う
設定ファイルを保存し、Homebridgeを再起動すると、iPhoneとMacのホーム.appに以下のように人感センサーが表示されました。
次に、ホーム.appに、「人を検知したら照明をOn」と「人の検知を停止したら照明をOff」のオートメーションを設定しました。
動作を確認したところ、部屋に入るとすぐに(2~3秒で)照明が点灯します。また、部屋から出ると7~8秒で照明が消灯します。ESP32で接続した場合よりも、応答時間が遅いのは、ポーリング間隔が10msから1秒に増えたからだと思います。それでもAqara FP1より高速です。
まとめ
人感センサーL2410を、Raspberry Pi 4のGPIOピンに接続し、Homebridge経由でHomeKitから使えるように設定しました。この方法ならばESP32不要なので、センサー部品代金(送料・ケーブル込みで1000円程度)だけで実現できます。使用場所がRaspberry Piの周囲に限定されますが、確実に動作するレーダーセンサーをHomeKitに組み込む一番安価な方法だと思います。
コメント