一、简介
通过“BT[1]-Introduction to Bluetooth Low Energy”知道,两个BLE设备通信需要完成两件事:
- 广播:设备发送广播信息表明自己的存在,让周围的设备可以Discover自己
- 连接:Peripheral和Central设备建立peer-to-peer连接,之后通过GATT通信
这里不涉及广播和连接的原理讲解,通过Linux系统下BlueZ提供的工具实现一个心率计,进而体验下BLE。
二、准备
RK3308+BLE:作为蓝牙的Peripheral端。RK3308系统有hciconfig、hcitool 、btgatt_server、brcm_patchram_plus1命令。
手机+BLE Scanner:作为蓝牙的Central端。BLE Scanner APP(iPhone)界面如下:
三、Peripheral设备发送广播
1、启动蓝牙
echo 1 > /sys/class/rfkill/rfkill0/state brcm_patchram_plus1 --enable_hci --no2bytes --use_baudrate_for_download --tosleep 200000 --baudrate 1500000 --patchram/system/etc/firmware/bcm43438a1.hcd /dev/ttyS4 & hciconfig hci0 up hciconfig hci0 piscan
命令解释参见“BT[0]-RK3308蓝牙使用”。
2、检测启动是否成功
# hciconfig -a hci0: Type: Primary Bus: UART BD Address: 8C:F7:10:4A:71:B5 ACL MTU: 1021:8 SCO MTU: 64:1 UP RUNNING PSCAN ISCAN RX bytes:9721 acl:6 sco:0 events:328 errors:0 TX bytes:747 acl:2 sco:0 commands:53 errors:0 Features: 0xbf 0xfe 0xcf 0xfe 0xdb 0xff 0x7b 0x87 Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3 Link policy: RSWITCH SNIFF Link mode: SLAVE ACCEPT Name: 'BCM43438A1 26MHz AP6212A1_CL1 BT4.0 OTP-BD-0058' Class: 0x000000 Service Classes: Unspecified Device Class: Miscellaneous, HCI Version: 4.0 (0x6) Revision: 0xf9 LMP Version: 4.0 (0x6) Subversion: 0x2209 Manufacturer: Broadcom Corporation (15)
3、开启BLE的广播功能
# hcitool -i hci0 cmd 0x08 0x000a 01 < HCI Command: ogf 0x08, ocf 0x000a, plen 1 01 > HCI Event: 0x0e plen 4 01 0A 20 00
4、发送广播数据
# hcitool -i hci0 cmd 0x08 0x0008 16 02 01 06 03 02 80 ff 0e 09 62 6c 65 5f 6e 61 6d 65 5f 5a 30 30 31 < HCI Command: ogf 0x08, ocf 0x0008, plen 23 16 02 01 06 03 02 80 FF 0E 09 62 6C 65 5F 6E 61 6D 65 5F 5A 30 30 31 > HCI Event: 0x0e plen 4 01 08 20 00
至此,通过BLE Scanner可以看到设备,在APP的“ADBERTIMENT DATA”区域可以看到广播数据,比如Device Local Name:ble_name_Z001。
四、GATT
1、运行btgatt_server服务:
btgatt_server -i hci0 -t public -r -v
2、点击APP的【connect】,连接设备。在【Service】可以看到心率计的服务。点进去可以看到红心处更新。
附录
BlueZ:http://www.bluez.org