zoukankan      html  css  js  c++  java
  • iOS蓝牙开发


    蓝牙协议也是通信协议的一种,目的就是把复杂的问题简单化,任何通信协议都具有层次性,特点如下:

    1、从下到上分层,通过层层封装,每一层只需要关心特定的、独立的功能,易于实现和维护

    2、在通信实体内部,下层向上层提供服务,上层是下层的用户。

    3、在通信实体之间,协议仅针对每一层。实体间的通信,就像每一层之间的通信一样,这样有利于交流、理解、标准化。

    当前的蓝牙协议包括BR/EDR(Basic Rate/Enhanced Data Rate)、AMP(Alternate MAC/PHYs)、LE(Low Energy)三种技术。


    目前移动设备上适用的蓝牙大多是V4.0以上,经典V4.0是传统的3.0蓝牙升级而成,向下兼容。而BLE4.0 是新的分支,不向下兼容。
    经典蓝牙模块,一般用于数量比较大的传输:如语音、音乐等较高数据量传输。经典蓝牙模块可细分为传统蓝牙模块和高速蓝牙模块。
    低功耗蓝牙模块是指支持蓝牙协议4.0或更高的模块,特点是成本和功耗的降低,应用于实时性要求比较高的产品中。


    1.关于服务与特征值的简述

    之前说到蓝牙的连接过程,那蓝牙连接之后具体是如何传数据的呢。这里做一下简要说明。

    蓝牙4.0是以参数来进行数据传输的,即服务端定好一个参数,客户端可以对这个参数进行读,写,通知等操作,这个东西我们称之为特征值(characteristic),

    但一个参数不够我们用,比如我们这个特征值是电量的值,另一个特征值是设备读取的温度值。

    那这时候会有多个特征值,并且我们还会对它们分类,分出来的类我们称之为服务(service)。

    一个设备可以有多个服务,每一个服务可以包含多个特征值。为了方便操作,每个特征值都有他的属性,例如长度(size),权限(permission),值(value),描述(descriptor)


    【定义场景】
    1: 广播端:服务端定义,用于被多台扫描设备同时识别并订阅;

    2: 扫描端:客服端定义,用于扫描并订阅广播端设备

    开始广播功能:
    【第一步、开启广播】
    (1): 涉及的类

    1: CBPeripheralManager;

    外设管理器,管理设备广播状态。

    2: CBUUID;

    唯一标识,设备的服务,特性和特征描述符。

    3: CBMutableService;

    外设管理器的服务,用于设定服务特征。

    4: CBMutableCharacteristic;

    服务的特征,用于设定特征描述。

    5: CBMutableDescriptor;

    特征的描述。


    (2): 类调用时序图

    1:CBPeripheralManager初始化外设管理器
    2:CBMutableDescriptor 初始化外特征描述
    3:CBMutableCharacteristic初始化服务中的特征
    4:CBMutableService初始化服务
    5:CBPeripheralManager添加服务

    (3): CoreBluetooth 原生函数

    1: 蓝牙创建,用于权限判断:

    - (void)peripheralManagerDidUpdateState:(CBPeripheralManager *)peripheral;

    2: 外设管理器添加服务完成,回调结果:

    - (void)peripheralManager:(CBPeripheralManager *)peripheral didAddService:(CBService *)service error:(NSError *)error;

    3: 广播开启完成,回调结果:

    -(void)peripheralManagerDidStartAdvertising: (CBPeripheralManager *)peripheral error:(NSError *)error;

    蓝牙的基本操作流程
    最主要是用UUID来确定你要干的事情,特征和服务的UUID都是外设定义好的。我们只需要读取,确定你要读取什么的时候,就去判断UUID是否相符。 一般来说我们使用的iPhone都是做centralManager的,蓝牙模块是peripheral的,所以我们是want datas,需要接受数据。
    亲测同一设备的UUID对于每台iPhone设备都不一样
    1.判断状态为powerOn,然后执行扫描

    2.停止扫描,连接外设

    3.连接成功,寻找服务

    4.在服务里寻找特征

    5.为特征添加通知

    5.通知添加成功,那么就可以实时的读取value[也就是说只要外设发送数据[一般外设的频率为10Hz],代理就会调用此方法]。

    6.处理接收到的value,[hex值,得转换] 之后就自由发挥了,在这期间都是通过代理来实现的,也就是说你只需要处理你想要做的事情,代理会帮你调用方法。[别忘了添加代理]

  • 相关阅读:
    数字配对(bzoj 4514)
    任务查询系统(bzoj 3932)
    楼房重建(bzoj 2957)
    Hotel(poj 3667)
    Can you answer these queries(spoj 1043)
    亚瑟王(bzoj 4008)
    潘多拉的盒子(bzoj 1194)
    Circling Round Treasures(codeforces 375c)
    莫队算法---基础知识介绍(转载)
    HDU 1141---Brackets Sequence(区间DP)
  • 原文地址:https://www.cnblogs.com/fightinglikeKobe/p/14442593.html
Copyright © 2011-2022 走看看