まえおき
最近のルータやスイッチは、リッチなWeb GUIが搭載されていることが多く、
LAN経由でほとんどの設定をできることも多くなってきました。
しかし
やっぱり、いろいろな理由でコンソールポート経由での接続が求められます。
トラブルが発生することに備えて、コンソールポートへの通信手段は外せません。
また
(1)ネットワーク機器の設置場所によっては、作業がとてもしんどい。
(高いところ、狭いところetc…)
(2)かといって、長いケーブルを持ち歩きたくはない。
(3)いっそ、スマホやタブレットで作業できないか?
そこで
RS-232にBluetoothで接続できれば全部解決!
要は…
「Bluetooth – RS-232接続モジュールを作る」です。
ハードを作る
以下のパーツを使用しました。
こちらは、BluetoothのモジュールRN-42をベースに、給電・設定用のmicroUSB端子や、ディップスイッチも搭載された、ありがたいボードです。
RS-232のオスコネクタです。
Bluetoothモジュールからの出力信号(TTL)を RS-232の規格に変換するためのTTLコンバータがすでに付いているものを使用しました。
これらを組み立てていきます。
(といっても、必要な線をはんだ付けするだけですが)
Bluetoothモジュールから取り出す線はTXD,RXD,VDD,GNDの4本です。
また、CTS、RTSは短絡しておきます。
設定を変更する
今回使用したRN-42モジュールは、デフォルトのボーレートが115200になっています。
これを、9600に設定しておきます。
$$$ // コマンドモードへの移行 SU,9600 // ボーレート9600へ変更 R,1 // 再起動(設定反映)
完成
完成品がこちら
ソフトを作る
アプリを作ります。
が、とりあえず今回は、接続を確認できれば良いのです。
Googleがサンプルで公開している「BluetoothChat」を利用します。
上記をcloneしてきて、実行すればいい(←これが難しい)のですが、
シリアル通信用に一部修正する必要があります。
1.UUIDを変更する
今回はRS-232のシリアル通信をBluetoothに乗せるので、SPP(Serial Port Profile)として
利用します。
そのために、コード内で指定してるUUIDをSPP用のUUIDに変える必要があります。
public class BluetoothChatService { // 省略 private static final UUID SPP_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); // 省略 }
そのうえで、コード内でMY_UUID_SECUR、MY_UUID_INSECUREを使用している部分をSPP_UUIDに置き換えます。
2.メッセージ送信時に、改行コードを付加する
元のサンプルのままだと、「Send」ボタンを押したとき、改行コードは送信されません。
そのため、接続機器側でコマンドの終了を判断できず、何も応答されません。
なので、「Send」ボタンを押した際に「\r」を追加で送るようにします。
3.入力が空っぽでも、送信させる
つまり、改行コードのみの送信をできるようにします。
上記を踏まえて、修正したsendMessage()が↓です。
public class BluetoothChatFragment extends Fragment { // 省略 /** * Sends a message. */ private void sendMessage(String message) { if (mChatService.getState() != BluetoothChatService.STATE_CONNECTED) { Toast.makeText(getActivity(), R.string.not_connected, Toast.LENGTH_SHORT).show(); return; } // 入力文字数のチェック処理を除去 //if (message.length() > 0) { // !注意! 「$$$」は改行付けない // RN-42のコマンドモードに入れなくなるため if( message.equals("$$$") ) { } else { // 改行コードを付加 message = message + "\r"; } byte[] send = message.getBytes(); mChatService.write(send); mOutStringBuffer.setLength(0); mOutEditText.setText(mOutStringBuffer); //} } // 省略 }
実際につないでみる
実際に通信してみます。
1.ペアリングする
モジュールを給電用USBケーブルで接続すると、起動します。
しばらくすると、スマートフォン側でデバイスとして認識されるので、ペアリングします。
2.BluetoothChatを接続
アプリのデバイス一覧から、ペアリングしたデバイスを選択し、
接続します。
3.完了
画面左上の表示が「Connected」になったら接続完了。
いろいろ叩いてみてください!
(show running-configとか)
あとがき
実は結構以前から、AndroidをRS-232につなぐ手段は模索してました。
USB・RS-232ケーブルを直接つないだ時は、
通信できるときもあったのですが、安定しませんでした。
今回、それなりに安定して接続できる手段ができたので、
パソコンでなければとできなかった作業が
全てAndroidだけでできるようになる日も近いかも?