iPhoneにUSBキーボードを接続するための装置の作成
2:RN-42

(1:http://blog.livedoor.jp/mswinvks/archives/8528923.html)

本記事では、「iPhoneにUSBキーボードを接続するための装置」に用いるBluetoothモジュール、RN-42について述べる。
(実際の製作では、私はArduinoのプログラムの方を先に書いた(失敗した回路のプログラムをほとんどそのまま流用できたため))



私はこのモジュールを秋月電子で購入した(私が購入した時点では1500円だった)。
http://akizukidenshi.com/catalog/g/gM-07612/

このモジュールは様々なプロファイルを使うことができ、便利なのだが、サイズが本当に小さい。
しかも端子間が0.05インチしかない。
写真 1
写真 2
私も初めは、この様な端子をハンダ付けするのは不可能だと思っていたが、買ってしまったものはしょうがないので、壊す勢いでハンダ付けに挑戦することにした。
初めはスズメッキ線でつなごうと思っていたが、端子間が狭く、ショートする恐れがあったので、ビニール線に変更した。
(ビニール線の太さと端子の幅が同じだった)
写真 3
写真 4
途中、こんな切れ端のようなビニール線を加工する自分の存在意義を疑った。
写真 5
タイトル:飛翔
この感じが大阪にあるグリコ(?)のアレに似ているとのコメントをMt.Shadow氏からいただいた。

次に、これを通常の基板ピッチに変更するためのベースの基板を作成した。
オスオスピンをハンダ付けし、ショートを防ぐため、その他のパターンは60Wのはんだごてを用いて剥がした(本来はこの様に使うべきではないのだとは思うが)。
写真 1
写真 2

そして、これらを合体した。
写真 3
ラピュタのあのマークみたいになった。
ショートしていないようだ。奇跡だ。


ここまで簡単に説明しているが、ここまでにかかった時間は4時間ほどである。

これでRN-42を通常の基板のピッチに変更することができた。


次に、このモジュールのセッティングをする。
概要は説明するが、詳細はRN-42のマニュアル(http://akizukidenshi.com/download/ds/microchip/rn42v2_32r.pdf)を参照して欲しい。

RN-42に供給すべき電圧は3.3Vなので注意していただきたい。
(とは言うものの、5Vを供給しても壊れずに動いた; マニュアルにもregulated inputとあるのに、不思議である)
まず、RN-42にUARTで接続する。
私の場合、マスタに5V駆動のArduinoを使用したため、レベル変換が必要であったが、Arduino->RN-42の電圧は抵抗の分圧により減圧したが、RN-42->Arduinoの電圧は昇圧しなかった。
(恐らくこれが原因となり後述の問題が発生している)
デフォルトのbaud rateは115200bpsである。
GPIO4は、通常時1Hzで発振し、command mode(後述)の際には10Hzで発振し、Bluetoothのスレーブと通信中はoffになる。デバッグ等に利用すると便利だろう。

ここで不思議な問題が発生した。
Arduino->RN-42の通信はGPIO4の挙動により正しく行われていることが確認できたのだが、
RN-42->Arduinoの通信がうまくいかない(文字が正しく表示されない)。
これは恐らく、RN-42->Arduinoで信号電圧の昇圧をしていないからである。
baud rateを遅く(4200bpsくらいに)することによりこの問題は解決した。
(これは本質的な解決ではない; 今度はちゃんとしたUARTレベル変換ICを買おう)

UARTで接続したら、まず$$$と入力し、command modeに入る。
ここでは様々な設定等をすることができる(適当)。

・profileをHIDにする
S~,6
・HID registerに0100という値を設定する。これによりRN-42はスレーブにキーボードとして認識される
SH,0100
・baud rateを4200に設定する
SU,42
・moduleをrebootする
R,1
・スレーブを探す(タイムアウト:5sec)
I,5
・MACアドレス<mac>であるスレーブに接続する
C,<mac>

等々。他にも色々あるのでマニュアルを参照して欲しい。

GPIO4をon,off,on,off,onすればfactory resetをすることができるとマニュアルにあるのだが、どう試してもうまくいかない。
詳しい方がいたら教えていただきたい。


これでRN-42の一式が完成した。
適当で申し訳ない。
質問等があったら遠慮なくしてほしい。


○余談 - RN-42の設定を間違えてしまったとき
私はbaud rateを設定する際、
SU,42
ではなく
SZ,42
と打ってしまい、変なbaud rateに変更してしまい、通信ができなくなった。
しかも、先述の通り、GPIO4のfactory resetも効かない。

RN-42には、起動時にGPIO6(だっけ?)をhighにしておくと、baud rateを強制的に9600にするという機能がある。
私はそれによりこの設定ミスを乗り越えた。