ブログ

Armadillo-X1:Bluetooth対応機器とのシリアル通信

at_kazutaka.bito
2020年1月6日 10時16分

WLAN+BT搭載のArmadillo-X1で、Bluetooth対応機器とシリアル通信を確認しました。
ここでは、Bluetooth対応機器としてPCを使用しました。

1.必要なパッケージのインストール

Armadillo-X1をインターネットに接続可能なネットワークに接続します。
下記コマンドで、gnome-bluetoothをインストールします。

root@armadillo:~# apt-get update
root@armadillo:~# apt-get install gnome-bluetooth


2.rfcommに対するModemManagerの無効化

Bluetooth対応機器とのシリアル通信でRFCOMMプロトコルを使用します。
以降の確認において、rfcommに対してModemManagerが介在しないように無効化します。

/etc/udev/rules.d/90-rfcomm.rules
を下記の内容で作成します。

KERNEL=="rfcomm[0-9]*", ENV{ID_MM_DEVICE_IGNORE}="1"

下記のコマンドで、udevルールをリロードします。

root@armadillo:~# udevadm control --reload


3.sdptoolの有効化

sdptoolで、Bluetooth対応機器とのシリアル通信のポートを有効化します。

/etc/systemd/system/dbus-org.bluez.service
の下記の箇所を変更します。
変更前

ExecStart=/usr/lib/bluetooth/bluetoothd

変更後

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


Armadillo-X1を再起動します。

再起動後、下記コマンドでシリアルポートを設定します。

root@armadillo:~# chmod 777 /var/run/sdp
root@armadillo:~# sdptool add --channel=22 SP
Serial Port service registered


下記コマンドを実行して"Serial Port"が表示されることを確認します。

root@armadillo:~# sdptool browse local | grep -i serial
Service Name: Serial Port
  "Serial Port" (0x1101)
  "Serial Port" (0x1101)


4.対向機(PC)とのペアリング

下記の手順で対向機(PC)とペアリングします。

root@armadillo:~# bluetoothctl
[NEW] Controller XX:XX:XX:XX:XX:XX armadillo [default]

BTの電源を入れます。

[bluetooth]# power on
Changing power on succeeded

発見可能にします。

[bluetooth]# discoverable on
Changing discoverable on succeeded
[CHG] Controller XX:XX:XX:XX:XX:XX Discoverable: yes

ペアリングコード(PIN code)の管理を行うエージェントを立ち上げます。

[bluetooth]# agent on
Agent registered

周辺にあるBluetooth対応デバイスを表示させます。

[bluetooth]# scan on

対向機(PC)のBDアドレスを確認したら、scanを停止します。

[bluetooth]# scan off

上記で確認した対向機(PC)のBDアドレスで、対向機(PC)とペアリングをします。

[bluetooth]# pair [対向機(PC)のBDアドレス]

bluetoothctlを終了します。

[bluetooth]# exit


5.対向機(PC)でArmadillo-X1とのシリアルポートを確認

対向機(PC)でArmadillo-X1とのシリアルポートを確認します。
例として、対向機(PC)がWindows10の場合は、下記の設定で確認できます。

Bluetoothとその他のデバイス
->その他のBluetoothオプション
->COMポート

下記のようにarmadilloとのシリアルポートが見えることを確認します。

armadilloとのシリアルポートが見えない場合は、ペアリングを再度やり直します。

6.Armadillo-X1でシリアル通信を待ち受ける

Armadillo-X1でシリアルポート(/dev/rfcomm0)に接続されるのを待ち受けます。
(下記コマンド内の"22"は、上記手順3で設定した"--channel=22"を意味します。)

root@armadillo:~# rfcomm listen /dev/rfcomm0 22 &


7.対向機(PC)からArmadillo-X1にシリアル通信で接続

対向機(PC)でシリアル通信ソフト(TeraTerm等)を起動します。
シリアルポートは、上記5で「発信」になっているCOMポートを指定します。
接続が成功すると、Armadillo-X1側で下記ログが表示されます。

Connection from [対向機(PC)のBDアドレス] to /dev/rfcomm0
Press CTRL-C for hangup


8.Armadillo-X1と対向機(PC)とのシリアル通信を確認

例として、Armadillo-X1でcuコマンドを実行してシリアル通信してみます。
下記のようにcuコマンドを実行します。(下記はボーレート:115200の場合)

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

Armadillo-X1と対向機(PC)で、シリアル通信ソフトのコンソールに入力した文字が、
お互いのシリアル通信相手のコンソールに表示されることで、シリアル通信ができていることが確認できます。

(Armadillo-X1でcuを終わるときは、~.を入力します。)