# 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获得 (opens new window)。要安装它,只需将以下行添加到您的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 设备连接状态
上次更新:: 2024/1/12 14:37:29