星期三, 05. 九月 2018 02:03 上午 - beautifulzzzz
1, 前言
上一篇讲了如何编译安装 BlueZ-5, 本篇主要在于玩 BlueZ, 用命令行去操作 BLE 设备:
[BlueZ] 1,Download install and use the BlueZ and hcitool on PI 3B+
2,gatttool -- 老工具趟坑
刚开始跟着 Get Started with Bluetooth Low Energy on Linux https://www.jaredwolff.com/blog/get-started-with-bluetooth-low-energy/ 操作 gatttool, 发现坑太多 (主要原因是工具老了):
采用 sudo gatttool -b 4D:69:98:0E:91:5E -I 去连接 发现会报错: Error: connect error: Connection refused (111) 最终参考 LINK-11 发现需要加 random 选项 (#1):
- ~ sudo gatttool -b 4D:69:98:0E:91:5E -I
- [4D:69:98:0E:91:5E][LE]> connect
- Attempting to connect to 4D:69:98:0E:91:5E
- Error: connect error: Connection refused (111)
- [4D:69:98:0E:91:5E][LE]> exit
- ~ sudo gatttool -t random -b 4D:69:98:0E:91:5E -I
- [4D:69:98:0E:91:5E][LE]> connect
- Attempting to connect to 4D:69:98:0E:91:5E
- Connection successful
- [4D:69:98:0E:91:5E][LE]>
- (gatttool:3104): GLib-WARNING **: Invalid file descriptor.
过一回会 10S 自动断开, 网上说这个工具老了, 不建议用了 (#2):
- There are new tools to use with GATT, bluetoothctl/bluetoothd is the preferred since with that you have GAP, etc,
- but if want to use a stand alone tool then I suggest you use btgatt-client.
3,bluetoothctl--NB 的新工具
命令行进入 bluetoothctl 操作环境 (#6):
bluetoothctl
我在手机上用 lightblue 模拟一个 BLE 设备 ty_prod, 之后对其 service 进行修改, 调用 scan on 进行搜索还是老的, 最终发现要先用 remove 移除之前的设备, 之后再 scan 就会出现 [NEW] Device 72:3B:E1:81:4E:4F ty_prod 设备 注: 用 lightblue 模拟的设备的 MAC 不是固定的 注: 我发现在 lightblue 中无论怎么模拟 BLE 设备, 一旦被连上搜索到的 service 都是 IPone 的
- [bluetooth]# devices
- Device 28:ED:6A:A0:26:B7 ty_prod
- Device 58:71:33:00:00:24 Bluetooth Keyboard
- Device 00:1A:7D:DA:71:0A SHEN-PC
- Device 94:87:E0:B3:AC:6F Mi Phone
- [bluetooth]# remove 28:ED:6A:A0:26:B7
- ...
- [bluetooth]# scan on
- Discovery started
- [NEW] Device 72:3B:E1:81:4E:4F ty_prod
- [bluetooth]# scan off
- ...
- Discovery stopped
- [bluetooth]# connect 72:3B:E1:81:4E:4F
- Attempting to connect to 72:3B:E1:81:4E:4F
- [CHG] Device 72:3B:E1:81:4E:4F Connected: yes
- Connection successful
- [ty_prod]
索性就用 IPhone 自带的服务做测试了~
- [ty_prod]# info
- Device 28:ED:6A:A0:26:B7 (public)
- Name: tuya_mdev_test
- Alias: tuya_mdev_test
- Appearance: 0x0040
- Icon: phone
- Paired: yes
- Trusted: no
- Blocked: no
- Connected: yes
- LegacyPairing: no
- UUID: Fax (00001111-0000-1000-8000-00805f9b34fb)
- UUID: Generic Access Profile (00001800-0000-1000-8000-00805f9b34fb)
- UUID: Generic Attribute Profile (00001801-0000-1000-8000-00805f9b34fb)
- UUID: Current Time Service (00001805-0000-1000-8000-00805f9b34fb)
- UUID: Device Information (0000180a-0000-1000-8000-00805f9b34fb)
- UUID: Battery Service (0000180f-0000-1000-8000-00805f9b34fb)
- UUID: Vendor specific (7905f431-b5ce-4e99-a40f-4b1e122d00d0)
- UUID: Vendor specific (89d3502b-0f36-433a-8ef4-c502ad55f8dc)
- UUID: Vendor specific (9fa480e0-4967-4542-9390-d343dc5d04ae)
- UUID: Vendor specific (d0611e78-bbb4-4591-a5f8-487910ae4366)
- [CHG] Device 28:ED:6A:A0:26:B7 ServicesResolved: no
- [CHG] Device 28:ED:6A:A0:26:B7 Connected: no
我们用 Current Time Service, 列出所有 attributes 操作如下:
- [tuya_mdev_test]# menu gatt
- [tuya_mdev_test]# list-attributes 28:ED:6A:A0:26:B7
- ...
- Primary Service
- /org/bluez/hci0/dev_47_B1_26_C1_81_18/service0041
- 00001805-0000-1000-8000-00805f9b34fb
- Current Time Service
- Characteristic
- /org/bluez/hci0/dev_47_B1_26_C1_81_18/service0041/char0045
- 00002a0f-0000-1000-8000-00805f9b34fb
- Local Time Information
- Characteristic
- /org/bluez/hci0/dev_47_B1_26_C1_81_18/service0041/char0042
- 00002a2b-0000-1000-8000-00805f9b34fb
- Current Time
- Descriptor
- /org/bluez/hci0/dev_47_B1_26_C1_81_18/service0041/char0042/desc0044
- 00002902-0000-1000-8000-00805f9b34fb
- Client Characteristic Configuration
- ...
上面 Current Time Service 对应的服务如下图:
我们选择 Current Time 进行操作 UUID:0x2A2B
- [ty_prod]# select-attribute /org/bluez/hci0/dev_47_B1_26_C1_81_18/service0041/char0042
- [tuya_mdev_test:/service0041/char0042]# read
- Attempting to read /org/bluez/hci0/dev_47_B1_26_C1_81_18/service0041/char0042
- [CHG] Attribute /org/bluez/hci0/dev_47_B1_26_C1_81_18/service0041/char0042 Value:
- e2 07 09 05 01 24 11 03 f1 02 .....$....
- e2 07 09 05 01 24 11 03 f1 02 .....$....
- [tuya_mdev_test:/service0041/char0042]# attribute-info
- Characteristic - Current Time
- UUID: 00002a2b-0000-1000-8000-00805f9b34fb
- Service: /org/bluez/hci0/dev_47_B1_26_C1_81_18/service0041
- Value:
- e2 07 09 05 01 2e 01 03 f5 02 ..........
- Notifying: yes
- Flags: read
- Flags: notify
读出结果大致意思应该是: 2018-9/5-1:36:17 周三
读取一下 0x180A 的 Device Information:
- [tuya_mdev_test:/service0006/char0007]# select-attribute /org/bluez/hci0/dev_47_B1_26_C1_81_18/service0047/char004a
- [tuya_mdev_test:/service0047/char004a]# attribute-info
- Characteristic - Model Number String
- UUID: 00002a24-0000-1000-8000-00805f9b34fb
- Service: /org/bluez/hci0/dev_47_B1_26_C1_81_18/service0047
- Flags: read
- [tuya_mdev_test:/service0047/char004a]# read
- Attempting to read /org/bluez/hci0/dev_47_B1_26_C1_81_18/service0047/char004a
- [CHG] Attribute /org/bluez/hci0/dev_47_B1_26_C1_81_18/service0047/char004a Value:
- 69 50 68 6f 6e 65 36 2c 32 iPhone6,2
- 69 50 68 6f 6e 65 36 2c 32 iPhone6,2
当然写, 使能 notify 也很简单, 看 help 即可. 最后断开连接, 并退出!!!
- [tuya_mdev_test:/service0047/char004a]# disconnect 28:ED:6A:A0:26:B7
- Attempting to disconnect from 28:ED:6A:A0:26:B7
- [CHG] Device 28:ED:6A:A0:26:B7 ServicesResolved: no
- Successful disconnected
- [CHG] Device 28:ED:6A:A0:26:B7 Connected: no
- [bluetooth]# quit
来源: https://www.cnblogs.com/zjutlitao/p/9589661.html