蓝牙开发

Posted by on May 19, 2020
  • 一种是接受设备的广播数据我们去解析,不需要去连接
  • 一种是我们需要建立连接才可以进行数据获取和传递

  • 观察数据工具使用

Android-nRF-Connect

https://github.com/NordicSemiconductor/Android-nRF-Connect

  • 蓝牙都是按照SIG蓝牙协议来传输数据的,我们看看正常解析到的数据格式

微信图片_20200519194036 (1)

从上面的图片中我们可以看到,我们接受到的蓝牙数据一般都是16进制的数据,但是他是有规则的

0x代表这串字符串是十六进制的字符串。两位十六进制数代表一个字节。因为两个字符组成的十六进制字符串最大为FF,即255,而Java中byte类型的取值范围是-128到127,刚好可以表示一个255的大小。所以两个十六进制的字符串表示一个字节。

​ 继续查看报文内容,开始读取第一个广播数据单元。读取第一个字节:0x02,转换为十进制就是2,即表示后面的2个字节是这个广播数据单元的数据内容(0106)。超过这2个字节的数据内容后,表示是一个新的广播数据单元。

​ 而第二个广播数据单元,第一个字节的值是0x10,转换为十进制就是16,表示后面16个字节为第二个广播数据单元。以此这样往后推算了

  • 只要是标准的来蓝牙协议都可以用这种方法解决,拿到具体的广播数据之后,就要按照该厂商提供的数据文档去获取了,比如高低位转换==

谷歌也提供了API

https://developer.android.com/reference/android/bluetooth/le/AdvertiseData