Bluetooth 开发科普
1、蓝牙协议结构
Controller运行在蓝牙芯片上,host运行在主控上,两芯片通过硬件通信接口(uart或usb),进行通信连接(HCI)。
实际使用中有不同场景,根据场景需求,SIG定义了不同的规范(Profile),对于Controller只关心数据收发,不用用户场景,所以有了host端的L2CAP规范,屏蔽上层不同用户协议。
Profile,大致分三类,经典蓝牙(黄色),ble(紫色),mesh(绿色)
区别
当设备支持蓝牙4.0时,还得进一步确认设备是支持BT单模、BLE单模还是BT和BLE都支持的双模。 放一张经典蓝牙和BLE的软件层次区分,中间的是双模的。
2、常见测试工具使用
bluetoothd --version //bluez版本查询
连接设备 E0:CC:F8:CE:05:1A //yf的小米10
hciconfig -a
hcidump -w /tmp/xxx.cfa //hci log
hciconfig hci0 leadv //广播
首先启动bluetoothctl启动
常用命令
- power on/off 打开电源或者关闭
- scan on/off 开始扫描
- pair xx:xx:xx:xx:xx 匹配某个设备
- paired-devices显示已经匹配的设备
- connect xx:xx:xx:xx:xx 连接蓝牙设备
首先运行
./bluetoothctl
给芯片上电,
power on
使芯片可发现
Discoverable on
作为主机连接从设备
进入bluetoothctl命令行 bluetoothctl
进入bluetoothctl命令行后,类似:[bluetooth]#
Controller代表arm板上的蓝牙设备,Device代表蓝牙耳机
按如下步骤初始化蓝牙设备,并连接蓝牙耳机
- 查看帮助 help
- power on
- agent on
- default-agent
- 启动扫描 scan on
假如蓝牙耳机地址为:E0:CC:F8:CE:05:1A
trust E0:CC:F8:CE:05:1A - 配对 pair E0:CC:F8:CE:05:1A
- 连接 connect E0:CC:F8:CE:05:1A
- 查看蓝牙耳机信息
info E0:CC:F8:CE:05:1A - 断开连接
disconnect E0:CC:F8:CE:05:1A
不想自动连接上蓝牙耳机,可以删除配对信息
remove E0:CC:F8:CE:05:1A