Open6

vMix(など)に対応したStreamDeck-likeな物理コントローラーをArduinoで自作する

FlowingSPDGFlowingSPDG

2018年: vMixのAPIとリファレンスを手sed目grepしてAPI URLを作ってた
2019年: URLを生成するやつを作った(vmix-utility)
2021年: StreamDeckネイティブプラグイン化を試みる
2024年(イマココ): 直接APIに物理コントローラーからアクセスしようと考える

FlowingSPDGFlowingSPDG

まずは機能要件。

  • USBコントローラーとして機能するモードと、Ethernet経由で機能するモードが欲しい
    • つまりHIDとEthernet(TCP/IP, DHCP)が必要
  • 前者はStreamDeck(あくまでソフトウェアが本体)、後者はTriCasterやKairosのコンパネ(コントローラー側が本体)のようなイメージ
  • 各モードはスイッチで切り替え可能
  • 両モードも共通してアプリから設定を変更する
  • USBモードはvMixなど外部ソフトウエアとの通信部分もアプリが行う
  • Ethernetモードは設定のみアプリが担当し、vMix APIとの通信は基盤で行えるようにする
  • コントローラーとして使う性質上、複数代の接続がありえる
  • 起動は早いほうがいい(刺したら1分以内には使えるようになって欲しい)
  • スタジオ使用なので安定性は必要
FlowingSPDGFlowingSPDG

技術選定。

RaspberryPi4などのシリーズは、起動速度やOS周りがある為管理する対象が多くなってメンテナンス負荷が増えるのを嫌いたいので、要件的には悪くないが今回は外す。

TCPの対応、USB HID対応、ボタンやスイッチ搭載と将来的なLED搭載を考慮してRaspberryPi Pico, Arduino, M5stack, Armなどを候補に入れる。

コスパと拡張性を考えるとArm, Arduino、開発のしやすさを考えるとM5stackとなる。
目指すものがStreamDeckやTriCasterのコンパネのような拡張性が求められるシステムなので、Arm, Arduinoで考える。
また、(使いたいので)Rustで開発したい。これはただの欲。

FlowingSPDGFlowingSPDG

プロジェクト名は、
Arduino + StreamDeck Or Arm + StreamDeck
RDeck としてみる。
R一文字にArduino, Arm, Rustを詰め込んだ。

FlowingSPDGFlowingSPDG

どの言語で開発するにしろ、vMix TCP APIのクライアント実装が必要。
また、USBとRJ45、そしてそこそこしょりせいのうが高いCPUとメモリがいるかもしれない(XMLパーシングを行うならかなりいいのがいる)。

EthernetとUSB HIDが最初から乗ったArmか、Arduino Uno R4 MinimaにEthernet Shield2を載せるのとどちらが良いだろうか。
前者はコスパは程々だが、Arduinoベースだけあり文献は非常に多い。
後者はコスパは良いが、開発資料が少なく難しそうな気がする。悩ましい。

FlowingSPDGFlowingSPDG

期間が空いてしまった。
取り急ぎMilk-V DuoとUSB/Ethernet拡張ボードを購入した。
64MBモデルでLinuxが動くようなので、C/C++やRustでガッツリIoTするより、Linux上のRustやGoで気軽に書いて楽を出来そう、かも。
必然的にUSBモードは捨てになりそうだけど。