- 博客(5)
- 收藏
- 关注
原创 蓝牙4.2:GATT、SPP、属性表、服务、特征
GATT流程总结:GATTC向GATTS发送GATT请求,GATTC发送目标UUID,GATTS根据该UUID去寻找对应的服务,并将该服务的UUID和句柄范围返回到GATTC,随后GATTC可以发起特征发现请求,GATTS会在该句柄范围内去进行遍历,寻找目标特征,然后将目标特征的UUID和句柄返回到GATTC,GATTC拿到特定句柄后,便可直接通过句柄对特征值进行读写操作了。GATT数据交互过程可以这样理解,GATT可以提供一个数据交换的通道,ATT是设备的属性,那如何去获取这个状态的数据呢?
2025-02-15 22:27:07
1646
原创 蓝牙4.2:ESP32的收发流程代码
把拿过来的结构体复制到main函数上方进行定义,这里注意.p_service_uuid = adv_service_uuid128,这个adv_service_uuid128是没有定义的,也应该去刚才的文件里拿过来进行粘贴定义,uuid给16位就够用了,没必要用源代码里的32位,所以将结构体中.service_uuid_len=32改成16。用于分组,像一个大的“文件夹”,比如在一个大型商场里,可能会有多个不同区域的蓝牙信标,像服装区、餐饮区、超市区等,就可以给每个区域的信标设置不同的命名空间。
2025-02-13 22:02:03
1321
原创 蓝牙4.2:基于ESP32的Eddystone广播收发
分析完这一套逻辑,再留意一下main函数里的最后一行,esp_ble_gap_set_scan_params(&ble_scan_params),如果说刚才提到的代码都是官方的demo不需要去改,那这个地方就需要我们自己去根据实际情况去修改了,跳转到ble_scan_params的定义。若进入该分支,则先判断该包是否是一个Eddystone广播包,如不是则返回,如果是,则调用 esp_eddystone_show_inform(&eddystone_res),这个函数的实现如下。分支来处理扫描结果。
2025-02-12 20:57:50
1859
原创 蓝牙4.2:Beacon广播信标(以Google Eddystone为例)
数据(PDU,在上一篇文章L2CAP介绍中出现):最少是六个字节,因为自身地址就是6位,真正有效的数据在有效载荷内,而这个有效载荷中包含的广播数据由多个AD结构体组成,AD结构体也在图中表示了出来,由一个字节表示长度和一个字节表示类型和x个字节的数据构成,这里的x=长度-类型。以第一个AD结构为例:一共是三个字节,其中Len代表类型+数据的长度总和为两个字节,而长度占一个字节,故类型占据一个字节,其中类型赋值为0x01,查表后才能知道代表的具体含义。长度,这里的长度表示后面6-37字节数据的长度。
2025-02-12 16:03:44
292
原创 蓝牙4.2:协议栈结构——主机和控制器
一个设备可同时作为服务器和客户端。交换配置,发现对方设备上的服务和特性、读写特征值的通知和指示可以理解为ATT是一个盒子,里面存放着LED灯的信息,如果是1就开灯,0就关灯。但是如何把这个信息拿出来或者说传出去?可以将这个ATT盒子当成一个GATTS服务器,另外一个蓝牙设备当成GATTC,通过GATT接口进行数据传输。控制器和主机的通讯流程如图。
2025-02-11 21:48:15
761
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人