项目作者: ymzgithub

项目描述 :
BLE 蓝牙低功耗 好用的SDK
高级语言: Objective-C
项目地址: git://github.com/ymzgithub/BLESDK.git
创建时间: 2017-12-06T09:08:01Z
项目社区:https://github.com/ymzgithub/BLESDK

开源协议:MIT License

下载


BLESDK

BLE 蓝牙低功耗 灵活好用的SDK

特点

  • 能快速集成到现有工程
  • 容易理解
  • 代码很少
  • 非单例设计(多种不同类型的外设分开处理,简化逻辑便于维护)
  • 想要的功能随自己扩展(只需继承下已提供外设基类)

中心设备(客户端)

功能

搜索蓝牙BLE外设
  • 可选指定特殊服务ID搜索
  • 可选指定外设名称子串搜索
  • 记录所有已搜索的设备便于展示
长数据发送分包发送(不分包会发送失败)
  • 可指定分包长度
可靠地发送结果回调
  • 发送成功回调
  • 发送失败回调
命令发送(同一特征值,不支持在没拿到返回时继续发送另一个命令)
  • 对外设发送无返回命令
  • 对外设发送有返回命令,并拿到返回值
读取指定特征值
  • block直接返回特征值
可选设置异常断开重连
中心设备接入指南

一、自定义外设管理器

推荐创建一个单例类并持有一个中心设备管理器YMZBLEManager对象,以下均按这种思路设计,当然最终实现看自己的想法

以demo为例:

  1. @interface YMZPrinterManager()<CHDBLEManagerDelegate, CHDBLEManagerDatasource>
  2. @property (nonatomic, strong) YMZBLEManager *manager;
  3. @end

YMZPrinterManager持有YMZBLEManager对象并遵守 CHDBLEManagerDelegate、 CHDBLEManagerDatasource协议

  1. @protocol CHDBLEManagerDelegate <NSObject>
  2. @required
  3. //central.state == CBManagerStatePoweredOn 才能发起搜索
  4. - (void)BLEManager:(YMZBLEManager *)BLEManager centralManagerDidUpdateState:(CBCentralManager *)central;
  5. - (void)BLEManager:(YMZBLEManager *)BLEManager didDiscoverDevice:(id<YMZBLEDeviceProtocol, CBPeripheralDelegate>)device;
  6. @optional
  7. @end
  8. @protocol CHDBLEManagerDatasource <NSObject>
  9. @required
  10. /*! 在这里返回 遵守CHDDeviceProtocol,CBPeripheralDelegate 协议的外设对象*/
  11. - (id<YMZBLEDeviceProtocol, CBPeripheralDelegate>)BLEManager:(YMZBLEManager *)BLEManager conversionCustomDeviceInstanceWithPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary<NSString *, id> *)advertisementData RSSI:(NSNumber *)RSSI;
  12. @optional
  13. /*! 设备名称包含的字符数组 设备名称包含 数组指定的其中一个子串才能放进已搜索设备*/
  14. - (NSArray<NSString *> *)deviceNameContainSubStringArray;
  15. /*! 搜索服务的UUID数组*/
  16. - (NSArray<CBUUID *> *)deviceServiceUUIDs:(id<YMZBLEDeviceProtocol>)device;
  17. - (NSArray<CBUUID *> *)discoverCharacteristics:(CBService *)service;
  18. /*! 有新的设备已连接*/
  19. - (void)BLEManager:(YMZBLEManager *)BLEManager didConnictedDevice:(id<YMZBLEDeviceProtocol>)device;
  20. @end

实现必须实现的required协议方法
实现非必须optional协议方法扩展功能

二、自定义外设对象
自定义外设对象YMZPrinter继承自YMZBaseBLEDevice

已demo为例:

实现几个实用方法

  1. @interface YMZPrinter : YMZBaseBLEDevice
  2. /**
  3. 分包发送数据
  4. @param data 要发的数据
  5. @param writeDataBlock 写数据完成、失败回调
  6. */
  7. - (void)subcontractWriteValue:(NSData *_Nonnull)data writeDataBlock:(YMZWriteDataBlock _Nullable)writeDataBlock;
  8. /**
  9. 发送带返回值的命令
  10. @param command 命令数据
  11. @param writeDataBlock 写命令完成、失败回调
  12. @param responseBlock 硬件响应信息
  13. */
  14. - (void)writeCommand:(NSData *_Nonnull)command writeDataBlock:(YMZWriteDataBlock _Nullable)writeDataBlock responseBlock:(YMZResponseBlock _Nullable)responseBlock;
  15. /**
  16. 读数据
  17. @param responseBlock 响应信息
  18. */
  19. - (void)readDataWithResponseBlock:(YMZResponseBlock _Nullable )responseBlock;
  20. @end

三、接入
1、创建YMZPrinterManager实例

  1. ///创建并强引用一个YMZPrinterManager实例,如果你设计的是单例就不用强引用了
  2. self.printerManager = [[YMZPrinterManager alloc]initWithDelegate:self];

2、实现代理方法 当有新设备被搜到时被调用

  1. - (void)printerManager:(YMZPrinterManager *)printerManager didDiscoverDevice:(id<YMZBLEDeviceProtocol, CBPeripheralDelegate>)device {
  2. dispatch_sync(dispatch_get_main_queue(), ^{
  3. [self.tableView reloadData];
  4. });
  5. }

2、实现
已经接好了!!

中心设备API使用

1、基本属性和方法 以协议方式给出

  1. @protocol YMZBLEDeviceProtocol <NSObject>
  2. NS_ASSUME_NONNULL_BEGIN
  3. @required
  4. @property (nonatomic, strong) CBPeripheral *peripheral;
  5. /*! 对中心设备的一个引用*/
  6. @property (nonatomic, weak) CBCentralManager *centralManager;
  7. NS_ASSUME_NONNULL_END
  8. /*! 异常断开重连 默认 NO 手动断开时请先赋值为NO防止断开后重新连接 ⚠️:手动调用断开时会被置为NO,如需保持自动重连请在连接前赋值YES*/
  9. @property (nonatomic, assign) BOOL reconnect;
  10. @optional
  11. /*! 发起连接*/
  12. - (void)connectWithResultBlock:(ConnectBlock _Nullable )resultBlock;
  13. /*! 断开连接*/
  14. - (void)disConnectWithResultBlock:(DisconnectBlock _Nullable )resultBlock;
  15. /*! 配置需要的特征 必须实现并正确配置*/
  16. - (void)configCharacteristicsWithService:(CBService *_Nonnull)service;
  17. /*! 连接成功*/
  18. - (void)didConnected;
  19. /*! 连接失败*/
  20. - (void)didFailToConnect;
  21. /*! 已断开*/
  22. - (void)didDisConnected;
  23. /*! 已接收到characteristic属性更新的数据*/
  24. - (void)didUpdateValueForCharacteristic:(CBCharacteristic *_Nonnull)characteristic error:(NSError *_Nullable)error;
  25. - (NSArray<CBUUID *> *_Nullable)servicesUUID;
  26. @end

2、设备基类YMZBaseBLEDevice扩展方法

  1. @interface YMZBaseBLEDevice : NSObject<YMZBLEDeviceProtocol, CBPeripheralDelegate>
  2. /**
  3. 分包发送数据
  4. @param characteristic 指定的特征
  5. @param data 要发的数据
  6. @param writeDataBlock 写数据完成、失败回调 回调在非UI线程 需要刷新UI请切换UI线程
  7. */
  8. - (void)subcontractWriteValueToCharacteristic:(CBCharacteristic *_Nonnull)characteristic value:(NSData *_Nonnull)data writeDataBlock:(YMZWriteDataBlock _Nullable)writeDataBlock;
  9. /**
  10. 发送带返回值的命令
  11. @param characteristic 指定的特征
  12. @param command 命令数据
  13. @param writeDataBlock 写命令完成、失败回调 回调在非UI线程 需要刷新UI请切换UI线程
  14. @param responseBlock 硬件响应信息 回调在非UI线程 需要刷新UI请切换UI线程
  15. */
  16. - (void)writeCommandToCharacteristic:(CBCharacteristic *_Nonnull)characteristic command:(NSData *_Nonnull)command writeDataBlock:(YMZWriteDataBlock _Nullable)writeDataBlock responseBlock:(YMZResponseBlock _Nullable)responseBlock;
  17. /*! */
  18. /**
  19. 读指定特征的值
  20. @param characteristic 指定的特征
  21. @param responseBlock 读到值的回调
  22. */
  23. - (void)readValueForCharacteristic:(CBCharacteristic *_Nonnull)characteristic responseBlock:(YMZResponseBlock _Nullable )responseBlock;
  24. @end

外设(服务端)