英語版から機械翻訳しています。 元の記事はこちら
Raspberry Pi Pico WでHomeKit対応の部屋コントローラーを自作した - エアコン、照明、テレビをOpenClawで操作
ESP32 Ambilightプロジェクトの続編です。今回は、Raspberry Pi Pico W、Homebridge、IR信号、Android TVのADB操作、OpenClaw搭載のBrobotを使って、HomeKit対応の部屋コントローラーを作りました。

Raspberry Pi Pico WでHomeKit対応の部屋コントローラーを自作した - エアコン、照明、テレビをOpenClawで操作
これは、以前書いた「ESP32ベースのスマートホームシステムをバイブコーディングで作った話」の続編です。その記事では、ESP32を使って自分の部屋のテレビ用Ambilightシステムを作った話を書きました。さらに、そのAmbilightシステムにHomeKit対応も追加して、Siriから照明を操作できるようにしました。
今回は、もう一段階チャレンジしました。Apple HomeKitに対応したまま、エアコン、照明、テレビをまとめて操作できる、部屋用のオールインワンコントローラーを作りたかったのです。前回のプロジェクトで、古いノートPC上のHomebridgeを使ってApple HomeKitと連携する土台はすでにありました。必要なのはIR LEDモジュールと、それぞれの機器を操作するための制御信号だけ。簡単そうですよね?
学習フェーズ
結果は、そんなに簡単ではありませんでした。AliExpressで安いIRモジュールを買い(この話はあとで出てきます)、ESP32に配線して、ネットで見つかるFujitsuエアコン用のIRコードをいろいろ試しました。どれも動きませんでした。かなり悔しかったです。でも、その過程で、マイコンからIRモジュールを制御する方法について多くを学びました。信号周波数、IR LEDを駆動するために必要な瞬間的な大電流、パルス幅などです。
このプロジェクトでは、ESP32よりRaspberry Pi Pico Wのほうが合っていることにも気づきました。自分が使っていたツールでは、IRまわりの作業を進めるうえでPico Wのほうが扱いやすい道筋を作れました。さらに、以前Amazonで買ったRaspberry Pi Pico Wベースの車キットが手元にあり、Pico W自体も余っていました。そこで、プロジェクト全体をRaspberry Pi Pico Wへ移行しました。この移行の大部分は、Antigravity上のOpus 4.5に任せました。

信号を正しく扱う
一番悩ましかったのは、FujitsuエアコンのIR信号プロトコルを特定することでした。AIに、ネットで見つかるFujitsuエアコン用IRコードを片っ端から試してもらいましたが、どれも動きませんでした。するとOpus 4.5が、IRプロトコルをリバースエンジニアリングすることを提案してきました。こちらが指示を出すのを待つのではなく、AIのほうからIR信号デコーダープログラムの使い方を指示し、リモコンで特定のボタンの組み合わせを押して、その結果を共有するよう求めてきたのです。とても面白かったです。このプロジェクトに、同僚が一人加わったような感覚でした。最終的に、プロトコルを解読できました。

偽物IRモジュール騒動
ソフトウェアは正しくなったのに、IRモジュールが弱すぎて、4フィートほど離れただけでエアコンに信号を送れませんでした。調べてみると、買ったIRモジュールにはトランジスタが入っていませんでした。3ピンのモジュールなのに、VCCピンと信号ピンが内部でつながっていたのです!これに気づくまでに何時間もかかりました。ただ、良い学びにはなりました。ハードウェアを扱うときは、必ずマルチメーターでピン配置をきちんと確認しましょう。何時間ものデバッグを節約できます。それから、AliExpressで一番安い部品を、確信なしに買うのもやめたほうがいいです。

偽物のIR送信モジュール

本物の2チャンネルIR送信モジュール
気を取り直して、今度は説明文、画像、レビューを慎重に確認して新しいモジュールを買いました。これはかなりうまく動きました。
マスターIRリモコン
一番難しい部分だったエアコンのIRプロトコルのリバースエンジニアリングが終わると、照明とテレビ用のIRコード収集はかなり簡単でした。同じIRレコーダープログラムで新しい信号を記録し、それぞれのボタンに割り当てるようOpusに頼んだら、準備完了です。

HomebridgeとOpenClaw
Homebridgeの設定は、私のDiscordボット「Brobot」へのプロンプト一つで進みました。BrobotはOpenClawで動いていて、古いノートPC上で私の家を見守っています。新しいHTTPスイッチと、Web Thermostatプラグインを設定してくれました。AmbilightシステムをセットアップしたときにHomeKitブリッジはすでにホームアプリへ追加していたので、iPhoneのホームアプリに新しいデバイスがすぐ表示されました。

Android TVのADB操作
作業中に、homebridge-adbというプラグインを使えば、HomebridgeからADBでAndroid TVを直接操作できることに気づきました。これはIRブラスターを使うよりずっと良い選択肢でした。ADBはWi-Fi経由でワイヤレス接続できるので、マイコンは不要です。さらに、IRブラスターより信頼性が高く、テレビのオンオフだけでなく、音量調整、入力切り替え、アプリ起動など、いろいろな操作ができます。そこでHomebridgeに4つのスイッチを設定しました。テレビのオン/オフ、HDMI入力への切り替え、YouTubeを開く、Netflixを開く、の4つです。少し設定するだけで、iPhoneのホームアプリやSiriからテレビを操作できるようになりました。
特に、YouTubeの特定の動画やNetflixの作品を開けるようになったのは大きな変化でした。Discord上のBrobotに「Netflixで何かの番組の最新エピソードを再生して」と頼むと、その通りに動いてくれます。

テレビのディープスリープと起動時の遅延
ADBでテレビを操作できるのは画期的ですが、独自の問題もあります。ワイヤレスプロトコルなので、IRリモコンほど反応が速くありません。テレビがディープスリープから復帰するときは大きな遅延があり、30秒近くかかることもあります。ADBに頼らずAndroid TVのリモコンAPIを使うhomebridge-androidtvという別のHomebridgeプラグインも試しましたが、同じ問題が残りました。どうやらAndroid TVのディープスリープ実装の問題のようです。最終的にはこれを直すのを諦め、ディープスリープからテレビを起動するときはRaspberry Pi Pico W側のIR信号を使い、テレビが起きた後はADBを使うことにしました。
メーカー側でディープスリープを調整できる設定を用意してくれていたらよかったのに、とは本当に思います。でも、IRとADBを組み合わせることでうまく回避できたので、まあ大丈夫です。
楽しい部分
技術的なセットアップが終わったら、楽しい時間です!

シーン
まず、iPhoneのホームアプリでシーンを設定しました。一番気に入っているのは「Movie Time」シーンです。部屋の照明をすべて消し、テレビ用Ambilightを暗くし、テレビをつけてNetflixを開き、さらにホームアプリ上でエアコンを今の好みの温度に調整します。本当に魔法みたいに感じますし、このおかげで最近は映画を見る回数が増えたと自信を持って言えます。
同じように、帰宅、外出、起床、就寝などのシーンも設定しています。今後はもっとシーンを増やしたいです。室温や湿度に関係するものも面白そうです。ショートカットアプリのオートメーションも試して、スマートホーム体験をさらに良くできるか見てみたいと思っています。
Brobot(Discord上のOpenClawエージェント)
最近の日本はかなり暑く、会社から帰ってきてからエアコンで部屋を冷やすには少し時間がかかります。なので、帰宅途中にBrobotへメッセージして、エアコンをつけてもらうことがよくあります。そうすると、家に着くころには部屋がもう涼しくなっています。

ちょっと過剰設計かも?
1年前の私に聞いたら、たぶん「そうだ」と答えたと思います。エアコンを動かすだけでも、かなり多くのソフトウェア作業が必要だったからです。でも今回のプロジェクトでは、そのソフトウェア作業の大部分をAIエージェントが担当しました。なので技術的には、私はエージェントを導き、ハードウェア部分を扱う以外、そこまで多くの作業をしていません。正しい形で組み合わせるだけでした。そして、オープンソースコミュニティのおかげで、それが本当にやりやすくなっています。
これからは、AIエージェントを自分のために働かせる方法を見つけることが重要になっていくと思います。私はいつも、そういうプロジェクトを探しています。自分のアイデアが形になっていくのを見るのは、本当に楽しいです。
次は、LEDマトリクスの目、スピーカー、車輪を使って、Brobotに簡単な物理的な姿を与える予定です。うまくいくよう祈っていてください!
アーカイブから


