BluetoothモジュールRN-42をお試し


Microchip製のBluetoothモジュールRN-42を使ってみました。このモジュールは、シリアルから設定を簡単に変更でき、キーボードとしてパソコンに接続できることを確認しました。マイコンをBluetoothで通信させるのに便利そうです。

パソコンに定形文字列を入力する方法を探していました。そこでマイコンをキーボードなどのHIDとするためのライブラリーやモジュールを探していて、Microchip製のBluetoothモジュールRN-42を見つけました。このモジュールを使うとシリアル端子に送った文字があたかもBluetooth接続のキーボードから入力されたように見せかけられます。そこでどんな感じなのか試してみました。

RN-42とは

RN-42は、Microchips製1のBluetooth Ver. 2.1に対応したモジュールです。内蔵プロファイルにはシリアル接続するためのSPP(Serial Port Profile)の他にHID(Human Interface Device)プロファイルが組み込まれており、モジュールにシリアル端子からコマンドを送ることでプロファイルや設定を簡単に切り替えることができます。

海外の無線モジュールを使用する時に問題になる法律面の制限(いわゆる技適マーク)もクリアしています

RN-42の購入

RN-42はモジュールとして電子部品店で容易に購入することができます。ただ今回は簡単に使い方を試してみたかったので、USB端子に接続するだけで電源とシリアル通信回路が提供される評価キットを購入しました。

秋月電子ではMicrochip純正の評価キットマイクロチップ Bluetooth評価キット RN-42-EKと秋月電子オリジナルのRN-42使用 Bluetooth無線モジュール評価キットを扱っています。どちらの評価キットもUSB-シリアル変換チップを搭載していて、電源もUSBから供給できるようになっています。

二つに機能的な違いは無いようなので、値段の安い秋月オリジナルの評価キットを購入しました。

RN-42を設定

RN-42評価モジュールをUSB端子に接続したら、ターミナルソフトを起動します。私はUbuntu上のcuコマンドを使用しました2。WindowsならばTeraTermなどが使用できます。接続するときのパラメータは、初期設定では次のようになっています。

設定
速度 115200 bps
長さ 8 bit
パリティ なし
ストップビット 1

RN-42のコマンドは、RN41/RN42 Bluetooth Data Module Command Reference User’s Guideを参照しました。

次のはRN-42との通信例です。ここで「#」で始まる行は操作のコメントを示します。太文字の部分が実際に入力した行です。

$ cu -l /dev/serial/by-id/usb-FTDI_FT231X_USB_UART_DQ00380E-if00-port0 -s 115200
Connected.
# コマンドモードに入る。
# $$$の後には[Enter]が不要です。
# それ以外のコマンドでは、コマンドの後に[Enter]が必要です。
$$$
CMD
# コマンドモードに入ると、緑色のLEDが非常に早く点滅します。

# RN-42のfirmware versionを確認。
V
Ver 6.15 04/26/2013
(c) Roving Networks
AOK
# このfirmwareは、HIDモードではGPIO4によるFactory Reset機能が働きません。
# 新しいver. 6.30ではこの問題を解消済みです。

# 工場出荷時の設定に戻す。
SF,1
AOK

# ペアリングに必要なPINを設定する。初期設定では1234となっています。
SP,01234
AOK

# pairing modeに設定する。電源が入ると自動的にペアリングした相手と接続する。
SM,6
AOK

# HIDモードにする。
S~,6
# キーボードに設定する。工場出荷時のデフォルト。
SH,0200
AOK

# デバイスに名前を付ける。
# 名前を付けるコマンドには二種類あります。SNコマンドは、指定した名前がそのまま設定されます。一方S-コマンドは、名前の後にデバイスのMAC Adressの最後2バイト分が加えられます。
SN,RN42HID
# or
S-,RN42HID

# 設定内容は、多くの場合設定コマンドのSをGに変えたコマンドで取得できます。
GP
01234

# リブートして設定を反映させる。
R,1
Reboot!

R,1コマンドでリブートすると、緑色LEDがゆっくりと点滅するようになります。そしてRN-42と別のパソコンとのペアリングを完了すると、ゆっくりと点滅していた緑色LEDが点灯したままとなります。

言うまでもありませんが、RN-42を接続したパソコンでペアリングすると、入力した文字が無限ループしてしまいます。

RN-42のキーボードはUS配列

RN-42の設定とペアリングが完了したら、RN-42に送った文字が相手側のパソコンに入力されることを確認します。

この時、一部の文字が文字化けすることがあります。例えば「”@:」と入力すると、「*”+」となります。これは、キーボードの配列をパソコンが間違って認識しているためです。

HIDプロファイルで送られてくるデータは、「どの文字が入力されたか」ではなく「どのキーが押されたか」というデータです。RN-42は、シリアルに送られてきた「文字」をUS配列のキーボードで「どのキーが押されたか」に変換してパソコンに送ります。そのためパソコンがJIS配列のキーボードとして認識してしまうと一部の文字で文字化けが発生します。

同じ理由から「日本語」などASCII以外の文字列を送ることができません。

レイアウトをUS配列に設定

この文字化けを解消するには、パソコン側の設定を変更してRN-42のキーボードがUS配列のキーボードだと認識させる必要があります。

Windows Vistaに接続したキーボードをUS配列と認識させる方法は、WindowsでBTキーボードだけをUS配列で使う(るびゅ備忘録)を参考にさせてもらいました。

デバイスインスタンスを調べる

まず設定からデバイスマネジャを開いて、HIDキーボードのプロパティを確認します。この詳細タブを開いて「デバイスインスタンスパス」の値を調べます。

rn42-devmng

レジストリを変更する

次にコマンドプロンプトからregeditコマンドを起動して、該当するエントリーの「Device Parameters」に次のエントリーを追加します。

名前 種類 データ
KeyboardTypeOverride REG_DWORD 4
KeyboardSubtypeOverride REG_DWORD 0

rn42-regedit

設定を変更した後で、再度RN-42を起動またはリブートすると入力した文字がパソコンにも正しく入力されるようになります。

RN-42のハマりポイント

コマンドモードに入れない。
コマンドモードへ入るには、電源が入った時またはリブート後60秒以内に時間が制限されています。この時間は、STコマンドで変更できます。またペアリングが完了して接続している場合(HIDの時のみ?)もコマンドモードには入れません。
ファクトリーリセットできない。
RN-42モジュールは、GPIO4をHにして起動し、L,H,L,Hと1秒以上開けて変更することで工場出荷時の設定に戻すことができます。詳しいリセット方法は、RN41/RN42 Bluetooth Data Module Command Reference User’s Guideの3.7 DESIGN CONCERNSの3.7.1.2 FACTORY RESETを参照して下さい。
ただし、firmware ver. 6.30未満では、HIDプロファイルに設定しているとGPIO4によるファクトリーリセット機能が働きません。iPhoneにUSBキーボードを接続するための装置の作成 2:RN-42(mswinvksの忘備録)のコメント参照。この制限は、RN41/RN42 v6.30 RELEASE NOTES – MicrochipにあるようにVer. 6.30で解消されています。
文字化けする。
この問題は、RN-42のキーボードはUS配列を参照して下さい。

脚注

  1. RN-42はMicrochipの製品ですが、元々Roving Networks社が開発していました。そのため製品名にRNが入っているのだと思います。現在Roving Networks社はMicrochips社に吸収されています。

  2. Linuxでシリアルデバイスを指定する時には、/dev/serial/by-id/*を指定するとどれに接続しているか分かりやすいです。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です