Giter Club home page Giter Club logo

easybluetooth's Introduction

EasyBluetooth

一款iOS BLE蓝牙调试工具,非常简单容易,也可以作为一个蓝牙库,快速集成和开发。 可以两步搞定蓝牙开发操作。 第一步连接设备,第二步特征读写数据。

Preview

image image

image image

使用方法

*(第一步)参数配置<这一步可以省略>

*(第二步)扫描并连接设备

*(第三步)读写操作

(第一步)参数配置

参数讲解(如下参数都可不传)

note:如果传入线程,那么返回数据的UI操作需要放到主线程上
@property (nonatomic,strong)dispatch_queue_t managerQueue ;

CBCentralManagerOptionShowPowerAlertKey  默认为NO,系统当蓝牙关闭时是否弹出一个警告框
CBCentralManagerOptionRestoreIdentifierKey 系统被杀死,重新恢复centermanager的ID
@property (nonatomic,strong)NSDictionary *managerDictionary ;

CBCentralManagerScanOptionAllowDuplicatesKey  默认为NO,过滤功能是否启用,每次寻找都会合并相同的peripheral。如果设备YES的话每次都能接受到来自peripherals的广播包数据。
CBCentralManagerScanOptionSolicitedServiceUUIDsKey  想要扫描的服务的UUID,以一个数组的形式存在。扫描的时候只会扫描到包含这些UUID的设备。
@property (nonatomic,strong)NSDictionary *scanOptions ;

连接设备所需的服务.
@property (nonatomic,strong)NSArray *scanServiceArray ;

CBConnectPeripheralOptionNotifyOnConnectionKey    默认为NO,APP被挂起时,这时如果连接到peripheral时,是否要给APP一个提示框。
CBConnectPeripheralOptionNotifyOnDisconnectionKey 默认为NO,APP被挂起时,恰好在这个时候断开连接,要不要给APP一个断开提示。 
CBConnectPeripheralOptionNotifyOnNotificationKey  默认为NO,APP被挂起时,是否接受到所有的来自peripheral的包都要弹出提示框。
@property (nonatomic,strong)NSDictionary *connectOptions ;//连接设备时所带的条件`

扫描所需时间。默认为永久
@property (nonatomic,assign)NSUInteger scanTimeOut ;

连接设备最大时长 默认为5秒
@property (nonatomic,assign)NSUInteger connectTimeOut ;

断开连接后重新连接
@property (nonatomic,assign)BOOL autoConnectAfterDisconnect ;

获取单例,并赋值配置信息

/**
 * 获取单例
*/
 + (instancetype)shareInstance ;
/**
 * 创建配置信息
 */
EasyManagerOptions *options = [EasyManagerOptions alloc]init];
options.autoConnectAfterDisconnect - YES ;
options.connectTimeOut = 6 ;
/**
 * 设置配置信息
 */
 [EasyBlueToothManager shareInstance].managerOptions = options ;

(第二步)扫描并连接设备

场景1,扫描设备名称后直接连接设备

/**
 * 连接一个已知名字的设备
 * name 设备名称
 * callback 连接设备的回调信息
 */
- (void)scanAndConnectDeviceWithName:(NSString *)name
                            callback:(blueToothScanCallback)callback ;

场景2,扫描设备后选择一些符合规则的设备后连接

/**
 * 连接一个一定规则的设备,依据peripheral里面的名称,广播数据,RSSI来赛选需要的连接的设备
 * name 设备名称
 * callback 连接设备的回调信息
 */
- (void)scanAndConnectDeviceWithRule:(blueToothScanRule)rule
                            callback:(blueToothScanCallback)callback ;

场景3,需要保存设备,然后直接连接单个设备

1,先扫描符合规则的设备 选择一个保存设备的uuid到本地
/**
 * 根据规则扫描符合名称的所有设备
 */
- (void)scanAllDeviceWithRule:(blueToothScanRule)rule
                     callback:(blueToothScanAllCallback)callback ;
2,取出上一步中保存的uuid直接连接
/**
 * 连接一个确定ID的设备,一般此ID可以保存在本地。然后直接连接
 * name 设备名称
 * callback 连接设备的回调信息
 */
- (void)scanAndConnectDeviceWithIdentifier:(NSString *)identifier
                                  callback:(blueToothScanCallback)callback ;

场景4,单纯的操作一些设备信息,可以采用一行代码

/**
 * 一行代码连接所有的设备
 * name         一直设别的名称
 * serviceuuid  服务id
 * notifyuuid   监听端口的id
 * writeuuid    写数据的id
 * data         需要发送给设备的数据
 * callback     回调信息
 */
- (void)connectDeviceWithName:(NSString *)name
                  serviceUUID:(NSString *)serviceUUID
                   notifyUUID:(NSString *)notifyUUID
                    wirteUUID:(NSString *)writeUUID
                    writeData:(NSData *)data
                     callback:(blueToothOperationCallback)callback;

场景5,需要连接多个设备

/**
 * 连接已知名称的所有设备(返回的是一组此名称的设备全部连接成功)
 * name 设备名称
 * callback 连接设备的回调信息
 */
- (void)scanAndConnectAllDeviceWithName:(NSString *)name
                               callback:(blueToothScanAllCallback)callback ;

/**
 * 连接已知规则的全部设备(返回的是一组此名称的设备全部连接成功)
 * name 设备名称
 * callback 连接设备的回调信息
 */
- (void)scanAndConnectAllDeviceWithRule:(blueToothScanRule)rule
                               callback:(blueToothScanAllCallback)callback ;

(第三步)读写操作

写数据

/**
 * peripheral 写数据的设备
 * data  需要写入的数据
 * uuid 数据需要写入到哪个特征下面
 * writeCallback 写入数据后的回调
 */
- (void)writeDataWithPeripheral:(EasyPeripheral *)peripheral
                    serviceUUID:(NSString *)serviceUUID
                      writeUUID:(NSString *)writeUUID
                           data:(NSData *)data
                       callback:(blueToothOperationCallback)callback ;

读数据

/**
 * peripheral 写数据的设备
 * uuid 需要读取数据的特征
 * writeCallback 读取数据后的回调
 */
- (void)readValueWithPeripheral:(EasyPeripheral *)peripheral
                    serviceUUID:(NSString *)serviceUUID
                       readUUID:(NSString *)uuid
                       callback:(blueToothOperationCallback)callback ;

监听特征

 建议此方法放在读写操作的前面
/**
 * peripheral 写数据的设备
 * uuid 需要监听的特征值
 * writeCallback 读取数据后的回调
 */
- (void)notifyDataWithPeripheral:(EasyPeripheral *)peripheral
                     serviceUUID:(NSString *)serviceUUID
                      notifyUUID:(NSString *)notifyUUID
                     notifyValue:(BOOL)notifyValue
                    withCallback:(blueToothOperationCallback )callback ;

蓝牙学习资料

联系作者

如果在使用过程中遇到任务问题,或者发现使用不够恰当。希望能Issues我。

email: [email protected]

easybluetooth's People

Contributors

chenliangloveyou avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

easybluetooth's Issues

写数据一直不成功

在写数据时,2018-01-14 18:55:23.309848+0800 EasyBlueTooth[732:135403] 写 特征的回调: FFE1 error:Error Domain=CBATTErrorDomain Code=3 "Writing is not permitted." UserInfo={NSLocalizedDescription=Writing is not permitted.}
2018-01-14 18:55:23.310513+0800 EasyBlueTooth[732:135403] <00000000 00000000 00000000 00000000 00000000> -- Error Domain=CBATTErrorDomain Code=9 "(null)"

大神,我设置autoConnectAfterDisconnect这个值没有效果

image

autoConnectAfterDisconnect 我设置断线重连为NO,回调的错误码是bluetoothErrorStateDisconnect重新开启设备还是能自动重连,设置YES回调的是bluetoothErrorStateDisconnectTring,
我看源代码逻辑有没看出问题
image

重开设备有时一直回调这个方法,已经连接成功隔几秒又走一次又提示连接成功,无限循环了,根本停不下来
#pragma mark - connect peripheral

  • (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral
    {
    EasyLog_R(@"蓝牙连接上一个设备:%@ , %@",peripheral,peripheral.identifier);

    EasyPeripheral *existedP = nil ;
    for (NSString *tempIden in [self.connectedDeviceDict allKeys]) {
    if ([tempIden isEqualToString:peripheral.identifier.UUIDString]) {
    existedP = self.connectedDeviceDict[tempIden] ;
    break ;
    }
    }

    if (!existedP) {
    for (NSString *tempIden in [self.foundDeviceDict allKeys]) {
    if ([tempIden isEqualToString:peripheral.identifier.UUIDString]) {
    existedP = self.foundDeviceDict[tempIden] ;
    break ;
    }
    }

      if (existedP) {
          [self.connectedDeviceDict setObject:existedP forKey:peripheral.identifier.UUIDString];
      }
      else{
          existedP = [[EasyPeripheral alloc]initWithPeripheral:peripheral central:self];
          [self.connectedDeviceDict setObject:existedP forKey:peripheral.identifier.UUIDString];
          if (_blueToothSearchDeviceCallback) {
              _blueToothSearchDeviceCallback(existedP,searchFlagTypeAdded);
          }
          [self.foundDeviceDict setObject:existedP forKey:peripheral.identifier.UUIDString];
      }
    

    }
    [existedP dealDeviceConnectWithError:nil];

}

图片上传一直失败

有空能看看吗

CBCharacteristicWriteWithoutResponse怎么操作

老哥,[_bleManager writeDataWithPeripheral:self.peripheral serviceUUID:@"0xFFE0" writeUUID:@"0xFFE1" data:D callback:nil];
传nil好像不管用
看到代码这里选择TYPE
CBCharacteristicWriteType writeType = callback ? CBCharacteristicWriteWithResponse : CBCharacteristicWriteWithoutResponse ;

回调了两次订阅消息

用lightblue订阅特征发送命令,收到一次回调,但是用easybluetooth时收到两次回调,我们是连接了两个一样的设备,是什么原因导致的呢

蓝牙交流

遇到蓝牙的问题很多,准备建个群一块讨论,感兴趣的话,大家可以加我QQ: 929097264

重连设备没有回调

设备断开连接,在“connectDeviceWithPeripheral:(EasyPeripheral *)peripheral
callback:(blueToothConnectCallback)callback”方法中获取到回调,在获取断开的时候,在调用该方法去重连,收不到回调

搜索不到外设

iOS 11 系统, iPhone X ,搜索不到周边外社怎么回事呢,跑demo也搜索不到外设

1

连接蓝牙之后的操作基本没有。读特征读service都没有,方法写的一塌糊涂,参数也是乱七八糟看不懂

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.