最近, 楼主刚研究了一下蓝牙.与大家分享一下其简单原理, 对有些小伙伴会有帮助;
这里有一个蓝牙的实例demo可以供参考:
git地址: https://github.com/lsj90215/LSJBluetoothTest.git
github地址: https://github.com/lsj90215/LSJBluetoothTest
注: 此demo必须在真机上运行, 必须两台iPhone分别当外设端和中心端来体验demo.
下面, 我们说一下原理:
蓝牙有两个最主要的组成部分: 中心端: Central -- 手机 和 外设端: Peripheral -- 硬件设备
蓝牙交互大致如下几个步骤:
1, 建立链接: 外设端: Peripheral会不断向四周发送蓝牙信息
中心端: Central在创建之后, 会调用方法进行扫描周围的蓝牙设备, 如果方法内没有填写固定的蓝牙设备UUID, 则会扫描周围所有的蓝牙设备.
当中心端: Central扫描到外设端: Peripheral之后, 会建立链接, 然后中心端: Central会关闭扫描, 同时外设端: Peripheral也会停止向外部发送蓝牙信息.
2, 传递数据: (其实代码操作起来, 就是在建立链接之后, 会不停的调用代理协议方法, 进行下一步操作.)
首先, 外设端: Peripheral 即蓝牙设备, 都会具有三个功能: 读取, 写入, 订阅特征
中心端: Central要传数据给外设端: Peripheral, 需要将自己要传递的数据打包好, 然后通过 "写入" 的数据包传递给外设端: Peripheral. 然后外设端: Peripheral 会根据接收到的数据进行判断, 然后做出相应的反应.(这些代码都是硬件设备开发厂商写的了.)
而外设端: Peripheral传递数据给中心端, 就要中心端:Central通过 蓝牙设备的读取功能, 获取到数据, 然后进行判断.
当然, 以上这些数据的传输, 都会进行加密, 以保证传输的安全性.
基本, 开发移动端的APP, 所使用到的功能 也就上面两种了.
楼主认为, 蓝牙不难, 难在一般的硬件厂商不让自己的信息外泄, 没那么多开源.