ブログ

Armadillo-IoT(G3/G3L)/X1:BT機能を使って、Bluetooth RS-232C 変換アダプター(REX-BT60)とシリアル通信

at_kazutaka.bito
2019年1月7日 11時05分

Armadillo-IoT(G3/G3L)/X1のBT機能を使って、
ラトックシステム株式会社のBluetooth RS-232C 変換アダプターREX-BT60
とシリアル通信してみました。

ここでは、
 Armadillo-640+REX-BT60

 Armadillo-IoT(G3/G3L)/X1(WLAN+BTコンボ搭載タイプ)
のBT機能で、シリアル通信することを確認しました。

0.REX-BT60とArmadillo-640の接続

下記写真のようにREX-BT60とArmadillo-640をシリアルクロスケーブルで接続します。
(REX-BT60には、電源アダプタを接続してあります。)

REX-BT60のDIPスイッチの設定は
 1:設定初期化:OFF
 2:通信速度9600bps固定:ON
 3:RTS/CTSフロー制御有効:ON
 4:D-sub9番ピンからの5V出力:OFF
にしています。
Armadillo-640を起動すると、シリアルインタフェースのデバイスファイル"/dev/ttymxc2"を使って、
REX-BT60経由でシリアル通信ができます。


下記の手順は、特に記述のない限りArmadillo-IoT(G3/G3L)/X1上で実施します。

1.SDPサーバの準備

/etc/systemd/system/dbus-org.bluez.service

ExecStart=/usr/lib/bluetooth/bluetoothd

の箇所を

ExecStart=/usr/lib/bluetooth/bluetoothd --compat

に変更します。

BT機能を再起動します。

root@armadillo:~# systemctl daemon-reload
root@armadillo:~# systemctl restart bluetooth


2.シリアル通信のサービスの追加

シリアル通信のサービスを追加します。

root@armadillo:~# sdptool add --channel=22 SP

シリアル通信のサービスが追加されているかどうか確認します。

root@armadillo:~# sdptool browse local | grep "Serial Port"
Service Name: Serial Port


3.対向のシリアル通信デバイス(REX-BT60)のペアリング

(上記手順0で、REX-BT60に電源投入済みとします。)
bluetoothctlコマンドを実行します。

root@armadillo:~# bluetoothctl

スキャンします。

[bluetooth]# scan on
(略)
[NEW] Device 01:23:45:67:89:AB RNBT-89AB
(略)

スキャンした際、REX-BT60は、
RNBT-****
(****は、BDアドレスの末尾)で見つかります。
 ここでは、例として、REX-BT60のBDアドレスが"01:23:45:67:89:AB"の場合です。)

REX-BT60のBDアドレスに対して、ペアリングします。

[bluetooth]# pair 01:23:45:67:89:AB
Attempting to pair with 01:23:45:67:89:AB
Pairing successful

対向のシリアル通信デバイスが見つかったらbluetoothctlを終了します。

[bluetooth]# scan off
[bluetooth]# exit


4.RFCOMM(シリアルポートの通信プロトコル)を起動

RFCOMM(シリアルポートの通信プロトコル)で通信できるようにします。
下記コマンドにより、対向のシリアル通信デバイスと、
/dev/rfcomm0というデバイスファイルで通信できるようになります。

root@armadillo:~# rfcomm bind 0 01:23:45:67:89:AB


5.動作確認(その1)

Armadillo-IoT(G3/G3L)/X1で、cuコマンドを実行します。
(下記は、デバイスファイルが/dev/rfcomm0で、ボーレートが9600の場合)

root@armadillo:~# cu -l /dev/rfcomm0 -s 9600


REX-BT60を接続したArmadillo-640で

root@armadillo:~# chmod 666 /dev/ttymxc2
root@armadillo:~# cu -l /dev/ttymxc2 -s 9600

を実行します。
お互いのコンソールに入力した文字が、対向のコンソールに表示されます。

備考)cuを終了するときは、

~.

と入力します。

6.動作確認(その2)

例として、受信したデータをコンソールに表示するプログラムで確認します。
ここでは、rubyで作成してみます。
Armadillo-IoT(G3/G3L)/X1をインターネットに接続できるネットワークに接続します。
rubyのserialportライブラリをインストールします。

root@armadillo:~# gem install serialport

下記の内容で、getdata.rbというファイルを作成します。
(下記は、デバイスファイルが/dev/rfcomm0で、ボーレートが9600の場合)

require 'serialport'
 
serialport = "/dev/rfcomm0"
sp = SerialPort.new(serialport, 9600, 8, 1, 0)
 
loop do
    msg = sp.readline
    print msg
end

rubyで、getdata.rbを実行します。

root@armadillo:~# ruby getdata.rb

実行中、受信した文字がコンソールに表示されます。
備考)終了するときはCtrl+Cです。

REX-BT60を接続したArmadillo-640で

root@armadillo:~# echo hello > /dev/ttymxc2

を実行すると、Armadillo-IoT(G3/G3L)/X1のコンソールに"hello"が表示されます。

8.RFCOMM(シリアルポートの通信プロトコル)の終了

下記コマンドを実行します。

rfcomm release 0