【移动应用开发技术】手机APP智能硬件开发蓝牙连接测试_第1页
【移动应用开发技术】手机APP智能硬件开发蓝牙连接测试_第2页
【移动应用开发技术】手机APP智能硬件开发蓝牙连接测试_第3页
【移动应用开发技术】手机APP智能硬件开发蓝牙连接测试_第4页
【移动应用开发技术】手机APP智能硬件开发蓝牙连接测试_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【移动应用开发技术】手机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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论