如何使用机智云设备接入SDK来进行APP与设备之间的数据透传

本文主要介绍如何使用机智云设备接入sdk来进行app与设备之间的数据透传。在app和mcu之间,有两种数据透传方式:
利用“扩展类型”数据点进行透传
不定义数据点直接进行数据透传,即纯透传
先来了解什么是透传什么是透传?透传即是透明传送,即传送网络无论传输业务如何,只负责将需要传送的业务传送到目的节点,同时保证传输的质量即可,而不对传输的业务进行处理。
这就好比快递邮件,邮件中间有可能通过自行车、汽车、火车、飞机的多种组合运输方式到达您的手上,但您不用关心它们中间经历了哪些。
为什么要透传呢?透传一般都是用来读取远程的串口数据。例如:网吧内每个上网者都要刷身份证才能上网,但身份证数据库不可能放在每个网吧内。所以就将读卡器的串口数据通过透传回传到公安局,在公安局的平台上来比对身份证号码。
言归正传,现在进入今天的主题,来谈谈,在机智云app和mcu之间有哪两种透传方式。
方式一:扩展类型数据点透传
1.定义数据点
在机智云产品管理中的数据点中定义一个拓展类型的数据点,如上图所示:定义数据长度为60个byte(透传情况下,数据长度暂时支持900字节内数据传输)。
2.设备上报数据协议说明
设备mcu按照数据点的定义格式上报透传数据,在完成新产品的定义后,每个新产品都有相应的串口通信协议文档,文档下载路径如下图所示:
在串口通信协议文档文档的4.9部分则有mcu上报数据的格式,如下图:
图中的dev_status(60b)即为需要透传的数据。
3.sdk回调接口说明
app端接收到mcu上报数据的回调接口:didreceivedata,判断result为gizwifierrorcode.giz_sdk_success,则接收到的数据可能为普通数据点或者扩展数据点。
4.app接收数据代码示例
andriod接收到mcu上报拓展数据类型代码示例:
final protected static char[] hexarray = 0123456789abcdef.tochararray();
// 将16进制的byte转为string,
比如byte值为{0x62,0x63},
那么将转为“6263”public static string bytestohex(byte[] bytes) { char[] hexchars = new char[bytes.length * 3];
for (int j = 0;
j >> 4];
hexchars[j * 3 + 1] = hexarray[v & 0x0f]; hexchars[j * 3 + 2] = ' ';
} return new string(hexchars);
}
@overrideprotected void didreceivedata(gizwifierrorcode result, gizwifidevice device,
concurrenthashmap datamap, int sn) { if (result == gizwifierrorcode.giz_sdk_success)
{
// 普通数据点类型,有布尔型、整形和枚举型数据,
该种类型一般为可读写 if (datamap.get(data) != null)
{
concurrenthashmap map = (concurrenthashmap) datamap.get(data);
// 扩展数据点,
key为kuozhan byte[] bytes = (byte[]) map.get(kuozhan);
string string = bytestohex(bytes);
toast.maketext(this, string,
toast.length_short).show();
}
}}
ios接收到mcu上报拓展数据类型代码示例:
- (void)device:(gizwifidevice *)device didreceivedata:(nserror *)result data:(nsdictionary *)datamap withsn:(nsnumber *)sn{
if (result.code == giz_sdk_success)
{
nslog(@接收到数据);
nsdictionary *data = datamap[@data];
nsstring *kuozhan = data[@kuozhan];
nslog(@datamap = %@, datamap);
nslog(@kuozhan = %@, kuozhan);
}}
5.设备上报数据案例
案例:根据数据点上报格式上报数据:
ff ff 00 42 05 00 00 00 04 01 02 03 04 05 06 07 08 09 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 78
注意定义的扩展数据类型为60个字节,因此上报数据的时候也一定要保证上报命令中“设备状态”字节数为60个字节,否则app端将不会收到数据。多余的数据可以进行补零操作。
app端接收到的datamap字典中有一个”kuozhan”的key,对应的值即为透传的数据。
datamap = {
alerts={ };
data ={
kuozhan = ;
};
faults={
};
}
6.app下发数据代码示例
app在gizwifidevice类的write接口中,按照数据点定义发送扩展数据。
andriod下发拓展数据类型命令代码示例:
byte[] input1 = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77 };
// byte[] input2 = { 11, 22, 33, 44, 55, 66, 77, 88, 99};
concurrenthashmap datamap = new concurrenthashmap();
datamap.put(kuozhan, input1);
device.write(datamap,
0);
ios下发拓展数据类型命令代码示例:
char input1[7] = {0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77};// char input2[7] = {11, 22, 33, 44, 55, 66, 77}; nsdata* data = [nsdata datawithbytes:input1 length:sizeof(input1)]; nsdictionary *request = @{@kuozhan: data}; [self.device write:request withsn:44];
上述代码中,input1与input2的透传结果是不一样的,input1中定义的是十六进制的数值,input2中则是十进制的数值。如果使用input1中0x11的值下发给设备,那么设备将收到0x11的十六进制值,如果使用input2中11的值下发给设备,那么设备收到将是0x0b(十进制11对应十六进制b)。使用input1下发设备,mcu收到的数据为:
ff ff 00 43 03 45 00 00 01 01 11 22 33 44 55 66 77 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 69
方式二:无数据点透传
1.设备上报数据协议说明
mcu上报数据的格式如下表所示,包长度(len)是指从命令开始一直到校验和的字节长度(包括命令和校验和)。dev_status是需要透传数据,可以设置任意长度,但是暂时支持900b内传输。
如设备上报指令:ff ff 00 0d 05 00 00 00 06 11 22 33 44 55 66 77 f4 ;那么透传的数据为11 22 33 44 55 66 77
2.sdk回调接口说明
app端接收到mcu上报数据的回调接口: didreceivedata,判断result为gizwifierrorcode.giz_sdk_success,则表示接收到数据成功,回传参数的datamap 中的“binary”字段的值为透传数据。
3.app接收数据代码示例
andriod接收mcu无数据点上报代码示例:
@overrideprotected void didreceivedata(gizwifierrorcode result, gizwifidevice device,
concurrenthashmap datamap, int sn) {
if (result == gizwifierrorcode.giz_sdk_success) {
// 透传数据,无数据点定义,
适合开发者自行定义协议自行解析 if (datamap.get(binary) != null)
{ byte[] binary = (byte[]) datamap.get(binary); log.i(info,
binary data: + bytestohex(binary));
// 收到后面需要自行解析
}
}}
ios接收mcu无数据点上报代码示例:
- (void)device:(gizwifidevice *)device didreceivedata:(nserror *)result data:(nsdictionary *)datamap withsn:(nsnumber *)sn{
if (result.code == giz_sdk_success)
{
nslog(@接收到数据);
nslog(@datamap = %@, datamap);
nsstring *binary = datamap[@binary];
// 后面需要自行对binary数据进行解析
}}
如mcu上报:ff ff 00 0d 05 00 00 00 06 11 22 33 44 55 66 77 f4则app将打印: binary data:11 22 33 44 55 66 77
4.app下发数据代码示例
app在gizwifidevice类的write接口中,发送的json格式为:{“binary”: “xxxxxx”};mcu接收的数据格式如下:
andriod下发无数据点透传数据代码示例:
byte[] input1 = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77 };concurrenthashmap datamap = new concurrenthashmap();datamap.put(binary, input1);device.write(datamap, 0);
ios下发无数据点透传数据代码示例:
char input1[7] = {0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77};// char input2[7] = {11, 22, 33, 44, 55, 66, 77};
nsdata* data = [nsdata datawithbytes:input1 length:sizeof(input1)]
;nsdictionary *request = @{@binary: data};
[self.device write:request withsn:0];
mcu接收到的app下发数据格式(即以上bytes数组下发后,mcu接收到的数据):ff ff 00 0d 03 16 00 00 05 11 22 33 44 55 66 77 07

无人驾驶汽车技术原理与实现
三相负载中性线和零线上电流计算公式
赶超联发科!紫光展锐虎贲T310发布
单片机中晶振的作用是什么
苹果MacBook为什么使用USB-C接口?
如何使用机智云设备接入SDK来进行APP与设备之间的数据透传
Python 自制简单实用的日志装饰器
人脸识别技术在安防领域潜力究竟如何?
高光谱成像技术鉴别菠菜叶片农药残留种类
二叉树的代码实现
一加5什么时候上市?一加5什么配置?一加5的最新消息:8G运存 全面屏
一文详解变频器和PLC/PCA系统
针对毫米波应用的电路材料选择
层状LiNi0.8Co0.1Mn0.1O2的容量损失和结构退化之间的关系
人工智能领域多模态的概念和应用场景
公司这套架构统一处理try...catch真香!
M2还未发布就有M3消息?据称苹果新款iMac将搭载M3芯片
测量CDMA2000和W-CDMA高功率放大器中的射频功率
MGA-635P8超低噪声放大器特性分析
小米6S首发!自研的松果处理器八核心A53:媲美骁龙835