まえおき
最近のルータやスイッチは、リッチな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だけでできるようになる日も近いかも?
 
	
