BluetoothモジュールRN-42をお試し
Microchip 製の Bluetooth モジュール RN-42 を使ってみました。このモジュールは、シリアルから設定を簡単に変更でき、キーボードとしてパソコンに接続できることを確認しました。マイコンを Bluetooth で通信させるのに便利そうです。
パソコンに定形文字列を入力する方法を探していました。そこでマイコンをキーボードなどの HID とするためのライブラリーやモジュールを探していて、Microchip 製の Bluetooth モジュール RN-42 を見つけました。このモジュールを使うとシリアル端子に送った文字があたかも Bluetooth 接続のキーボードから入力されたように見せかけられます。そこでどんな感じなのか試してみました。
- RN-42 とは
- RN-42 の購入
- RN-42 を設定
- RN-42 のキーボードは US 配列
- レイアウトを US 配列に設定
- デバイスインスタンスを調べる
- レジストリを変更する
- RN-42 のハマりポイント
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 キーボードのプロパティを確認します。この詳細タブを開いて「デバイスインスタンスパス」の値を調べます。
レジストリを変更する
次にコマンドプロンプトからregedit
コマンドを起動して、該当するエントリーの「Device Parameters」に次のエントリーを追加します。
名前 | 種類 | データ |
---|---|---|
KeyboardTypeOverride | REG_DWORD | 4 |
KeyboardSubtypeOverride | REG_DWORD |
設定を変更した後で、再度 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 配列を参照して下さい。
脚注
- RN-42 は Microchip の製品ですが、元々 Roving Networks 社が開発していました。そのため製品名に RN が入っているのだと思います。現在 Roving Networks 社は Microchips 社に吸収されています。
- Linux でシリアルデバイスを指定する時には、
/dev/serial/by-id/*
を指定するとどれに接続しているか分かりやすいです。