KX3のPC 接続用 ACC1は、RS-232C レベルの電圧レベルを想定している(正確には、0VとVCCの負論理になってるけど)
これをBluetooth化してみたという話。
部品
使ったのは
- RN-42 (Bluetooth SPP モジュール)
- 3.3V レギュレーター付きの RS-232C 3.3V ロジック変換モジュール
RN-42 は1500円と、余り安くはないのだけれど、国内技適マークがついており合法的に使える。また、シリアル経由または、接続済みBluetooth経由で内部設定を変更できるモードがあり、簡単に柔軟な設定ができる。
ロジック変換には3.3Vレギュレーター付きのちょうど良いのがあったので、これにしてみた。
実際のところ、負の電圧はいらないので真面目にRS-232C変換する必要はなく、単に電圧と論理変換さえできればいいので、ICを使う必要はないけど、面倒なのでこれにした。
レギュレーターの耐圧が14Vなので、13.8V だとギリギリすぎるのと、ドロップ電圧が大きくて結構発熱してしまう。本当ならKX3内部のスイッチングで降圧された3.3Vに接続できたらいいのだけれど、良い方法がない。40mA 流すと 0.42Wは熱に変わってしまってエコではない。
製作
ただ繋ぐだけなのでデータシート見つつ半田付けしたら普通に動いてくれた。
デフォルトだと115200baudになっているので、screen /dev/tty.xxx 115200 で接続した後に、以下のコマンドで設定しなおす。(38400baudに)
// <CR> は改行 // コマンドモードに入る (GPIO5 が10Hzで点滅するようになる) $$$<CR> // ボーレート設定 SU,38.4<CR> // 設定確認 D<CR> // 再起動 R,1<CR> // コマンドモードを抜ける ---<CR>
(エコーされないので、ローカルエコーを有効にしたほうがわかりやすい。コマンドモードに入ってから + を送るとエコーが有効になる)
これはどうやら電源を切っても記憶されているようなので、最初の一度だけで良い。
最初、ボーレートの設定方法がわからず、GPIO7をプルアップして9600baudに固定してみたが、上記の方法で自由にボーレートを設定できるので、GPIO7は何もしなくてよい。GPIO7 をプルアップした場合、ソフトウェア設定に関わらず強制的に9600baudに固定される。マイコンとか別途繋いだ場合、設定はボーレート強制したほうが安定するとか、そういう用途に使えそう。
GPIO5 は接続が完了すると出力がゼロになるので、LEDを繋いでいても接続中は電流が流れずエコ。ただ、これは対応するデバイスファイルを open しタイミングで消えるので、ペアリングしただけではチカチカしたまま。
使用感
デバイスを指定すれば自動的にペアリングされ、/dev/tty.xxx に勝手にデバイスファイルが作られるので、それを指定して普通にシリアル通信すればよく、特に Bluetooth だからといって難しいことはない。
遅延がちょっとあって、ケーブル直と完全に同じ使用感という感じではない。
メリット
- シリアルケーブルがいらない
- ホストPCのUSBポートを占有しない
- PC との GND の分離
デメリット
- KX3側での消費電力増
- 遅延
無線化できるメリットはあるにはあるけど、めっちゃ便利というほどでもない。サイドに繋いでいるケーブル類の殆どの無線化できたら便利だろうけど、難しい。数本繋いでいるうちの1本ケーブル減ったくらいでは嬉しさがあんまりないなという感じ。
可能なら
電源をスイッチング降圧にしたいが、スイッチングだと
- デカい
- ノイズ対策が必要
というのが厳しい。0.6W ぐらいならリニアレギュレータで我慢するほうがいいかもしれない。
あと、丁度いい小型のケースを見つけるのが難しい。今回は aitendo のプラケース (22x11x43)を使ってみたが、aitendo は在庫が安定してないので、タカチの SW-30B (20x18x30) か SW-40B (30x20x40) がいいかもしれない。
RS-232C をモジュール基板でやってるのも無駄なので、表面実装の適当な Vth 低い FET でやるようにできるとよさそう。
追記
SQ,16 というコマンドをうちこむとレイテンシが改善されるらしい。やってみたけどちょっとマシになる程度
$$$ SQ,16 // low latency 優先モードになる (スループットが落ちる) SQ,0 でデフォルト GQ // 現在のモード