• 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值,得转换] 之后就自由发挥了,在这期间都是通过代理来实现的,也就是说你只需要处理你想要做的事情,代理会帮你调用方法。[别忘了添加代理]

  • 相关阅读:
    周记
    读书笔记
    我是一只IT小小鸟
    回车键完全替代模拟鼠标单击事件
    去除Flexgrid表格的隔行底色为白的样式
    Flexgrid中的sortable设为false的时候abbr属性也不存在的原因及解决办法
    Flexigrid列之间的拖拉线条在某些浏览器中不能很好地与栏目边缘重合解决方法介绍
    用基于openssl产生的密钥实现PHP和.NET端的RSA加解密互通
    CSS3轮播图
    淘宝放大镜
  • 原文地址:https://www.cnblogs.com/fightinglikeKobe/p/14442593.html
Copyright © 2020-2023  润新知