版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】手机APP智能硬件开发蓝牙连接测试
目前APP同硬件模块通信的方式主要有几种模式:
蓝牙连接模式、WiFi连接模式(Socket或HTTPserver)、DLNA音视频共享(iOS端还可使用AirPlay)。最近
常州开发APP公司点个赞科技项目中测试了
A
PP与外设
通
过
蓝牙方式
实现
硬件
连
接
的功能,对相关的开发实现和测试方法进行一些整理,
在此分享给大家。
1.
蓝牙基础知识
1.iOS平台下蓝牙开发可以使用MFI(ExternalAccessory框架)或BLE(CoreBluetooth框架)进行,但实际开发中基本都使用CoreBluetooth框架,因为它功能更强大,支持蓝牙4.0标准。
2.蓝牙4.0BLE(Bluetoothlowenergy):
它的优点在于传输快,耗电低,但传输数据有限,虽然这个传输字节大小硬件工程师可调,但也不会太大。
3.CoreBluetooth框架的核心是peripheral和central,可以理解成外设和中心,
发起连接的是central,被连接的设备为peripheral,它们是一组相对概念。
比如,当手机去连接控制蓝牙耳机时,你的手机就是central,当手机蓝牙被另一个手机连接并为其提供服务时就是peripheral。
4.Service和Characteristic:蓝牙
设备
通过GATT协
议
定
义的数据通讯方式。一个peripheral可以提供多种服务Service,一种Service又可以包含多个不同的特征Characteristic。特征就是具体键值对,提供数据的地方。每个特征属性分为读、写、通知等几种方式。
5.central通过peripheral的Characteristic来读写外设的数据,和获取通知。
Peripheral广播自己的Service和characteristic,Central订阅某一个具体的characteristic,Peripheral就和Central之间通过characteristic建立了一个双向的数据通道
6.外设peripheral、服务Service、特征characteristic之间的关系:
7.UUID:
蓝牙上的唯一标示符,为了区分不同服务和特征,就用UUID来表示。
1.iOS平台下蓝牙开发可以使用MFI(ExternalAccessory框架)或BLE(CoreBluetooth框架)进行,但实际开发中基本都使用CoreBluetooth框架,因为它功能更强大,支持蓝牙4.0标准。
2.蓝牙4.0BLE(Bluetoothlowenergy):
它的优点在于传输快,耗电低,但传输数据有限,虽然这个传输字节大小硬件工程师可调,但也不会太大。
3.CoreBluetooth框架的核心是peripheral和central,可以理解成外设和中心,
发起连接的是central,被连接的设备为peripheral,它们是一组相对概念。
比如,当手机去连接控制蓝牙耳机时,你的手机就是central,当手机蓝牙被另一个手机连接并为其提供服务时就是peripheral。
4.Service和Characteristic:蓝牙
设备
通过GATT协
议
定
义的数据通讯方式。一个peripheral可以提供多种服务Service,一种Service又可以包含多个不同的特征Characteristic。特征就是具体键值对,提供数据的地方。每个特征属性分为读、写、通知等几种方式。
5.central通过peripheral的Characteristic来读写外设的数据,和获取通知。
Peripheral广播自己的Service和characteristic,Central订阅某一个具体的characteristic,Peripheral就和Central之间通过characteristic建立了一个双向的数据通道
6.外设peripheral、服务Service、特征characteristic之间的关系:
7.UUID:
蓝牙上的唯一标示符,为了区分不同服务和特征,就用UUID来表示。
2.
蓝牙的两种工作模式
1.
中心模式
1.
建立中心
2.
扫描外设(
discover
)
3.
连接外设
(connect)
连接失败、连接断开、连接成功
4.
扫描外设中的服务和特征
(discover)
-4.1
获取外设的
services
-4.2
获取外设的
Characteristics,
获取
Characteristics
的值,获
Characteristics
的
Descriptor
和
Descriptor
的值
5.
与外设做数据交互
(exploreandinteract)
6.
订阅
Characteristic
的通知
7.
断开连接
(disconnect)
2.
外设模式
1.启动一个Peripheral管理对象
2.本地Peripheral设置服务,特性,描述,权限等等
3.Peripheral发送广播
4.设置处理订阅、取消订阅、读characteristic、写characteristic的委托方法
3.
蓝牙设备的工作状态
1.准备(standby)
2.广播(advertising)
3.监听扫描(Scanning
4.发起连接(Initiating)
5.已连接(Connected)
1.
中心模式
1.
建立中心
2.
扫描外设(
discover
)
3.
连接外设
(connect)
连接失败、连接断开、连接成功
4.
扫描外设中的服务和特征
(discover)
-4.1
获取外设的
services
-4.2
获取外设的
Characteristics,
获取
Characteristics
的值,获
Characteristics
的
Descriptor
和
Descriptor
的值
5.
与外设做数据交互
(exploreandinteract)
6.
订阅
Characteristic
的通知
7.
断开连接
(disconnect)
2.
外设模式
1.启动一个Peripheral管理对象
2.本地Peripheral设置服务,特性,描述,权限等等
3.Peripheral发送广播
4.设置处理订阅、取消订阅、读characteristic、写characteristic的委托方法
3.
蓝牙设备的工作状态
1.准备(standby)
2.广播(advertising)
3.监听扫描(Scanning
4.发起连接(Initiating)
5.已连接(Connected)
3.蓝牙连接的开发实现
这里以手机端作为central,以蓝牙设备作为peripheral,蓝牙设备连接的开发实现主要包括以下步骤:
1.
导入苹果系统蓝牙框架
#import
2.
遵循两个蓝牙框架相关的协议
<cbcentralmanagerdelegate,cbperipheraldelegate></cbcentralmanagerdelegate,cbperipheraldelegate>
3.
新建两个实例属性,一个特征属性
@property(nonatomic,strong)CBCentralManager*centralManager;//中心管理者
@property(nonatomic,strong)CBPeripheral*peripheral;//连接到的外设
@property(nonatomic,strong)CBCharacteristic*characteristic;//特征
4.
初始化CBCentralManager,进行蓝牙管理
-(void)viewDidLoad{
[superviewDidLoad];
self.centralManager=[[CBCentralManageralloc]initWithDelegate:selfqueue:dispatch_get_main_queue()];
//创建实例进行蓝牙管理
}
//若中心管理者初始化之后就会触发下面这个代理方法。该代理方法是用来判断手机蓝牙的状态的
-(void)centralManagerDidUpdateState:(CBCentralManager*)central{
//蓝牙可用,开始扫描外设
if(central.state==CBManagerStatePoweredOn){
NSLog(@"蓝牙可用");
//在中心管理者成功开启之后再进行一些操作
//搜索扫描外设
//根据SERVICE_UUID来扫描外设,如果不设置SERVICE_UUID,则扫描所有蓝牙设备
//[self.centralManagerstartAdvertising:@{CBAdvertisementDataServiceUUIDsKey:@[[CBUUIDUUIDWithString:SERVICE_UUID]]}];
[centralscanForPeripheralsWithServices:niloptions:nil];
}
if(central.state==CBManagerStateUnsupported){
NSLog(@"该设备不支持蓝牙");
}
if(central.state==CBManagerStatePoweredOff){
NSLog(@"蓝牙已关闭");
}
if(central.state==CBManagerStateUnknown){
NSLog(@"蓝牙当前状态不明确");
}
if(central.state==CBManagerStateUnauthorized){
NSLog(@"蓝牙未被授权");
}
}
5.
搜索外围设备
//执行扫描动作之后,如果扫描到外设了,就会自动回调下面的协议方法
/**发现符合要求的外设,回调*/
-(void)centralManager:(CBCentralManager*)centraldidDiscoverPeripheral:(CBPeripheral*)peripheraladvertisementData:(NSDictionary*)advertisementDataRSSI:(NSNumber*)RSSI{
NSLog(@"%@====",);
//根据外设名字有选择性的筛选连接蓝牙设备
if([hasPrefix:@"TEAMOSA"]){
//在这里对外设携带的广播数据进行进一步的处理
if([self.peripheraNamescontainsObject:]){
//如果数组中包含了就不再添加
return;
}
//添加到外设名字数组中
[self.peripheraNamesaddObject:];
//标记外设,让它的生命周期与控制器的一致
self.peripheral=peripheral;
//可以根据外设名字来过滤外设
//[centralconnectPeripheral:peripheraloptions:nil];
}
//连接外设
//[centralconnectPeripheral:peripheraloptions:nil];
}
6.
连接外围设备
//连接外围设备,中心管理者连接外设成功,如果连接成功就会回调这个协议方法
/**连接成功*/
-(void)centralManager:(CBCentralManager*)centraldidConnectPeripheral:(CBPeripheral*)peripheral{
//连接成功之后,可以进行服务和特性的发现。停止中心管理设备的扫描动作,要不然在你和已经连接好的外设进行数据沟通时,如果又有一个外设进行广播且符合你的连接条件,那么你的iOS设备也会去连接这个设备(因为iOSBLE4.0是支持一对多连接的),导致数据的混乱。
//停止扫描动作
[self.centralManagerstopScan];
//设置外设的代理
peripheral.delegate=self;
//根据UUID来寻找对象服务
//[peripheraldiscoverServices:@[[CBUUIDUUIDWithString:SERVICE_UUID]]];
//外设发现服务,传nil代表不过滤,一次性读出外设的所有服务
[peripheraldiscoverServices:nil];
NSLog(@"%s,line=%d,%@=连接成功",__FUNCTION__,__LINE__,);
}
//外设连接失败
/**连接失败的回调*/
-(void)centralManager:(CBCentralManager*)centraldidFailToConnectPeripheral:(CBPeripheral*)peripheralerror:(NSError*)error{
NSLog(@"%s,line=%d,%@=连接失败",__FUNCTION__,__LINE__,);
}
//丢失连接掉线
/**断开连接*/
-(void)centralManager:(CBCentralManager*)centraldidDisconnectPeripheral:(CBPeripheral*)peripheralerror:(nullableNSError*)error{
NSLog(@"%s,line=%d,%@=断开连接",__FUNCTION__,__LINE__,);
//断开连接可以设置重新连接
[centralconnectPeripheral:peripheraloptions:nil];
}
以上,已经实现了APP端连接蓝牙设备的功能,蓝牙设备连接完成后,还可以对设备进行数据读写,包括:获取外围设备服务和特征;从外围设备读取数据;向外围设备发送(写入)数据等操作。这里暂不具体展开。
4.APP连接蓝牙设备的测试关注点
介绍了蓝牙的基础知识、APP连接蓝牙设备的开发实现,接下来将介绍APP连接蓝牙设备这一过程测试中需要关注的测试点(由于每种蓝牙设备连接需求不同,开发实现上也会有细小差别,实际测试中可视具
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年3月中国建设银行总行直属机构春季校园招考聘用笔试参考题库附带答案详解
- 2024年3月中国工商银行吉林省分行春季校园招考聘用180人笔试参考题库附带答案详解
- 2024年3月中国农业银行四川省分行春季招考聘用380人笔试参考题库附带答案详解
- 2024年03月首都医科大学宣武医院济南医院招考聘用博士研究生(控制总量)31人笔试参考题库附带答案详解
- 2024年吉林住院医师-吉林住院医师口腔正畸科笔试参考题库含答案
- 2024年03月浙江台州三门县人民检察院招考聘用编制外劳动合同工笔试参考题库附带答案详解
- 2024年03月宁波市江北区洪塘街道2024年公开招考4名合同制工作人员笔试参考题库附带答案详解
- 2024年03月云南昆明石林彝族自治县市场监督管理局编外人员招考聘用笔试参考题库附带答案详解
- 2024年03月上半年四川达州事业单位招考聘用874人笔试参考题库附带答案详解
- 2024年医学高级职称-风湿病(医学高级)笔试参考题库含答案
- 餐饮厨房油烟道管控方案
- 高空升降车安全安全技术交底
- GB∕T 1720-2020 漆膜划圈试验
- 危险废物管理培训课件
- 2022年北京市东城区中考一模地理试题(word版无答案)
- 服装投标技术方案全
- 中广核集团ERP项目实施案例第四部分
- 路灯电缆更换专项施工方案
- 幼儿园警察职业最新ppt
- 江苏大学新增硕士专业学位授权点申请表
- 人教版二年级数学下册测试卷附答案混合运算
评论
0/150
提交评论