___2017

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

一、简介

通过“BT[1]-Introduction to Bluetooth Low Energy”知道,两个BLE设备通信需要完成两件事:

  • 广播:设备发送广播信息表明自己的存在,让周围的设备可以Discover自己
  • 连接:Peripheral和Central设备建立peer-to-peer连接,之后通过GATT通信

 

心率计是官方定义的一个Service,详参:Heart Rate ProfileHeart Rate Service

这里不涉及广播和连接的原理讲解,通过Linux系统下BlueZ提供的工具实现一个心率计,进而体验下BLE。

 

二、RK3308蓝牙使用

系统概况

# uname -a
Linux rockchip 4.4.143 #9 SMP PREEMPT Wed Feb 13 18:38:41 CST 2019 armv7l GNU/Linux
蓝牙芯片:AP6212

 

1、查看电源是否开启

# cd /sys/class/rfkill
# ls
rfkill0  rfkill1  rfkill2
# rfkill <--- 查看蓝牙对应的目录
ID TYPE      DEVICE             SOFT      HARD
 0 bluetooth bt_default      blocked unblocked
 1 wlan      phy0          unblocked unblocked
 2 wlan      brcmfmac-wifi unblocked unblocked
# cd rfkill0/
# cat state <--- 查看电源状态
0 <--- power down
# echo 1 > ./state  <--- power up
[  423.917629] [BT_RFKILL]: rfkill_rk_set_power: set bt wake_host pin output high!
[  423.980538] [BT_RFKILL]: rfkill_rk_set_power: set bt wake_host pin input!
[  423.980608] [BT_RFKILL]: ENABLE UART_RTS
[  424.081438] [BT_RFKILL]: DISABLE UART_RTS
[  424.081539] [BT_RFKILL]: bt turn on power

  

2、查看蓝牙是否启动

# hciconfig -a
  <--- 蓝牙设备未启动
# brcm_patchram_plus1 --bd_addr_rand --enable_hci --no2bytes --use_baudrate_for_download  --tosleep  200000 --baudrate 1500000 --patchram  /system/etc/firmware/bcm43438a1.hcd /dev/ttyS4 & <--- 启动蓝牙设备
# hciconfig -a
hci0:   Type: Primary  Bus: UART
    BD Address: 90:1B:07:8D:34:B0  ACL MTU: 1021:8  SCO MTU: 64:1
    DOWN <--- 蓝牙Down状态
    RX bytes:612 acl:0 sco:0 events:30 errors:0
    TX bytes:398 acl:0 sco:0 commands:30 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

 

3、激活蓝牙

# hciconfig hci0 up
# hciconfig dev
hci0:   Type: Primary  Bus: UART
    BD Address: 90:1B:07:8D:34:B0  ACL MTU: 1021:8  SCO MTU: 64:1
    UP RUNNING
    RX bytes:1224 acl:0 sco:0 events:60 errors:0
    TX bytes:796 acl:0 sco:0 commands:60 errors:0
 
# hciconfig -a <--- 查看详细信息
hci0:   Type: Primary  Bus: UART
    BD Address: 90:1B:07:8D:34:B0  ACL MTU: 1021:8  SCO MTU: 64:1
    UP RUNNING
    RX bytes:1224 acl:0 sco:0 events:60 errors:0
    TX bytes:796 acl:0 sco:0 commands:60 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)

 

4、扫描看下

# hcitool scan
Scanning ...
    00:1A:7D:DA:71:13   CHENTONG1070
    70:BB:E9:C7:1B:1C   小米手机
    94:87:E0:B4:09:82   小米手机8
    50:3C:EA:AF:D7:00   OPPO R11s
    20:47:DA:BE:3B:B3   小米手机6
    28:B2:BD:CA:69:BB   GUOZF668
    20:18:06:25:62:79   HC-05
    34:D7:12:91:DC:C0   坚果 Pro 2 特别版

 

三、准备

RK3308+BLE:作为蓝牙的Peripheral端。RK3308系统有hciconfig、hcitool 、btgatt_server、brcm_patchram_plus1命令。

手机+BLE Scanner:作为蓝牙的CentralBLE 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

 

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

注:btgatt-server编译自“bluez-5.50/tools/btgatt-server.c

 

2、点击APP的【connect】,连接设备。在【Service】可以看到心率计的服务。点进去可以看到红心处更新。

 

 

附录

1.BlueZ:http://www.bluez.org

2.https://github.com/fredldotme/brcm-patchram-plus.git

posted on 2019-03-26 19:57  yin'xiang  阅读(2061)  评论(0编辑  收藏  举报