蓝牙
蓝牙分为经典蓝牙(class bluetooth)和低功耗蓝牙(bluetooth low energy)
经典蓝牙的缺点是比较耗电。后来,诺基亚发明了一种可以降低功耗的蓝牙通信方式。2010年出台的蓝牙4.0把这种通信方式规范为“低功耗蓝牙”(BLE,Bluetooth Low Energy)。BLE把通信双方分为非对称的双方,尽量让其中的一方承担主要的开销,减少另一方的负担。举例来说,手环电量少,而且需要长时间待机。BLE通信的主要负担可以放在电量较充裕且充电方便的手机一侧,从而减少手环的能耗。
BlueZ
blueZ工具:
你可以使用下面命令手动启动或者关闭蓝牙服务
sudo systemctl start bluetooth
sudo systemctl stop bluetooth
查看蓝牙服务的状态
systemctl status bluetooth
bluez源码分析
android 蓝牙代码架构及其uart 到rfcomm流程
蓝牙调试
可以通过Bluetooth Low Energy sniffer来抓包。
蓝牙的一些Profile
Headset Profile (HSP)
Handsfree Profile (HFP)
Advanced Audio Distribution Profile (A2DP)
Serial Port Profile (SP)
Human Interface Device Profile (HID)
Personal Area Network Device Profile (PAN)
Object Push Profile (OPP)
File Transfer Profile (FTP)
Generic Access Protocol GAP
Generic Attribute Profile GATT
参考文章:Bluetooth Profiles 不同的Profile对应不同的功能,下面就来介绍蓝牙的这些功能的实现
蓝牙传输音频
蓝牙耳机现在主要有三大规格———HSP、HFP和A2DP。
HeadsetPro-file(HSP)代表耳机功能,提供手机与耳机之间通信所需的基本功能。
HandProfile(HFP)则代表免提功能,HFP在HSP的基础上增加了某些扩展功能。
Advanced Audio Distribution Profile(A2DP),指的是 蓝牙音频传输模型协定。
蓝牙支持的音频编码格式,分成以下几种:
一、SBC,这个是蓝牙音频的标准编码格式。是A2DP(Advanced Audio Distribution Profile,蓝牙音频传输协议)协议强制规定的编码格式。 最大允许速率是单声道 320kbit/s、双声道 512kbit/s,所有的蓝牙都会支持这个音频编码格式,因此所有的蓝牙音频芯片也会支持这个音频编码格式。
二、AAC,杜比实验室为音乐社区提供的技术,是一种高压缩比的编码算法。iphone进行蓝牙传输时会使用AAC格式。目前苹果的设备蓝牙音频基本上都是采用AAC编码技术。而且市面上不少蓝牙音箱/耳机等接收设备也支持AAC解码。
三、APT-X,是CSR公司的专利编码算法,在被高通收购后,成为其主推的编码技术,宣传上是号称可以达到 CD 音质。大部分安卓新机配置了APT-X。这种音频编码技术比传统蓝牙编码效率更高,声音保留的细节更多,实际听感好于前面两者。采用APT-X技术的设备,需要向高通申请授权并交纳授权费,并且需要发射接收端都支持才行。
四、LDAC,这是SONY公司自己开发的一种音频编码技术,可以传输高分辨率(Hi-Res)音频内容,这种技术通过高效的编码和优化分包方式,可以传输约三倍于其他编码技术的数据。目前这种技术只用在SONY自己的发射和接收设备上。因此,只有买了SONY成套的支持LDAC音频编码技术的发射和接受设备,才能够支持LDAC编码的蓝牙音频数据传输。
蓝牙传输文件
openobex
Beacon定位
ibeacon是由苹果公司在2013年推出的,其初衷是解决室内定位的问题。利用低功耗的BLE多点定位来解决室内(大型商场、停车场、医院等)定位的问题也就理所应当了。
ibeacon基于BLE的广播,而BLE广播限定数据长度不能超过31 Bytes。ibeacon将广播包的长度固定为30 Bytes。
这30个Bytes分为两个AD structure(这是BLE广播数据的一种组织形式)。每个AD structure由 1字节的length+1字节的AD Type+用户数据 构成。下面拿一个实例来说明:
02 01 06 1a ff 4c 00 02 15 fd a5 06 93 a4 e2 4f b1 af cf c6 eb 07 64 78 25 29 11 30 39 cd
第一个AD structure
第二个AD structure
执行以下命令,进行蓝牙广播
1e之后到最后00之前的部分正是我们前面讲的ibeacon广播的数据。这里有个小坑注意,1e后面必须跟31个字节的数据,不够的补 00(因为BLE广播数据的长度是31)
到这里ibeacon的配置已经全部完成了!
iphone上可以安装Beacon Tool,来查看距离信息。
或者在微信上,打开微信->发现->摇一摇, 然后摇一摇你会发现出现了一个“周边”的栏目,如果你配置的Major,和Minor是向微信申请的正式编号,这里就会显示出相应的商家页面。