BLE蓝牙HID设备开发(BL602)

本文介绍了BLE蓝牙在物联网中的广泛应用,如在天猫精灵等设备中的角色。BLE蓝牙适用于低功耗和小数据量传输的场景,但不适合大数据传输。文章详细讲解了BLE蓝牙主机开发的关键步骤,包括广播数据的设置和服务属性的配置。通过示例代码展示了如何设置HID设备的广播数据,包括设备标识、服务UUID、设备名称和外观ID。同时,列举了BL602芯片上BLE蓝牙GATT服务的特征定义,如HIDS服务、信息特性、报告映射、控制点等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

总述

BLE蓝牙在物联网中使用很广泛,许多WiFi物联网芯片都带有BLE蓝牙,天猫精灵找队友也是有使用BLE蓝牙广播实现的。BLE蓝牙缺点是不适合大数据传输的场景。

BLE蓝牙

BLE蓝牙主机开发基本包括:

  • 广播数据的设置
  • service的属性设置

广播

数据结构

数据结构,31个数据长度由n个以下结构构成:(除蓝牙5.0外广播数据最大31个字节长度)

LengthAD TypeAD Data
广播数据长度广播数据类型广播数据

在这里插入图片描述

HID设备广播数据
LengthAD TypeAD DataDescribe
0x020x010x05设备标识,低功耗模式,有限发现
0x030x030x1218HID UUID
0x0n0x09设备名称设备名称
0x030x19键盘0xC103 鼠标0xC203 游戏手柄0xC303外观ID
struct bt_data limt_disc_data = (struct bt_data)BT_DATA_BYTES(BT_DATA_FLAGS,(BT_LE_AD_NO_BREDR | BT_LE_AD_LIMITED));
ad_discov[0] = limt_disc_data;
struct bt_data hid_uuid = (struct bt_data)BT_DATA_BYTES(BT_DATA_UUID16_ALL, 0x12, 0x18);
ad_discov[1] = hid_uuid;
bt_set_name("TinyKeyborad");
const char *name = bt_get_name();
struct bt_data data = (struct bt_data)BT_DATA(BT_DATA_NAME_COMPLETE,name, strlen(name));
ad_discov[2] = data;
struct bt_data appera = (struct bt_data)BT_DATA_BYTES(BT_DATA_GAP_APPEARANCE, 0xc1, 0x03);
ad_discov[3] = appera;            

属性构成

BL602:

 BT_GATT_PRIMARY_SERVICE(BT_UUID_HIDS), //0
 /*返回数据 {0x11, 0x01, 0x00, 0x02}*/
BT_GATT_CHARACTERISTIC(BT_UUID_HIDS_INFO,
BT_GATT_CHRC_READ,
BT_GATT_PERM_READ ,
hid_info_read_data,
NULL,
NULL), //1 2
/*返回键盘描述符*/
BT_GATT_CHARACTERISTIC(BT_UUID_HIDS_REPORT_MAP,
BT_GATT_CHRC_READ,
BT_GATT_PERM_READ ,
hid_map_read_data,
NULL,
NULL), // 3 4
/*暂时不处理*/
BT_GATT_CHARACTERISTIC(BT_UUID_HIDS_CTRL_POINT,
BT_GATT_CHRC_WRITE,
BT_GATT_PERM_READ ,
hid_ctrl_write_data,
NULL,
NULL), // 5 6

/*hid_ctrl_write_data 空函数,hid_descrtptor_read_data 返回 0x01 0x01 */
BT_GATT_CHARACTERISTIC(BT_UUID_HIDS_REPORT,
BT_GATT_CHRC_READ|BT_GATT_CHRC_NOTIFY,
BT_GATT_PERM_READ ,
NULL,
hid_ctrl_write_data,
NULL), // 7  8
BT_GATT_CCC(hid_ctrl_write_data, BT_GATT_PERM_READ | BT_GATT_PERM_WRITE),
BT_GATT_DESCRIPTOR(BT_UUID_HIDS_REPORT_REF, BT_GATT_PERM_READ, hid_descrtptor_read_data, NULL, NULL),
/*hid_ctrl_write_data 空函数,hid_descrtptor_read_data_1返回 0x01 0x02 */
BT_GATT_CHARACTERISTIC(BT_UUID_HIDS_REPORT,
BT_GATT_CHRC_READ|BT_GATT_CHRC_WRITE,
BT_GATT_PERM_READ|BT_GATT_PERM_WRITE ,
NULL,
hid_ctrl_write_data,
NULL),
BT_GATT_DESCRIPTOR(BT_UUID_HIDS_REPORT_REF, BT_GATT_PERM_READ, hid_descrtptor_read_data_1, NULL, NULL),
/*hid_mode_read_data 返回0x01*/
BT_GATT_CHARACTERISTIC(BT_UUID_HIDS_PROTOCOL_MODE,
BT_GATT_CHRC_READ|BT_GATT_CHRC_WRITE,
BT_GATT_PERM_READ ,
hid_mode_read_data,
NULL,
NULL),  
/*hid_ctrl_write_data空函数hid_descrtptor_read_data_2 返回0x01 0x03*/                              
BT_GATT_CHARACTERISTIC(BT_UUID_HIDS_REPORT,
BT_GATT_CHRC_READ|BT_GATT_CHRC_WRITE,
BT_GATT_PERM_READ ,
NULL,
hid_ctrl_write_data,
NULL),
BT_GATT_DESCRIPTOR(BT_UUID_HIDS_REPORT_REF, BT_GATT_PERM_READ, hid_descrtptor_read_data_2, NULL, 1),

参考文章

https://www.bilibili.com/read/cv15067064

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值