harveyhan 发表于 2019-8-15 23:57:44

树莓派3 蓝牙BLE连接过程采坑必看!!!


基础api,应该包括
1. 扫描ble设备
2. 与BLE设备连接
3. 寻找BLE中可用的服务
4. 查看设备服务的特征值
5. 读取特征值对应句柄的数值
6. 发送数据
7. 接收数据


主要通过工具查询命令
hcitool lescan// 扫描ble设备
gatttool -b DA:DB:3B:96:F6:96 -I -t random   //重点关注解析各字段后,怎么查询
connect   //连接ble
primary//查看可用服务

char-desc      
char-read-hnd   
char-read-uuid   
char-write-cmd   
char-write-req   
characteristics

通过工具命令:hcitool lescan如下步骤

1.获取当前device
int hci_get_route(bdaddr_t *bdaddr);

2. 打开本机的蓝牙设备
int hci_open_dev(int dev_id);

3. 设置扫描参数
int hci_le_set_scan_parameters(int dev_id, uint8_t type, uint16_t interval,
                                        uint16_t window, uint8_t own_type,
                                        uint8_t filter, int to);

4. 开始扫描
int hci_le_set_scan_enable(int dev_id, uint8_t enable, uint8_t filter_dup, int to);

比如:
err = hci_le_set_scan_enable(dd, 0x01, filter_dup, 10000);// enable sacn
err = hci_le_set_scan_enable(dd, 0x00, filter_dup, 10000);   //disable sacn

5. 打印扫描结果: (从里面找出对应的addr列表保存,留作后续使用)

static int print_advertising_devices(int dd, uint8_t filter_type)

其中,获取addr用到很多底层io接口

getsockopt

hci_filter_clear
hci_filter_set_ptype
hci_filter_set_event

setsockopt

ba2str
==========================================================================================
干货在这里,开始怎么都连接不上,最后终于连接上了,网上有很多类似的解决方法都没有解决,尽然是要把-t random写在最后面就可以啦!!!

gatttool -b DA:DB:3B:96:F6:96 -I -t random   //重点关注解析各字段后,怎么查询
connect   //连接ble
primary//查看可用服务




zhuolingmin 发表于 2019-8-26 16:02:50

感谢大佬分享
页: [1]
查看完整版本: 树莓派3 蓝牙BLE连接过程采坑必看!!!