zoukankan      html  css  js  c++  java
  • 蓝牙开锁可行性

    概念

    CBPeripheral 蓝牙外设,比如蓝牙手环、蓝牙心跳监视器、蓝牙打印机。
    CBCentralManager 蓝牙外设管理中心,与手机的蓝牙硬件模板关联,可以获取到手机中蓝牙模块的一些状态等,但是管理的就是蓝牙外设。
    CBService 蓝牙外设的服务,每一个蓝牙外设都有0个或者多个服务。而每一个蓝牙服务又可能包含0个或者多个蓝牙服务,也可能包含0个或者多个蓝牙特性。
    CBCharacteristic 每一个蓝牙特性中都包含有一些数据或者信息。

    每个蓝牙4.0设备都是通过服务和特征来展示自己的,一个设备必然包含一个或多个服务,一个服务包含若干个特征,特征是是外界交互的最小单元,服务和特征都是用UUID唯一标示的。

    外围设备(蓝牙)和中央设备(手机)交互的桥梁是服务和特征,两个都有一个唯一标识CBUUID来确定一个服务或者特征:

    外围设备CBPeripheral介绍:

      属性:id,name,state

      其中state状态有:未连接、已连接、正在连接、正在取消连接

      CBPeripheral实例:<CBPeripheral: 0x17577a50, identifier = 8B85D3FF-D73A-469A-BFE8-60A8FA9B4C76, name = Meizu H1, state = connected>

    需求

    文档要求

    Apple APP 主页面 设备搜索及配对
    门状态显示
    显示开锁滑条(按键)
    设置页面 名称修改
    密码修改
    开锁模式选择 滑动开锁
    密码开锁
    电容感触开锁
    删除设备
    帮助页面  

     

     

    其他功能要求

    1、一个手机app可同时控制20把锁;(此功能暂时定7个)

    2、蓝牙与锁必须一一对应,默认首次配对用户为本锁的管理者;

    3、管理者只要与锁连接,手机APP就会显示所有配对设备的ID信息;

    4、管理者可根据需求增加或者删减配对设备;

    5、管理者可以在手机上禁止配对新的蓝牙设备;

    6、APP可以在手机上储存锁活动的日期和时间;

    7、APP储存的日志可以记录开锁方式、时间、ID等信息;

    8、APP基本操作说明

    9、中英文切换;

    手机端工作流程

    手机端创建一个管理者manage

    手机端将搜到的蓝牙锁赋值给对象peripheral

    发现设备、建立连接、查看服务、查看特征,读写操作

    即 手机探测到蓝牙锁、手机主动和蓝牙锁建立物理连接、peripheral查看自己的某些service、peripheral查看该service下面的某些特征、从蓝牙锁里读取或修改特征信息

    1、manage 开始扫描外围设备

        [manage scanForPeripheralsWithServices:uuid数组 options:options]  

      1)搜索特定指定设备:第一个参数传服务uuid数组

      2)搜索所有特设备,第一个参数传nil

    2、手机端收到扫到一批设备peripheral,根据条件筛选部分peripheral,对其进行连接

      //之前没保存过外设,将其保存;之前保存过,则只修改rssi

      [manage connectPeripheral:peripheral options:nil];

    4、连接到peripheral时,手机端收到响应,然后peripheral搜索服务

       [peripheral discoverServices:nil]  传uuid则搜索指定服务,传nil搜多所有服务

    6、连接到服务后,手机端收到响应,根据某些条件,筛选出特定服务,然后搜索特征

       [peripheral discoverCharacteristics:nil forService:service];

    7、搜到特征后,手机端收到响应、然后手机端可对特征进行读/写操作

      [peripheral readValueForCharacteristic:characteristic];

          [peripheral writeValue:<#(nonnull NSData *)#> forCharacteristic:<#(nonnull CBCharacteristic *)#> type:<#(CBCharacteristicWriteType)#

     技术细节探讨

    关于数据更新问题:

    起个定时器,对已扫描的设备执行scanForPeripherals,

    1、更新已连接的设备数组

    2、对新扫描的蓝牙设备进行处理,新加入,还是对旧信息的rssi更新

    既完成了对rssi的检测,又确保断开的锁被重新连上

    以上操作可以解决两个问题

    1、有些已连接设备断了,可以重新连上。2、可以更新已连接设备的信号强度。

    根据UUID查询某些设备是否连接:

    connectedPeripherals = [self.bluetoothManager retrievePeripheralsWithIdentifiers:@[self.filterUUID]];

    改方法什么场景下使用?1、在扫描前,先产看下某些设备的连接情况。2、跟数据更新有关,在特定情况下,检查已连接设备是否还连接着,结合定时器使用?

    完成一次交互的过程

    手机相当于客户端

    蓝牙相当于服务器

    1、扫描设备,并连接:物理上的连接成功

    2、向外围设备声明用户需要哪些服务

    3、向某个服务声明要进行某些个具体交互:[managel discoverCharacteristics:nil forService:uartService];

    4、手机收到外围设备返回来的特征信息,即可进行读写操作

    操作流程

    1、手机搜索蓝牙

    2、读取蓝牙数据,如果该蓝牙无管理者,将其设为管理者,并在本地记录

    3、第二次连接蓝牙,显示锁的状态

    4、管理者对蓝牙进行开关操作

    如何开锁?

      向指定设备发送连接,搜索服务,搜索特征值,然后向蓝牙发送数据(写入数据),失去设备连接

    如何上锁?

      管理者带着特定参数访问蓝牙

    问题

    1、同时控制7把锁

    ios连接蓝牙设备最多7个

    2、如何区分该蓝牙为初始状态,如何将手机设置管理为蓝牙的管理者

      设想:读取蓝牙特征信息,若为初始值,对蓝牙进行写入操作,改变某些属性,并在手机端记录本手机是该蓝牙的管理者。

    3、页面的设计要重来吗,素材

    4、文档需求与原app的功能的如何取舍

    5、提供测试设备

    关于测试:

    1、物理按键重置安全性?如果不能轻易重置蓝牙锁,app端如何反复进行测试。

    参考

    Git:YmsCoreBluetooth

    iOS CoreBluetooth 的使用讲解    iOS学习笔记30-系统服务(三)蓝牙    

    低功耗蓝牙 4.0 可以同时连接多少个蓝牙设备,可以同时与多少个蓝牙设备进行数据通讯和传输?

    蓝牙RSSI计算距离    ios连接蓝牙设备最多7个

  • 相关阅读:
    [滤镜]的firefox兼容问题
    软件编程中的21条法则
    程序员!你应该读别人的心得,但是一定要自己注解
    致橡树——舒婷
    高级动物
    终于把网站最后一个模块了结了
    终于解决了网站程序中的问题
    北京杂种
    博客园驻小窝
    Eval函数
  • 原文地址:https://www.cnblogs.com/liyonghua/p/8360609.html
Copyright © 2011-2022 走看看