# 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;
# 导入到工程:
CocoaPods
MTSensorKit可通过CocoaPods获得 (opens new window)。要安装它,只需将以下行添加到您的Podfile中,然后导入 <MTSensorKit/MTSensorKit.h>:
pod 'MTSensorKit'
1手动导入
- 将开发套件的文件:MTSensorKit.framework文件拷贝到项目工程目录下,然后添加到项目中。
PS:
- !!!在iOS10及以上版本,苹果对蓝牙APi添加了权限限制,你需要在工程的info.plist文件里添加一项字符串:Privacy - Bluetooth Peripheral Usage Description - "你的使用描述"。
- !!!在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
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 向设备写入数据
接上一步,当手机成功与某个设备建立连接验证成功后,就可以对设备进行读写操作了。
写入数据
//通过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接收数据
[_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 | 设备连接状态 |