星期三, 05. 九月 2018 02:03上午 beautifulzzzz ![][ bar] 1、前言 上一篇講瞭如何編譯安裝BlueZ 5,本篇主要在於玩BlueZ,用命令行去操作BLE設備: [ [BlueZ] 1、Download install and use the BlueZ and ...
星期三, 05. 九月 2018 02:03上午 - beautifulzzzz
1、前言
上一篇講瞭如何編譯安裝BlueZ-5,本篇主要在於玩BlueZ,用命令行去操作BLE設備:
2、gatttool —— 老工具趟坑
剛開始跟著 Get Started with Bluetooth Low Energy on Linux 操作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
LINKS
[1].Cannot connect to BLE device on Raspberry Pi
[2].Invalid file descriptor gatttool of bluez 5.32
[3].Get Started with Bluetooth Low Energy on Linux
[4].Reverse Engineering a Bluetooth Low Energy Light Bulb
[5].Doing Bluetooth Low Energy on Linux
[6].Tutorial: BLE Pairing the Raspberry Pi 3 Model B with Hexiwear
@beautifulzzzz
智能硬體、物聯網,熱愛技術,關註產品
博客:http://blog.beautifulzzzz.com
園友交流群:414948975