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