Arduinoと秋月で安く売られているbluethoothモジュール(RN-42 XVP)をくっつけて試したところ、いくつか紆余曲折があったものの、うまく動かすことが出来たので纏めておく。
なお、本作成にあたり、addsict氏の記事[1]を非常に参考にさせて頂きました。
使用したもの
・ハードウェア
・Arduino Uno
・USB Host シールド(Sparkfun製)
・RN-42 XVP
・SSCI-KIT-XBSOCKET XBeeピッチ変換基板とソケットのセット(スイッチサイエンス製)
・抵抗 4.7kΩ、9.1kΩ
・9V 0.65A アダプター
・ソフトウェア
・felis/USB_Host_Shield_2.0 https://github.com/felis/USB_Host_Shield_2.0
・addsict/USBKeyboard2BT https://github.com/addsict/USBKeyboard2BT
やったこと
①USB Host シールドの動作確認
参考元のaddsict氏の記事で一番よく分からなかったのがUSB Host シールドから伸びている謎の線である。
国内で入手性しやすいのはSparkfun製のUSB Host シールドだが、調べてみると配線が本家と異なるため、ライブラリーがそのままでは使えないそうな[2]。
改造例はいくつか見つけたが、配線直したりしなきゃいけないのでなかなか面倒。NeoCat氏のように7ピンとresetピンをくっつけさせるのが一番ラクそうである[3]。
この状態でUSBホストシールドのライブラリーを取り込み、サンプル(HID→USBHIDBootKbd)を動かしてみたところ、正常にシリアルコンソール上に押したキーが表示されていることを確認。
なお、USBバスパワーだけではパワー不足なのか、HHKBを動かすにはACアダプター(外部電源)が必要だった。
②RN42-XVPの設定
まず、ブレッドボード上でお手軽に結線させたいため、ピッチ変換基板をはかせた。任意でコンデンサ(パスコン)も付ける。
その後、RTSとCTSを繋いで、GNDとVCCをArduinoのGNDと3.3Vに繋ぐ。Arduino Unoは5Vで動作するが、RN42側は3.3Vで動作するのでRN42のVCCに5Vを繋がないように注意する。
ここから先は英語マニュアルとの格闘になる[4]。
ちなみに自分の環境ではwindowsのbluetoothレシーバーとRN42との相性が悪いためか、何回やっても接続できなかった。諦めてMac Book Air + CoolTermを使用したらすんなりといけた。
CoolTerm上の設定は以下のとおり。
Mac Book Air 上でbluetoothのデバイスを探し、(RNBTうんたらかんらというモジュール名で出てくる)間髪入れず、CoolTerm上で接続して$$$を入力するとモジュール側から応答が返ってくる。(よくよく考えるとBluetoothモジュールの電源をつけただけで、PCとシリアル通信できてしまうのだから、このRN42 XVシリーズはヤバイぐらいお手軽なモジュールである。)
マニュアル見ながら色々なコマンドを流して見たが、最終的に必要なのは
以下の4コマンドぐらいかな。
(1. モジュール名の設定)
SN,HHKB_BT
(2. ペアリングモード化)
SM,6
(3. HID化)
S~,6
(4. reboot)
R,1
その後、addsict氏のUSBKeyboard2BT スケッチを書き込み、USB Host シールドと RN42を以下のように接続させればok。
RN42はRN41を元にして作った図なのでピンが違うかもしれないが、ココでのメインはArduino側のTXとRXをRN42側のRXとTXに繋ぐよう、クロス結合させることである。(Arduinoにとっての入力はRN42の出力。逆もまた然り。)
ひとつ注意しなきゃいけないのがArduino側の出力は5Vなので、3.3Vまで落とさないとRN42側が壊れてしまう点である。
ここでは抵抗分圧回路[5]を用いて3.3Vまで落としてある。(抵抗分圧は抵抗の比によって決まるので4.7kΩ、9.1kΩでなくても良い。極端な話、4.7Ω、9.1Ωでも電圧は3.3Vに下がるのだが、抵抗値が少ないと今度は電流が大きくなってしまい、回路が焼き切れてしまうそうな。)
ちなみにRN42からやってくる出力(Arduino側から見た入力)は3.3VでもArduinoは識別可能なので、そのまま繋ぐだけでよい。
ここまでやってwindowsでBluetoothデバイスの検索の検索をやってみると...
↑こんな感じで出てくる。しばらくインストールの準備を待てば使えるようになった。
今のところwindows7、ipod touchの2つで動作確認が取れている。
ただし、Mac Book Airは断続的に切断してしまい、思うように動いていない。
SPPでは問題なく接続できるのに謎。
Arduinoによるプロトタイプは完成したので、今後はArduino Pro Miniとかで小型化させたい。
・参考
[1]Happy Hacking KeyboardをBluetooth化する(無改造版) - addsict's blog http://addsict.hatenablog.com/entry/2013/08/18/170204
[2]Arduino Uno ではじめる ADK - ADK勉強会 (東京) https://sites.google.com/site/adktokyo/unoadk
[3]USBミサイルランチャーをArduinoでコントロール - Okiraku Programming http://d.hatena.ne.jp/NeoCat/20120325/1332677097
[4]RN42XV - rfPIC http://www.microchip.com/wwwproducts/Devices.aspx?product=RN42XV
[5]抵抗計算ツール http://sim.okawa-denshi.jp/teikokeisan.htm