ドローンシミュレーターをPC上で動かす場合など,ドローン用のプロポをPCに接続して使いたいことがあります. 最近のプロポはUSBで接続するとそのままHIDデバイスとして認識されるものもありますが,わざわざ有線で接続するのは面倒です. そこで,USBにつなぐとプロポからの信号を受信してHIDデバイスとして動作するアダプターを作りました.
送信機のプロトコルは,これまで自作フライトコントローラーなどで使ったのと同じHiSKYプロトコルを使いました. HiSKY製のプロポや,マルチプロトコル対応のプロポで使うことができます. RFモジュールにはNRF24L01を使いました. マイコンはUSBに対応していれば何でもよいのですが,ここではBlue Pill (STM32F103)を使いました.
配線は下記の通り非常に簡単なので,回路図は書きませんでした.
Blue Pill | NRF24L01 |
GND | GND |
3.3V | VCC |
PA3 | CE |
PA4 | CSN |
PA5 | SCLK |
PA6 | MISO |
PA7 | MOSI |
ファームウェアの開発は,いつもどおりArduinoIDEでArduino_Core_STM32を使いました. この開発環境ではUSB HIDデバイスはマウスとキーボードしか対応しておらず,それ以外のデバイスは自前で実装する必要がありかなり面倒でした. HIDのレポートディスクリプタはJumper社のT-Lite送信機と同じにしました. これは8軸のアナログ入力と24個のデジタル入力を持つGame Padデバイスとなっていますが,デジタル入力の方は使用していません. 送信機からの電波を受信してプロトコルを処理するコードは,以前作成したものをほぼそのまま流用しています.
Blue Pillには緑色のLED (PC13)が搭載されていますが,プロポにバインドされていない場合は点滅,信号受信時は点灯,信号断絶時は消灯します. また,別のプロポにバインドしなおす場合は,BOOT1のジャンパースイッチ(PB2)を1側にするとバインドがリセットされるので,再び0側に戻してから新しいプロポでバインドします.
STM32用ArduinoのEEPROMライブラリがうまく動作せず悩みましたが,Blue Pillに載っているSTM32F103をよく確認してみるとCKS社の偽チップでした. ArduinoIDEの書き込みボードを"BluePill F103C6 (32k)"にして書き込むと正しく動作するようになりました.
手持ちのプロポ(HiSKY社のH-6 (技適有),Jumper社のT8SG V3およびT-Lite)でWindowsとLinuxの両方で動作を確認しました. 消費電流は約20mAでした.