Androidだってコンソールポート(RS-232)でconfigいじりたい!

AndroidをRS-232ポートへつなぎたい!

まえおき

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

Share

コメントを残す

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

Optionally add an image (JPEG only)