MTSensorKit说明文档

本套SDK仅支持Minew公司出品的蓝牙Sensor设备,目前是温湿度传感器和门磁传感器。通过SDK可以帮助开发者处理手机和Sensor之间的一切工作,包括:扫描设备,连接设备,向设备写入数据,从设备接收数据等。

前期工作

整体框架:MTCentralManager为设备管理类,在APP运行时始终是单例。MTPeripheral是设备实例类,此套件会为每一个设备生成一个MTPeripheral实例以便于对监听设备和操作设备。

MTCentralManager:设备管理类,可以扫描周围的Sensor设备,并且可以连接它们,校验它们等。

MTPeripheral:设备实例类,当MTCentralManager发现一个物理设备时,MTCentralManager会生成一个MTPeripheral实例,这个实例就对应一个物理设备。

MTBroadcastHandler:设备广播类,可以获取设备广播时的数据。

MTConnectionHandler:设备连接类,进行设备的接发数据。

MTUtils:写入数据指令。

开始上手

开发环境:
  • Xcode10+,当前SDK使用Xcode11编译,请使用Xcode10及以上版本进行开发;
  • iOS11,限制最低系统版本为iOS11;
导入到工程:
  1. CocoaPods

    MTSensorKit可通过CocoaPods获得。要安装它,只需将以下行添加到您的Podfile中,然后导入 <MTSensorKit/MTSensorKit.h>:

    pod 'MTSensorKit'
    
    1
  2. 手动导入

    • 将开发套件的文件:MTSensorKit.framework文件拷贝到项目工程目录下,然后添加到项目中。

PS:

  1. !!!在iOS10及以上版本,苹果对蓝牙APi添加了权限限制,你需要在工程的info.plist文件里添加一项字符串:Privacy - Bluetooth Peripheral Usage Description - "你的使用描述"。
  2. !!!在iOS13及以上版本,苹果对蓝牙APi添加了权限限制,你需要在工程的info.plist文件里添加一项字符串:Privacy - Bluetooth Always Usage Description - "你的使用描述"。

开始开发

扫描设备

首先需要获取到MTCentralManager的单例,然后检查手机当前的蓝牙状态,接着就可以进行设备扫描了。

// 获取Manager单例
MTCentralManager *manager = [MTCentralManager sharedInstance];

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
    // 手机端当前的蓝牙开关状态
    if(self->manager.status == PowerStatePoweredOn) {
        // 开始进行设备扫描
        [manager startScan:^(NSArray<MTPeripheral *> *peripherals) {
          //可根据broadcast属性的type筛选所需要的传感器种类
        	self->deviceAry = peripherals;
    	}];
    }
});
//扫描到的设备也可以使用manager.scannedPeris获得

// 如果你需要对手机的蓝牙状态作出响应。请监听回调。
[manager didChangesBluetoothStatus:^(PowerState status){
    
    switch(status) {
        case PowerStatePoweredOn:
            NSLog(@"bluetooth status change to poweron");
            break;
        case PowerStatePoweredOff:
            NSLog(@"bluetooth status change to poweroff");
            break;
        case PowerStateUnknown:
            NSLog(@"bluetooth status change to unknown");
    }
}];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

PS: 只有手机蓝牙状态处于Poweron时,整个SDK才能够正常工作。

连接到设备
// 从上一步能够获取到扫描到的设备
MTPeripheral *device = deviceAry[0];
//连接设备
[manager connectToPeriperal:device];
// 监听设备连接状态。
[p.connector didChangeConnection:^(Connection connection) {
    if (connection == Vaildated) {
      	//验证成功,成功连接设备
        NSLog(@"vaildated");
      	//需要写入密码,密码验证成功后进行其他的操作
    }
    if (connection == Disconnected) {
        NSLog(@"device has disconnected.");
    }
}];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
向设备写入数据

接上一步,当手机成功与某个设备建立连接验证成功后,就可以对设备进行读写操作了。

  1. 写入数据

    //通过MTUtils获取相应的指令数据,例如
    NSData *data = [MTUtils verficationPassword:@"123456"];
    
    [self->_per.connector writeData:data completion:^(BOOL success, NSError * _Nonnull error) {
        if (error) {
            NSLog(@"write data failed:%@",error);
        }
        else {
            NSLog(@"write data success");
        }
    }];
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
  2. 接收数据

    [_per.connector didReceiveData:^(NSData * _Nonnull data) {
        if (data) {
            NSLog(@"receive data success:%@",data);
         }
         else {
            NSLog(@"receive data failed");
         }
        }
    }];
    
    1
    2
    3
    4
    5
    6
    7
    8
    9

附表

MTCentralManager 属性说明
名称 类型 备注
state PowerState 当前的手机蓝牙状态
scannedPeris NSArray 扫描到的设备
MTPeripheral属性说明
名称 类型 备注
identifier NSString 设备的Identifier
broadcast MTBroadcastHandler 广播类实例对象
connector MTConnectionHandler 连接类实例对象
MTBroadcastHanler属性说明
名称 类型 备注
name NSString 设备的蓝牙名称
rssi NSInteger 设备的RSSI
battery NSString 设备的电池电量
mac NSString 设备的Mac地址
identifier NSString 设备的识别码
temp double 设备温度
humi double 设备湿度
reseInfo uint8_t 设备温度单位标识符
type SensorType 设备类型
doorStatus NSString 门磁设备门磁状态
warningStatus uint8_t 设备报警状态
MTConnectionHandler属性说明
名称 类型 备注
macString NSString 设备Mac地址
connection Connection 设备连接状态
上次更新:: 2021/1/19下午3:31:48