蓝牙使用
本地蓝牙
本地蓝牙相关的所有功能对应IOTSmartBlueTooth类(单例)。
搜索设备
可选择搜索全部设备和通过设备名称进行搜索,当FuzzyName设置为nil时代表搜索全部设备,每搜索到一个设备就会调用一次success回调。
请求参数:
参数名 | 类型 | 说明 | 备注 | 必需 |
---|---|---|---|---|
FuzzyName | String | 设备名称(可为nil) | 模糊搜索设备 | 否 |
timeout | int | 搜索的超时时间 | 无 | 是 |
例子:
- (void)searchDevice{
[[IOTSmartBlueTooth shareInstance] IOTCloudSDK_searchWithFuzzyName: @"fuzzy_device_name" timeout: @"timeout" success:^(NSString * _Nonnull peripheralUUID, NSString * _Nonnull peripheralName) {
NSLog (@"search_success");
} failure:^(NSString * _Nonnull errMessage) {
NSLog (@"search_failure");
}];
}
连接设备
连接搜索到的设备,若未进行搜索,则SDK会默认执行一次搜索操作。连接成功即与设备绑定。若设备已连接,则直接返回连接成功。
请求参数:
参数名 | 类型 | 说明 | 备注 | 必需 |
---|---|---|---|---|
peripheralUUID | String | 设备的uuid | 无 | 是 |
userId | int | 用户Id | 无 | 是 |
productId | int | 设备所属产品的Id | 与相应设备烧录时写入的一样。 | 是 |
productKey | String | 设备所属产品的Key | 16个字节的十六进制字符串,与相应设备烧录时写入的一样。 | 是 |
例子:
- (void)connDevice{
[[IOTSmartBlueTooth shareInstance] IOTCloudSDK_connectWithPeripheralUUID: @"peripheral_uuid" userId:@"your_userId" productId:@"your_productId" productKey: @"your_productKey" success:^{
NSLog (@"connection_device_success");
} failure:^(NSString * _Nonnull errMessage) {
NSLog (@"connection_device_failure");
}];
}
断开连接
断开已经连接的设备。若设备原本就未连接,则直接返回断开成功。
请求参数:
参数名 | 类型 | 说明 | 备注 | 必需 |
---|---|---|---|---|
peripheralUUID | String | 设备的uuid | 无 | 是 |
例子:
- (void)disConnection{
[[IOTSmartBlueTooth shareInstance] IOTCloudSDK_disConnectWithPeripheralUUID:@"peripheral_uuid" success:^ {
NSLog (@"disConnection_success");
} failure:^(NSString * _Nonnull errMessage) {
NSLog (@"disConnection_failure");
}];
}
发送透传消息
连接设备后才能给设备发送二进制透传消息。
请求参数:
参数名 | 类型 | 说明 | 备注 | 必需 |
---|---|---|---|---|
peripheralUUID | String | 设备的uuid | 无 | 是 |
publishData | NSData | 要发送给设备的数据 | 无 | 是 |
例子:
- (void)pushData {
[[IOTSmartBlueTooth shareInstance] IOTCloudSDK_publishData:@"pushData" peripheralUUID: @"peripheral_uuid" success:^ {
NSLog (@"publishData_success");
} failure:^(NSString * _Nonnull errMessage) {
NSLog (@"publishData_failure");
}];
}
下发数据点信息
连接设备后能够向设备发送数据点信息。数据点相关信息请参见IOTBlueToothSDK.framework中的IOTSmartBlueToothDPModel类。
请求参数:
参数名 | 类型 | 说明 | 备注 | 必需 |
---|---|---|---|---|
peripheralUUID | String | 设备的uuid | 无 | 是 |
dpArr | NSArray | 存放数据点对象的数组 | 只能存放数据点对象 | 是 |
例子:
- (void)pushDps {
[[IOTSmartBlueTooth shareInstance] IOTCloudSDK_publishDps: @"dpArr " peripheralUUID: @"peripheral_uuid" success:^{
NSLog (@"publishDps_success");
} failure:^(NSString * _Nonnull errMessage) {
NSLog (@"publishDps_failure");
}];
}
发送解绑命令
app端主动解除设备与用户的绑定关系。前置条件是需要和设备先建立连接。
请求参数:
参数名 | 类型 | 说明 | 备注 | 必需 |
---|---|---|---|---|
peripheralUUID | String | 设备的uuid | 无 | 是 |
例子:
- (void)unbind {
[[IOTSmartBlueTooth shareInstance] IOTCloudSDK_unbindWithPeripheralUUID:@"peripheral_uuid" success:^{
NSLog (@"unbind_success");
} failure:^(NSString * _Nonnull errMessage) {
NSLog (@"unbind_failure");
}];
}
实时获取设备透传消息
实现IOTSmartBlueToothDelegate的IOTCloudSDK_peripheral:pushData:方法即可实时获取设备上传的二进制透传数据。
实时获取设备上报数据点
实现IOTSmartBlueToothDelegate的IOTCloudSDK_peripheral:uploadDps:方法即可实时获取设备发送的数据点对象的数组。
监听设备非正常断开及自动重连成功
当设备非正常断开后SDK会自动进行重连操作。手机端要监听设备非正常断开及自动重连成功。需将自身作为IOTSmartDeviceConnectionStatus通知的观察者,当设备非正常断开或SDK自动重连成功时SDK会给每个观察者发送通知,具体通知消息可从通知对象的userInfo中获取。(非正常断开:除了APP调用SDK提供的断开连接方法及设备主动解绑以外的所有原因导致的断开连接,都被认为是非正常断开)。
监听设备解除绑定
手机端要监听设备解绑消息。需将自身作为IOTSmartDeviceLaunchUnbind通知的观察者。当设备主动发起解绑时会提示用户已被解绑。注意:设备主动解绑是正常断开连接,SDK不会自动进行重连。
云端蓝牙
云端蓝牙拥有本地蓝牙的所有功能,并增加了蓝牙设备OTA升级相关的方法。其相应功能请参见IOTSmartCloudBlueTooth类(单例)。
初始化SDK
除本地蓝牙功能外的其他所有功能在使用之前都需要使用在青莲云官网注册的相关信息进行初始化,否则SDK将不可用。SDK初始化步骤如下:
1、在项目TAGETS—>Build Phases—>New Copy Files Phase下点击加号,加入IOTBlueToothSDK.framework和IOTSDK.framework。
2、在项目TAGETS—>Build Phases—>Link Binary With Libraries下点击加号,加入IOTBlueToothSDK.framework和IOTSDK.framework。
3、在项目的预编译文件PrefixHeader.pch中添加如下内容:
#import <IOTBlueToothSDK/IOTBlueToothSDK.h>
#import <IOTSDK/IOTSDK.h>
4、打开项目的AppDelegate.m文件,在application:didFinishLaunchingWithOptions:方法中使用青莲云开放平台获取的AppID、AppToken、CompanyID、CompanyToken进行初始化。初始化SDK需调用IOTSDK.framework中IOTSmartSDK.h中的蓝牙版初始化方法。
请求参数:
参数名 | 类型 | 说明 | 备注 | 必需 |
---|---|---|---|---|
companyID | String | 公司Id | 云平台获取 | 是 |
companyToken | String | 公司Token | 云平台获取 | 是 |
AppID | String | AppId | 云平台获取 | 是 |
AppToken | String | AppToken | 云平台获取 | 是 |
APIHost | String | 接口服务器域名地址 | 贵公司申请的域名 | 是 |
FileHost | String | 文件服务器域名地址 | 贵公司申请的域名 | 是 |
SocketHost | String | 长连接服务器域名地址 | 贵公司申请的域名 | 是 |
SocketPort | int | 长连接端口 | 贵公司申请的端口 | 是 |
例子:
[[IOTSmartSDK shareInstance] IOTCloudSDK_startAPPWithCompanyID: @"companyID" companyToken: @"companyToken" AppID: @"AppID" AppToken: @"AppToken" APIHost: @"APIHost" FileHost: @"FileHost" SocketHost: @"SocketHost" SocketPort: @"SocketPort" success:^{
NSLog (@"install_success");
} failure:^(int errNo, NSString *errMessage) {
NSLog (@"install_success");
}];
搜索设备
根据外设名称模糊搜索外部设备,要搜索全部可将deviceFuzzyName设置为@"",每搜索到一个设备就会调用一次success回调,返回设备UUID,设备名称,设备Mac地址。
请求参数:
参数名 | 类型 | 说明 | 备注 | 必需 |
---|---|---|---|---|
FuzzyName | String | 设备名称(可为nil) | 模糊搜索设备 | 否 |
timeout | int | 搜索的超时时间 | 无 | 是 |
例子:
- (void)searchDevice{
[[IOTSmartCloudBlueTooth shareInstance] IOTCloudSDK_searchWithFuzzyName: @"fuzzy_name " timeout: @"timeout" success: ^(NSString *peripheralUUID, NSString *peripheralName, NSString *peripheralMac){
NSLog (@"search_success");
} failure:^(NSString * _Nonnull errMessage) {
NSLog (@"search_failure");
}];
连接设备
连接搜索到的设备,若未进行搜索,则SDK会默认执行一次搜索操作。连接成功即与设备绑定并向云端提交绑定信息。若设备已连接,则直接返回连接成功。
请求参数:
参数名 | 类型 | 说明 | 备注 | 必需 |
---|---|---|---|---|
mac | String | 设备的mac | 无 | 是 |
productId | int | 设备所属产品的Id | 无 | 是 |
productKey | String | 设备所属产品的Key | 无 | 是 |
例子:
- (void)connDevice{
[[IOTSmartCloudBlueTooth shareInstance] IOTCloudSDK_connectWithPeripheralMac: @"peripheral_mac" productId:@" productId" productKey: @" productKey" success:^{
NSLog (@"connection_device_success");
} failure:^(NSString * _Nonnull errMessage) {
NSLog (@"connection_device_failure");
}];
}
断开连接
断开已经连接的设备。若设备原本就未连接,则直接返回断开成功。
请求参数:
参数名 | 类型 | 说明 | 备注 | 必需 |
---|---|---|---|---|
mac | String | 设备的mac | 无 | 是 |
例子:
- (void)disConnection{
[[IOTSmartCloudBlueTooth shareInstance] IOTCloudSDK_disConnectWithMac:@"peripheral_mac" success:^ {
NSLog (@"disConnection_success");
} failure:^(NSString * _Nonnull errMessage) {
NSLog (@"disConnection_failure");
}];
}
发送透传消息
连接设备后能够给设备发送二进制透传消息。即NSData类型的数据。
请求参数:
参数名 | 类型 | 说明 | 备注 | 必需 |
---|---|---|---|---|
mac | String | 设备的mac | 无 | 是 |
publishData | NSData | 要发送给设备的数据 | 无 | 是 |
例子:
- (void)pushData {
[[IOTSmartCloudBlueTooth shareInstance] IOTCloudSDK_publishData:@"pushData" mac: @"peripheral_mac" success:^ {
NSLog (@"publishData_success");
} failure:^(NSString * _Nonnull errMessage) {
NSLog (@"publishData_failure");
}];
}
下发数据点信息
连接设备后能够向设备发送数据点信息。数据点相关信息请参见IOTBlueToothSDK.framework中的IOTSmartBlueToothDPModel类。
请求参数:
参数名 | 类型 | 说明 | 备注 | 必需 |
---|---|---|---|---|
mac | String | 设备的mac | 无 | 是 |
dpArr | NSArray | 存放数据点对象的数组 | 只能存放数据点对象 | 是 |
例子:
- (void)pushDps {
[[IOTSmartCloudBlueTooth shareInstance] IOTCloudSDK_publishDps: @"dpArr " mac: @"peripheral_mac" success:^{
NSLog (@"publishDps_success");
} failure:^(NSString * _Nonnull errMessage) {
NSLog (@"publishDps_failure");
}];
}
发送解绑命令
APP端主动解除设备与用户的绑定关系。前置条件是需要和设备先建立连接。
请求参数:
参数名 | 类型 | 说明 | 备注 | 必需 |
---|---|---|---|---|
mac | String | 设备的mac | 无 | 是 |
例子:
- (void)unbind {
[[IOTSmartCloudBlueTooth shareInstance] IOTCloudSDK_unbindWithMac:@"peripheral_mac" success:^{
NSLog (@"unbind_success");
} failure:^(NSString * _Nonnull errMessage) {
NSLog (@"unbind_failure");
}];
}
设备OTA升级
设备的OTA升级过程可分为两步:一是下载OTA升级固件,二是向指定设备传输升级固件数据包。
下载OTA升级固件
APP在联网的情况下可从云端下载某设备最新版本的固件数据包到本地缓存中。
请求参数:
参数名 | 类型 | 说明 | 备注 | 必需 |
---|---|---|---|---|
productId | int | 设备所属产品的产品Id | 无 | 是 |
iotId | String | 要下载新版本的设备的iotId | 无 | 是 |
newVersion | String | 要下载固件的版本号 | 无 | 是 |
deviceType | int | 需要下载的固件类型 | 1:mcu 2:wifi 3:蓝牙 | 是 |
例子:
- (void)download{
[[IOTSmartCloudBlueTooth shareInstance] IOTCloudSDK_downloadDeviceNewVersionWithProductId: @"productId" iotId: @"iotId" newVersion: @"newVersion" deviceType: @"deviceType" success:^{
NSLog (@”download_success”);
} failure:^(NSString * _Nonnull errMessage) {
NSLog (@”download_failure”);
}];
}
开始传输OTA升级固件
APP向某个需要升级的设备传输OTA升级包,传输完成后设备会进行自动重启进行安装新的OTA固件完成升级。注意:必须先连接上该设备才能进行传输。
请求参数:
参数名 | 类型 | 说明 | 备注 | 必需 |
---|---|---|---|---|
mac | String | 要升级的设备的mac | 无 | 是 |
newVersion | String | 要升级的版本号 | 无 | 是 |
deviceType | int | 需要升级的固件类型 | 1:mcu 2:wifi 3:蓝牙 | 是 |
例子:
- (void) startTransfer{
[[IOTSmartCloudBlueTooth shareInstance] IOTCloudSDK_startTransferOTADataWithMac: @"mac" newVersion: @"newVersion" deviceType: @"deviceType" success: ^{
NSLog (@"startTransferOTAData");
} failure:^(NSString * _Nonnull errMessage) {
NSLog (@"start_failure");
}];
}
立即升级
当设备OTA传输完成后可调用此方法使设备重启并升级新版本。
请求参数:
参数名 | 类型 | 说明 | 备注 | 必需 |
---|---|---|---|---|
mac | String | 要升级的设备的mac | 无 | 是 |
newVersion | String | 要升级的版本号 | 无 | 是 |
deviceType | int | 需要升级的固件类型 | 1:mcu 2:wifi 3:蓝牙 | 是 |
timeout | int | 升级的超时时间 | 单位:秒 | 是 |
例子:
- (void) startUpgrade{
[[IOTSmartCloudBlueTooth shareInstance] IOTCloudSDK_upgradeImmediatelyWithMac: @"mac" newVersion: @"newVersion" deviceType: @"deviceType" timeout: @"timeout" success: ^{
NSLog (@"upgrade success");
} failure:^(NSString * **_Nonnull** errMessage) {
NSLog (@"upgrade failure");
}];
}
取消OTA传输或暂不升级
在进行2.8.2的OTA固件传输过程中可调用此方法取消OTA传输,或当OTA固件传输完成后用户暂时不想重启设备时调用。
请求参数:
参数名 | 类型 | 说明 | 备注 | 必需 |
---|---|---|---|---|
mac | String | 要升级的设备的mac | 无 | 是 |
deviceType | int | 设备的类型 | 无 | 是 |
例子:
- (void)cancelUpgrade{
[[IOTSmartCloudBlueTooth shareInstance] IOTCloudSDK_pauseOTAUpgradeWithMac: @"mac" deviceType: @"deviceType"];
}
获取某设备当前的OTA传输状态
此方法可获取到某个设备当前的OTA传输状态,有三种状态:未传输,传输中,传输完成。详情请见枚举类型IOTSmartCloudOTAProgress。
请求参数:
参数名 | 类型 | 说明 | 备注 | 必需 |
---|---|---|---|---|
mac | String | 查询传输状态的设备的mac | 无 | 是 |
例子:
- (NSInteger)getTransStatus {
NSInteger state = [[IOTSmartCloudBlueTooth shareInstance] IOTCloudSDK_getOTAProgressWithMac:@"mac"];
return state;
}
实时获取设备的透传消息
实现IOTSmartCloudBlueToothDelegate的IOTCloudSDK_mac: pushData:代理方法即可实时获取设备发送的透传信息。
实时获取设备上报数据点
实现IOTSmartCloudBlueToothDelegate的IOTCloudSDK_mac:uploadDps:代理方法即可实时获取设备上报的数据点数据。
监听设备非正常断开及自动重连成功
当设备非正常断开后SDK会自动进行重连操作。手机端要监听设备非正常断开及自动重连成功,需将自身作为IOTSmartDeviceCloudConnectionStatus通知的观察者,当设备非正常断开或SDK自动重连成功时SDK会给每个观察者发送通知,具体通知消息可从通知对象的userInfo中获取。(非正常断开:除了APP调用SDK提供的断开连接方法及设备主动解绑以外的所有原因导致的断开连接,都被认为是非正常断开)。
监听设备主动解绑
手机端要监听设备解绑消息。需将自身作为IOTSmartDeviceCloudLaunchUnbind通知的观察者。当设备主动发起解绑时会提示用户已被解绑。注意:设备主动解绑是正常断开连接,SDK不会自动进行重连。
监听设备OTA传输进度
手机端要监听设备OTA传输的进度,需将自身作为IOTSmartDeviceCloudOTAProgress通知的观察者。当设备进行OTA固件传输时可实时获取到设备的传输进度等数据。