蓝牙-b

最近智能家居比较火,好多公司开始开发通过蓝牙对智能家居进行连接控制!下面,我就把自己总结的蓝牙方面的知识分享一下!求吐槽!!!!O(∩_∩)O。。。

1.导入头文件#import <CoreBluetooth/CoreBluetooth.h>

2.设置中心及外设的属性

@property(nonatomic,strong)CBCentralManager*cbCentralMgr;//中心(发起连接)

@property(nonatomic,strong)CBPeripheral*myPeripheral;//外部设备(被动连接)

3.继承代理方法<CBCentralManagerDelegate,CBPeripheralDelegate>

4.创建中心设备的实例并设置代理

self.cbCentralMgr= [[CBCentralManageralloc]initWithDelegate:selfqueue:nil];

5.中心设备设置delegate后会自动调用本机蓝牙状态的方法

- (void)centralManagerDidUpdateState:(CBCentralManager*)central

{

switch(central.state)

{

caseCBCentralManagerStateUnsupported:

NSLog(@"The platform/hardware doesn‘t support Bluetooth Low Energy.");

break;

caseCBCentralManagerStateUnauthorized:

NSLog(@"The app is not authorized to use Bluetooth Low Energy.");

break;

caseCBCentralManagerStatePoweredOff:

NSLog(@"Bluetooth is currently powered off.");

break;

caseCBCentralManagerStatePoweredOn:

{

NSLog(@"CBCentralManagerStatePoweredOn");

}

break;

caseCBCentralManagerStateUnknown:

default:

break;

}

}

6.在状态为CBCentralManagerStatePoweredOn的时候可以通过中心设备扫描周边的设备

[self.cbCentralMgr    scanForPeripheralsWithServices:niloptions:@{CBCentralManagerScanOptionAllowDuplicatesKey: [NSNumbernumberWithBool:YES]}];

7.一旦扫描到设备就会自动调用代理方法

//发现蓝牙设备,可能发现不止一个蓝牙设备,所以该方法可能被调用多次

- (void)centralManager:(CBCentralManager*)central didDiscoverPeripheral:(CBPeripheral*)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber*)RSSI{}

8.在扫描到一个设备时,我们可以进行外部设备和中心的连接

//连接某个蓝牙,一个中心设备可以连接多个周围的蓝牙设备,苹果最多连接10个外设

[self.cbCentralMgr connectPeripheral:peripheral options:[NSDictionary dictionaryWithObject:[NSNumbernumberWithBool:YES] forKey:CBConnectPeripheralOptionNotifyOnDisconnectionKey]];

9.在连接的时候同时可以关闭中心的扫描

[self.cbCentralMgrstopScan];

10.在中心和外部设备的连接过程中,可能会调用以下几个方法:

a.当连接成功时调用

//当连接上某个蓝牙之后,CBCentralManager会通知代理处理

- (void)centralManager:(CBCentralManager*)central didConnectPeripheral:(CBPeripheral*)peripheral{}

b.当连接失败时调用

//当连接蓝牙失败的时候会调用

- (void)centralManager:(CBCentralManager*)central didFailToConnectPeripheral:(CBPeripheral*)peripheral error:(NSError*)error{}

c.当连接断开时调用

//当中心主动与外设断开或外设主动和中心断开成功时调用

- (void)centralManager:(CBCentralManager*)central didDisconnectPeripheral:(CBPeripheral*)peripheral error:(nullableNSError*)error{}

11.中心主动断开与外设的连接

[self.cbCentralMgrcancelPeripheralConnection:peripheral];

12.连接成功后,需要设置外设代理并且查询所有蓝牙服务或蓝牙某一个服务

//因为在后面我们要从外设蓝牙那边再获取一些信息并与之通讯,这些过程会有一些事件可能要处理,所以要给这个外设设置代理

peripheral.delegate=self;

//查询所有蓝牙服务,或查询蓝牙外设上的指定服务

[self.myperipheraldiscoverServices:nil];

13.查询所有服务时会调用外设的方法

//返回的蓝牙服务通知通过代理实现

- (void)peripheral:(CBPeripheral*)peripheral didDiscoverServices:(NSError*)error

{

for(CBService* serviceinperipheral.services){

[peripheraldiscoverCharacteristics:nilforService:service];

}

}

14.在这个方法里会进行扫描所有特征值,进而调用外设查询特征值的代理方法

//返回的蓝牙特征值通知通过代理实现

- (void)peripheral:(CBPeripheral*)peripheral didDiscoverCharacteristicsForService:(CBService*)service error:(NSError*)error{

}

15.在上面的方法中可以获取到已经与中心连接的外设内有哪些特征值,并且可以通过打开通知来读取特征值内数据的变化

[peripheralsetNotifyValue:YESforCharacteristic:characterstic];

16.特征值内数据变化时会调用外设的代理方法

- (void) peripheral:(CBPeripheral*)aPeripheral didUpdateValueForCharacteristic:(CBCharacteristic*)characteristic error:(NSError*)error{}

17.在该方法里面读取的特征值内容是NSData类型,我们也可以转换为字节数组进行判断

NSData*data = characteristic.value;

//data转byte数组

Byte*testByte = (Byte*)[databytes];

for(inti=0;i<[datalength]; i++){

if((testByte[1] ==2)&&(testByte[0] ==2)) {

//做简单的演示判断

}

}

18.与此同时,我们也可以向某一个特征发送信息,只需要调用下面的方法

//根据蓝牙对象和特性发送数据

-(void)sendDatawithperipheral:(CBPeripheral*)peripheral characteristic:(NSString*)characteristicStr service:(NSString*) service data:(NSData*)data {

for(int i=0; i<service.characteristics; i++)

if([peripheral.services[i].UUIDisEqual:[CBUUIDUUIDWithString:service]]) {

for(CBCharacteristic*characteristicin[[peripheral.servicesobjectAtIndex:i]characteristics]){

//找到通信的的特性

if([characteristic.UUIDisEqual:[CBUUIDUUIDWithString:characteristicStr]]){

[peripheralwriteValue:dataforCharacteristic:characteristictype:CBCharacteristicWriteWithoutResponse];

}

}

}

}

}

19.那么,我们该如何读取中心和外部设备的信号值?信号值越小说明信号越弱

a.当未连接时,我们可以通过扫描外设获取- (void)centralManager:(CBCentralManager*)central didDiscoverPeripheral:(CBPeripheral*)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber*)RSSI{}方法里的RSSI值

b.当连接时,我们可以通过 [peripheralreadRSSI]来调用 - (void)peripheral:(CBPeripheral*)peripheral didReadRSSI:(NSNumber*)RSSI error:(NSError*)error{}方法获取RSSI值

文/爱吃苹果的兔子(简书作者)
原文链接:http://www.jianshu.com/p/1461ebb498ab
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

时间: 2024-10-12 22:29:06

蓝牙-b的相关文章

Android低功耗蓝牙(蓝牙4.0)——BLE开发(上)

段时间,公司项目用到了手机APP和蓝牙设备的通讯开发,这里也正好对低功耗蓝牙(蓝牙4.0及以后标准)的开发,做一个总结. 蓝牙技术联盟在2010年6月30号公布了蓝牙4.0标准,4.0标准在蓝牙3.0+HS标准的基础上增加了对低功耗蓝牙(BLE)的支持.相比原有的普通蓝牙和高速蓝牙,BLE最大的特点就是低功耗,低延时,快速的搜索和连接速度,但数据传输速度相比传统蓝牙低.接下去将从BLE的概念以及代码两个方面介绍Android下的BLE. 先来说说基本概念: 1.BLE相关概念 1.1 GATT.

蓝牙4.0

http://www.voidcn.com/blog/wangqjpp/article/p-5038224.html android使用蓝牙4.0的条件:Android API Level 要在18及以上,即android 4.3以上. 一.蓝牙的几个参数: 1.1 BluetoothGatt 继承BluetoothProfile,通过BluetoothGatt可以连接设备(connect),发现服务(discoverServices),并把相应地属性返回到BluetoothGattCallba

蓝牙核心规格

两种最常见的核心规格实施为蓝牙基本速率/增强数据率(BR/EDR)(已采纳为2.0/2.1版)和低功耗蓝牙(Bluetooth Low Energy)(已采纳为4.0/4.1/4.2版).每种实施都有不同的用例,且使用不同的芯片,以满足基本的硬件要求.双模式芯片皆可适用于此两种用例的应用. 区别: 蓝牙BR/EDR技术--建立相对短程.持续的无线连接,为播放音频流等用例的理想之选 低功耗蓝牙技术--允许快速进行相对远程的无线连接,为不需持续连接且所需电池寿命长的物联网(loT)应用的理想之选 双

手把手教你做蓝牙聊天应用(一)-设计方案

前言 通过"计算器"和"视频播放器"我们已经能够开始开发一些比较像样的应用了. 今天,我们将开始制作一个"蓝牙聊天"应用.这个应用其实很简单,没有炫酷的界面,就是一对一.通过蓝牙连接两台设备,让两个人互相发送信息. 可别觉得它太无聊.没有什么实用性,其实我们正是想通过它让你开始接触网络编程(蓝牙和wifi都是无线连接技术,它们的程序设计方法和思路非常的相似). 另外,学会了使用蓝牙,就为大家打开了技术开发的另一扇大门-物联网,现在很多物联网硬件都

蓝牙4.0技术

1.2 牙 蓝牙  4.01 1.2.1 牙 什么是蓝牙  4.0 图 1.1 蓝牙 4.0 logo 和 BLE logo蓝牙无线技术是使用范围最广泛的全球短距离无线标准之一,全新的蓝牙 4.0 版本将三种蓝牙技术(即传统蓝牙,高速蓝牙和低功耗蓝牙技术)合而为一.它集成了蓝牙技术在无线连接上的固有优势,同时增加了高速蓝牙和低功耗蓝牙的特点,这三个规格可以组合使用,也可以单独使用,低功耗蓝牙即 ble 是蓝牙 4.0 的核心规范,该技术最大特点是拥有超低的运行功耗和待机功耗,蓝牙低功耗设备使用一

以蓝牙开发的视觉解读微信Airsync协议

微信硬件平台使用蓝牙作为近场控制的连接件,并拟定了<微信蓝牙外设协议>.这份协议更像一个标准,用于规范微信和蓝牙外设之间的数据交互场景和接口.但从开发者来看,要完全读懂这份协议,恐怕需要熟读很多遍,并且要结合调试才能真正实现微信Airsync通信.笔者对IOT和微信硬件平台的整个框架和技术都比较熟悉了,并且已经在TI的CC254X和Dialog的DA14580上实现了微信Airsync协议通信.现在回过头来,从开发的角度,对微信Airsync协议进行重新解读,以帮助新进入物联网领域的开发者更快

蓝牙核心技术概述(一):蓝牙概述

蓝牙核心技术概述(一):蓝牙概述 标签: 蓝牙bluetoothsig 2014-07-26 16:01 6143人阅读 评论(3) 收藏 举报  分类: 协议(14)  版权声明:本文为博主原创文章,未经博主允许不得转载. 关键词:蓝牙 核心技术 协议 版本 历史作者:xubin341719(欢迎转载,请注明作者,请尊重版权,谢谢)欢迎指正错误,共同学习.共同进步!!下载连接:Bluetooth PROFILE SPECIFICATIONS (基本涵盖所有蓝牙协议).buletooth cor

Unity3d使用蓝牙(bluetooth)开发IOS点对点网络游戏

著作权声明:本文由http://www.cnblogs.com/icker 原创,欢迎转载分享.转载时请保留该声明和作者博客链接,谢谢! 最近使用Unity3d制作的IOS游戏需要加入联网对战功能功能,因此使用ObjC语言利用IOS SDK的GameKit.framework的Peer-to-peer Connectivity实现了网络连接,在此分享. 啥话都不说,先上代码.点我下载工程文件, 类NetWorkP2P,继承自NSObject.提供GKSessionDelegate和GKPeerP

win7系统电脑连接小米蓝牙音箱

一.买好蓝牙适配器,插到电脑上. 二.右下角工具栏找到蓝牙图标 三.右键这个图标,选择'显示Bluetooth设备' 四.找到小米蓝牙音箱 'NDZ-030-AA' 五.双击打开它,然后选择'服务'选项卡,将所有的选项都勾上,然后点击确定,电脑会自动安装驱动程序 六.找到右下角的喇叭图标,右键,选择'播放设备' 七.选择'NDZ-03-AA'小米蓝牙音箱(这个图是已经连接上的,没有连接的时候一样选择它).然后点击确认,它就会连上了. 八.关机重开不会自动连上,重复上一步来进行连接.

[nRF51822] 14、浅谈蓝牙低功耗(BLE)的几种常见的应用场景及架构(科普类干货)

蓝牙在短距离无线通信领域占据举足轻重的地位—— 从手机.平板.PC到车载设备, 到耳机.游戏手柄.音响.电视, 再到手环.电子秤.智能医疗器械(血糖仪.数字血压计.血气计.数字脉搏/心率监视器.数字体温计.耳温枪.皮肤水分计等), 再到智能家居等领域均占有一席之地. 而蓝牙低功耗(BLE)是在蓝牙4.0协议上修改以适用低功耗应用场景的一种蓝牙协议. 随着上一股智能消费类电子大潮的到来,BLE的各种应用也像雨后春笋般在市场上铺开. 如果想 紧跟蓝牙协议的最新动态 ,可以在https://www.b