Armadillo-640で、下記のBLEのUSBドングルを使ってみました。
USB-BT40LE(アイ・オー・データ)
BSBT4D100(バッファロー)
MM-BTUD43(サンワサプライ)
LBT-UAN05C1(エレコム)
例として、BLE通信のセンサータグ「CC2650」(テキサスインスツルメンツ)との接続を確認しました。
1.Bluetoothのデバイスドライバの有効化
Armadillo-640 製品マニュアル
18.2. イメージをカスタマイズする
を参考に、Bluetoothのデバイスドライバを有効にしたカーネルイメージを作成します。
カーネルコンフィギュレーションの画面を開きます。
atmark@atde7:~/linux-v4.14-at[version]$ make ARCH=arm armadillo-640_defconfig atmark@atde7:~/linux-v4.14-at[version]$ make ARCH=arm menuconfig
下記の★の箇所を有効(カーソルを合わせて"y"キーを押す)にします。
(下記は、設定箇所の付近のみ抜粋しています。)
[*] Networking support ---> [*] Bluetooth subsystem support ---> ★有効にする Bluetooth device drivers ---> [*] HCI USB driver ★有効にする [*] Broadcom protocol support (NEW) [*] Realtek protocol support (NEW)
ビルドします。
atmark@atde7:~/linux-v4.14-at[version]$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- LOADADDR=0x82000000 uImage atmark@atde7:~/linux-v4.14-at[version]$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
上記手順で生成されたuImage
atmark@atde7:~/linux-v4.14-at[version]$ ls arch/arm/boot/uImage uImage
で、Armadillo-640のカーネルイメージを書き換えます。
参考)カーネルイメージの書き換え方
Armadillo-640 製品マニュアル
11.2.2. Linuxカーネルイメージの書き換え
2.Bluetooth通信に必要なパッケージのインストール
上記1の手順のカーネルを書き込んだArmadillo-640をインターネットに接続できるネットワークに有線LANで接続します。
以下、Armadillo-640のコンソール上での操作になります。
root@armadillo:~# apt-get update root@armadillo:~# apt-get upgrade root@armadillo:~# apt-get install usbutils root@armadillo:~# apt-get install bluetooth
補足)usbutilsは、Bluetooth通信と直接関係はありませんが、
下記でBLEデバイス確認にlsusbコマンドを使用するためにインストールしてます。
3.Armadillo-640にBLEのUSBドングルを装着
BLEのUSBドングル
USB-BT40LE(アイ・オー・データ)
BSBT4D100(バッファロー)
MM-BTUD43(サンワサプライ)
LBT-UAN05C1(エレコム)
のいずれかをArmadillo-640のUSBコネクタに装着します。
※)USB-BT40LEのみ
[ 3195.592336] Bluetooth: hci0: BCM: chip id 63 [ 3195.598308] Bluetooth: hci0: BCM: features 0x07 [ 3195.634347] Bluetooth: hci0: BCM20702A [ 3195.639347] Bluetooth: hci0: BCM20702A1 (001.002.014) build 0000 [ 3195.645526] bluetooth hci0: Direct firmware load for brcm/BCM20702A1-0a5c-21e8.hcd failed with error -2 [ 3195.654995] Bluetooth: hci0: BCM: Patch brcm/BCM20702A1-0a5c-21e8.hcd not found
というファームウェアのロードに関するメッセージがでます。
(BCM20702A1-0a5c-21e8.hcdの箇所は、ファームウェアの時期によって違う場合があると思われます。)
Broadcom Bluetooth firmware for Linux kernel
を参考に、
BCM20702A1-0a5c-21e8.hcdをインターネットからダウンロードして、
root@armadillo:~# mkdir -p /lib/firmware/brcm
で作成した/lib/firmware/brcmに置きます。
USB-BT40LEをUSBコネクタに装着し直すと
[ 3515.010327] Bluetooth: hci0: BCM: chip id 63 [ 3515.016307] Bluetooth: hci0: BCM: features 0x07 [ 3515.051336] Bluetooth: hci0: BCM20702A [ 3515.056347] Bluetooth: hci0: BCM20702A1 (001.002.014) build 0000 [ 3516.199344] Bluetooth: hci0: BCM20702A1 (001.002.014) build 1764 [ 3516.239340] Bluetooth: hci0: Broadcom Bluetooth Device
のようにファームウェアのロードに関するメッセージは解消されます。
補足)USB-BT40LEと、BSBT4D100、MM-BTUD43、LBT-UAN05C1で装着時のメッセージが異なるのは、
BLEデバイスの違いとかんがえられます。
BLEデバイスは、lsusbコマンドで確認できます。
USB-BT40LEの場合、
root@armadillo:~# Bus 002 Device 003: ID 0a5c:21e8 Broadcom Corp. BCM20702A0 Bluetooth 4.0
BSBT4D100、MM-BTUD43、LBT-UAN05C1の場合、
root@armadillo:~# Bus 002 Device 002: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
4.BLE通信のセンサータグ「CC2650」との通信を確認
スキャンして、CC2650が見えることを確認します。
(以下の説明では、CC2650のMACアドレスを[CC:CC:CC:CC:CC:CC]としています。)
root@armadillo:~# hcitool lescan (略) [CC:CC:CC:CC:CC:CC] CC2650 SensorTag
gatttoolで接続します。
root@armadillo:~# gatttool -b [CC:CC:CC:CC:CC:CC] -I [[CC:CC:CC:CC:CC:CC]][LE]> connect Attempting to connect to [CC:CC:CC:CC:CC:CC] Connection successful
プライマリサービスを確認します。
[[CC:CC:CC:CC:CC:CC]][LE]> primary attr handle: 0x0001, end grp handle: 0x0007 uuid: 00001800-0000-1000-8000-00805f9b34fb attr handle: 0x0008, end grp handle: 0x0008 uuid: 00001801-0000-1000-8000-00805f9b34fb attr handle: 0x0009, end grp handle: 0x001b uuid: 0000180a-0000-1000-8000-00805f9b34fb attr handle: 0x001c, end grp handle: 0x0021 uuid: 0000180f-0000-1000-8000-00805f9b34fb attr handle: 0x0022, end grp handle: 0x0029 uuid: f000aa00-0451-4000-b000-000000000000 attr handle: 0x002a, end grp handle: 0x0031 uuid: f000aa20-0451-4000-b000-000000000000 attr handle: 0x0032, end grp handle: 0x0039 uuid: f000aa40-0451-4000-b000-000000000000 attr handle: 0x003a, end grp handle: 0x0041 uuid: f000aa80-0451-4000-b000-000000000000 attr handle: 0x0042, end grp handle: 0x0049 uuid: f000aa70-0451-4000-b000-000000000000 attr handle: 0x004a, end grp handle: 0x004e uuid: 0000ffe0-0000-1000-8000-00805f9b34fb attr handle: 0x004f, end grp handle: 0x0053 uuid: f000aa64-0451-4000-b000-000000000000 attr handle: 0x0054, end grp handle: 0x005a uuid: f000ac00-0451-4000-b000-000000000000 attr handle: 0x005b, end grp handle: 0x0062 uuid: f000ccc0-0451-4000-b000-000000000000 attr handle: 0x0063, end grp handle: 0xffff uuid: f000ffc0-0451-4000-b000-000000000000
ハンドルされているプロファイルのUUIDを確認します。
(下記は、0x20-0x30の場合)
[[CC:CC:CC:CC:CC:CC]][LE]> char-desc 20 30 handle: 0x0020, uuid: 00002908-0000-1000-8000-00805f9b34fb handle: 0x0021, uuid: 00002904-0000-1000-8000-00805f9b34fb handle: 0x0022, uuid: 00002800-0000-1000-8000-00805f9b34fb handle: 0x0023, uuid: 00002803-0000-1000-8000-00805f9b34fb handle: 0x0024, uuid: f000aa01-0451-4000-b000-000000000000 handle: 0x0025, uuid: 00002902-0000-1000-8000-00805f9b34fb handle: 0x0026, uuid: 00002803-0000-1000-8000-00805f9b34fb handle: 0x0027, uuid: f000aa02-0451-4000-b000-000000000000 handle: 0x0028, uuid: 00002803-0000-1000-8000-00805f9b34fb handle: 0x0029, uuid: f000aa03-0451-4000-b000-000000000000 handle: 0x002a, uuid: 00002800-0000-1000-8000-00805f9b34fb handle: 0x002b, uuid: 00002803-0000-1000-8000-00805f9b34fb handle: 0x002c, uuid: f000aa21-0451-4000-b000-000000000000 handle: 0x002d, uuid: 00002902-0000-1000-8000-00805f9b34fb handle: 0x002e, uuid: 00002803-0000-1000-8000-00805f9b34fb handle: 0x002f, uuid: f000aa22-0451-4000-b000-000000000000 handle: 0x0030, uuid: 00002803-0000-1000-8000-00805f9b34fb
温度センサの有効化のハンドルと、温度データのハンドルを確認します。
CC2650 SensorTag User's Guide
の
IR Temperature Sensor
の項目より、
UUID:AA01(温度データ) UUID:AA02(0x01:有効、0x00:無効)
と記載されています。
上記のUUIDの確認の結果より、
handle: 0x0024, uuid: f000aa01-0451-4000-b000-000000000000
UUID:AA01(温度データ)のハンドルは、0x24
handle: 0x0027, uuid: f000aa02-0451-4000-b000-000000000000
UUID:AA02(0x01:有効、0x00:無効)のハンドルは、0x27
であることがわかります。
温度センサーを有効にします。
[[CC:CC:CC:CC:CC:CC]][LE]> char-write-req 27 01
温度データを読み込みます。
[[CC:CC:CC:CC:CC:CC]][LE]> char-read-hnd 24 Characteristic value/descriptor: f0 0a dc 0d
(ここでは、生データから、温度(℃)への変換は省略します。)