1. 广播包有两种:广播包(Advertising Data)和响应包(Scan Response),其中广播包是每个设备必须广播的,而响应包是可选的。数据包的格式如下图所示:data format每个包都是 31 字节,数据包中分为有效数据(significant)和无效数据(non-significant)两部分;;; 因为广播包只能发送31个字节 所以广播包数据超过了 ,可以响应包来发送数据。
广播通道(37 38 39 ,其余的用于连接数据交互),用于:广播 ,扫描请求,扫描响应,链接。(https://blog.51cto.com/u_13671806/4565018)
广播包里 31个字节里面 第一会是 数据长度, 再AD type定义 ,再数据 这样子多个组成一个包。(http://news.eeworld.com.cn/qrs/ic648023.html); AD type 可以参考这个地址
2. service 的
一个Profile中可包含一个或者多个服务;
一个服务可包含一个或者多个特性(逻辑上的集合);
一个特性至少包含两个属性条目:一个用于声明,其他用于存储属性值。
一个属性条目包含 handler、type、permissions、uuid
Characteristic 特征值,BLE 主从机的通信均是通过 Characteristic 来实现,可以理解为一个标签,通过这个标签可以获取或者写入想要的内容
然而,有一个特别的描述符值得特别地提起:客户端特性配置描述符(Client Characteristic Configuration Descriptor,CCCD),它的UUID是0x2902,这个描述符是给任何支持通知或指 示功能的特性额外增加的。 在CCCD中写入“1”使能通知功能,写入“2”使能指示功能,写入“0”同时禁止通知和指示功能。
Notify;必定会包含 2909
(蓝牙 服务,特性,描述符,属性条目_蓝牙的服务和特征-CSDN博客)
3. 为什么会有两个广播名称
关于蓝牙广播的 local name 和device name,很多人可能有疑惑,为什么蓝牙会有两个名字。可以这样简单地区分:
1.Local Name是广播出来的广播名称,又叫做 adv name。Device Name是GATT service中的一个特性,需要连接后才能读或写。
2.Local Name不能过长,因为广播包数据长度有限。Local Name有两类short和long。具体长度可以自己设置,一般手机界面显示的蓝牙名称最多到28字节,所以理论上Local name 定义不要超过28 字节,不然手机显示不全蓝牙名称,Local Name 最长为31字节。Device Name的最长为248字节。
3.Local Name和Device Name最好保持一致性。Local Name必须是Device Name的开始连续的一部分或全部。例如Device Name是"BT_DEVICE",则Local Name可以是"BT_DEV" 或者“BT_DEVICE”
https://blog.csdn.net/jackbo11/article/details/132567085
4. 广播类型
https://ingchips.github.io/application-notes/pg_ble_stack_cn/ch-adv.html
5. RSSI
如何在手機上檢查藍牙 RSSI?
每當你知道你在尋找什麼, 檢查藍牙信號的強度變得容易. 可以通過讀取設備設置中的 RSSI 來訪問藍牙 RSSI. 藍牙設備的理想 RSSI 值應介於 -30 至 -55.
讀取接收信號強度指示器 (RSSI) 有時可能具有挑戰性. 必須了解較低的數字表示較低的連接,而較高的數字表示更好的連接. 該數字始終顯示為負數.
因為這些閱讀指標, 以下是一些可以幫助您正確讀取連接的示例.
• 更緊密的聯繫是 -30 至 -55
• 牢固的連接始於 -55 至 -67
• 糟糕的連接始於 -80 至 -90
• 不可用的連接從 -90 及以下