[AIROC™ 蓝牙]

【英飞凌CYW20829测评】高级1-蓝牙广播 与 自定义服务收发数据

[复制链接]
90|1
手机看帖
扫描二维码
随时随地手机跟帖
dvacos|  楼主 | 2024-7-8 14:56 | 显示全部楼层 |阅读模式
本帖最后由 dvacos 于 2024-7-8 15:05 编辑

#申请原创#
高级任务第一步-蓝牙广播 与 自定义服务收发数据

一、广播名 与 扫描回复
下载并使用“Bluetooth_LE_Multi-peripheral”例程。


1、广播名
新上手一个平台,先看Main中与蓝牙相关的API。看看代码,熟悉一下平台。


阅读代码后,跳转到“app_bt_management_callback”发现是状态机,
70d65aacd138e51c2b2918e9722bcfc5


在使能case下,找到了蓝牙初始化函数。话说这里为什么是bt,不是ble?
afaf59d6345c99da6d35311296bc2ee5


跳转到“app_bt_init”函数里,可以看见如上图,注释写着 设置广播数据的API。
bb84ae2d26cffc5f0153178c825c95df


跳转到cy_bt_adv_packet_data就可以发现广播名的数组了,在尝试过后发现修改广播名方法有2个。
方法1:
直接修改广播数据数组
88da8710bc4c8961edbd76660b798467


下图是手机APP的截图,广播数据可以对应上。
6504475e15b1316095eccd5131a03022
虽然广播数据对的上了,但是还要实验、测试一下是不是找对地方了。


修改广播名为”ABC”,烧录。
61cc30735da6e2379b9e6a018daf81ed
下图是手机APP截图,可以确认我们找到的就是广播名。
0bd919ea4abdad88be4354cf1c313c00




修改广播名的第二种方法:
使用IDE工具,直接填写
6ba257cc7e231b7013717426c101c4e2
①点击GAP Setting
②修改广播名
③保存后退出,即可修改广播名
6f09d563403d16bbcebc35e1b87835af
烧录后也是使用第一种方法确认。


2、添加扫描回复
在“app_bt_init”中只打开了了广播内容,并没有打开扫描回复。所以要添加代码打开扫描回复 和 修改扫描回复的数据。


打开扫描回复
①添加扫描回复API
79f153a9bc8d21fe7edfba16fe84862b
②将数量改为3
e8ab208f2fa51199ddf67d6e8ab9c454


找到扫描回复内容
bb2f9447dbd9ea9134f1651fa062075e


扫描回复的内容,可以和广播一样,但是我要验证是否打开扫描回复,所以修改为:
3897c2f456134581e69b4932b54041c2


修改结果:
b1bd1c95970633f63df326d77debab9d
7964238cad5edbf723060959085734fa



二、添加服务
1、添加服务与特征
再次回到“app_bt_init”函数中,找到添加服务的函数。
2348df44d2fa0c88192c351d4b42de91




跳转后发现这个数组太复杂了,能看懂,但是修改太麻烦了(要打太多字了)。。。
并且 修改服务、添加 肯定与 修改广播内容 时同理有2种方法,分别是:1、手动修改 2、使用IDE内置工具生成。但是手动的太、太复杂了,所以只做使用工具生成的方式添加服务。
eb469f74587245d7e6f02d6f9414cc91


①添加服务
50c2ea0467e7adbcc65909f40c259d92


②添加特征,Write 和 Notify,Write用于接收APP下发数据,Notify用于发送数据给APP
9cb9d143eb563517a91432171d35008d
保存后,编译烧录即可,应该长度是自动计算的,不用手动填写了。


下图是添加后的效果:
33a202187732e21bf35b1196b32734ea



2、收发数据
添加服务后就是将接收的数据打印出来,先找到接收数据(即APP写数据)的地方:
faca63ad4a9246f9995ca0051afb28ad


阅读代码后,用handle 的值区分服务后接收数据,这个值也有生成出来
7497809ae45b97801aede45d1f766805


想要实现发送数据,就要找到notify发送数据的接口:
53e2c8debc7c43a7f9aacb1286f2f530
wiced_bt_gatt_server_send_notification
作用:以Notify的形式发送数据给APP


参数:
①连接的ID,即连接的设备顺序,第一个连接的设备就是0
②Handle,就是Handle,可以大致的理解为服务、特征的顺序
③数据长度
④数据
⑤暂时不理解,跟着填NULL


于是把接收数据 与 发送数据组合起来:
9c6bf6f78a7b2fd9d7918e28097e40b1


将自定义服务接收到的数据,转发回手机,实验的结果如下:
f3429ab9f777c619d84a0ca3690bae03
数据转发回手机了,不过回复太快了,APP显示顺序有问题。





使用特权

评论回复
IFXOcean| | 2024-7-10 12:58 | 显示全部楼层
很多同学会抱怨BLE广播数据量太小了, 只有31个字节,填充一个128bit UUID后,就几乎没什么空间了,即使加上scan response也不够用。
20829支持扩展广播,可以填充更多的广播数据了,一个扩展广播最长可以有254字节,如果一个广播不行,那就再来一个。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

89

帖子

0

粉丝