冴えたやり方(諸説あり)
Godotアドベントカレンダー2025の17日目の記事です、ちょっと遅刻...!
(一般的なGodotユーザー向けの内容ではないですが、ニッチな記事こそWebに書く意義があるということにします)
- ゲームエンジンから現実世界に物理的に干渉したい
- 技術選定の基準
- 無線でやりたい
- 有線&5V以下
- 有線&5Vを超える→W55RP20-EVB-Pico+PoEモジュール+DCDCコンバータ&MQTT
- 有線&短距離
ゲームエンジンから現実世界に物理的に干渉したい
さて、たとえばインスタレーションなどやる時に、映像と現実世界をインタラクティブに繋ぎたいシーンがあります。 インタラクティブな映像作品というと、GodotやUnityなどのゲームエンジンを使うのが良さそうですが、現実世界に物理的に干渉したいとなると敷居が上がります。
ハードルになる要素は3つ
①現実世界に置くセンサーやボタン、モーターなどのアクチュエータをどうするか? ②それらのコントローラーをどうするか? ③それらとどうやって通信するか?
①はやりたい事によって無限の組み合わせがあるので、まずは②と③の話です。
ホントは技術的なところまで書きたかったんですが、年末進行でぜんっぜん間に合わなかったので、特に普段使いしている方法3種類を、用途別に簡単に紹介します。 ちなみに、もちろんGodotアドカレなのでGodotを使うときの話です。
技術選定の基準
よく使う選定基準はこのあたり。これもホントはYES/NOグラフみたいなものを用意したかったんですが...
- 有線/無線
- 扱う対象が5V以下/それ以上
- 数十センチ/それ以上
- 接続数が1対1/それ以上
無線でやりたい
- コントローラー:ESP32
- 通信方式:MQTT
- 接続数:多接続
こういう用途で手軽に無線となったら、よほど省電力とかパフォーマンスの要求がない限り、ESP32やそれを内蔵した製品(M5Stackなど)が第一候補になります。 少なくともプロトタイプはM5Stackシリーズを使うのが鉄板
そして通信方式は、使い勝手的にも周辺ツールの充実度的にも、今までも何度か話題にしているMQTTがベストだと思います。 Godot側は「MQTT Client」アセットを使います、使い方は以下の記事で。
有線&5V以下
- コントローラー:W55RP20-EVB-Pico(Raspberry Pi Pico互換)+PoEモジュール
- 通信方式:MQTT
- 接続数:多接続
W55RP20-EVB-Picoは、イーサネット通信モジュール付きのRaspberry pi pico互換機です。 有線LANを扱えるマイコンの中で最安級じゃないでしょうか。
そしてPoEはLANケーブル一本で通信も電源供給もできる夢の技術です。 とくにインスタレーションでは、広い空間にデバイスを散りばめたいことが多いと思うので、相性が良いと思います。
さらに、専用のPoEモジュールを使えば、簡単に5V電源を取り出せるので、電源が5Vのセンサーやモーターであればまとめて電源供給できます。
有線&5Vを超える→W55RP20-EVB-Pico+PoEモジュール+DCDCコンバータ&MQTT
5Vを超える電源が必要な場合は、PoEモジュールの1次側から48Vを取り出してDCDCコンバータで変換してあげれば良いと思います。まだやったことがないので、実験したら追記します。
有線&短距離
- コントローラー:一般的なマイコン全般(UARTが使えればなんでも)
- 通信方式:UARTシリアル通信
- 接続数:1対1
無線/有線LANを使う方式は、拡張性や手軽さという点では優れていますが、最低限IPネットワークに参加できるスペックのマイコンや、アクセスポイントやスイッチングハブなどのハードが必要になります。 1対1の通信、かつ短距離であれば、大抵のマイコンにはだいたい搭載されているUARTシリアル通信を使うのがミニマムだと思います。 Godot側でシリアル通信するには、GdSerialというアセットがかなり良い感じです。
あとはこれをベースに、GodotにFirmataプロトコル(ArduinoをリモートI/Oみたいに使えるやつ)を移植してくれる猛者が現れることを密かに期待してます。
こんど時間のある時にもう少し整理追記しようと思いますが、ひとまずこれにて!