0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

9GxC_IoTMaker 来源:未知 作者:李倩 2018-05-17 14:31 次阅读

本文主要介绍如何使用机智云设备接入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 < bytes.length; j++) { int v = bytes[j] & 0xFF; hexChars[j * 3] = hexArray[v >>> 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 = <01020304 05060708 09000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000>;
};
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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • APP
    APP
    +关注

    关注

    33

    文章

    1568

    浏览量

    72361
  • 机智云
    +关注

    关注

    2

    文章

    579

    浏览量

    26367

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

文章出处:【微信号:IoTMaker,微信公众号:机智云开发者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    教你轻松将CC3200接入机智

    LaunchPad LED D7 创建一个数据点按照 向导点击下一步,最后可以按照demo APP,或者下载SDK去定制APP3.获取Product Key在
    发表于 02-22 14:26

    机智想说爱你不容易 - 如何开发接入机智的物联网设备

    机智平台标准接入协议之App设备通讯v4.0.1,机智
    发表于 09-27 13:26

    五分钟了解机智

    上网后自动与机智连接。同时,手机APP集成机智提供SDK,也会自动连接
    发表于 12-27 14:32

    机智APP开源框架介绍

    硬件相关的App实现方法。BT/BLE设备接入机智Android客户端示例源码介绍:BT/BLE设备
    发表于 02-15 17:56

    硬件工程师是这样子开发APP

    %E5%BD%95%E4%B8%8E%E6%8D%A2%E8%82%A4.html6)通常重头戏在最后。在进行APP开发之前,你一定要了解什么是“数据
    发表于 05-12 11:11

    史上最详细的Arduino uno R3接入机智教程

    配网模式,然后手机APP把SSID和密码广播给设备,原理如下图:这里需要说明的是,机智开发的配网方案有2种,取名为AirLink和SoftAP,
    发表于 11-18 14:52

    Android开发SDK接入机智,智能家居实现APP远程控制多设备

    技术:JAVA 8.32运行环境:AndroidStudio2.2 概述此框架只用了一周星期做了出来,因为对机智的框架比较熟悉了 !期间SDK初始化出了问题,去咨询了机智
    发表于 04-24 10:43

    机友分享 | 机智小程序启蒙:WebSocket网页控制

    )、开源跨平台APP SDK(iOS、Android、APiCloud)、开源案例和在线教程,以及社区及FAE支持,帮助开发者0成本、快速实现IoT设备远程控制、数据采集分析、
    发表于 07-17 15:40

    机智小程序启蒙:WebSocket网页控制

    机智小程序启蒙:WebSocket网页控制 机智Web版的JS远程控制设备,是调用了机智
    发表于 07-22 09:58

    物联网中的数据

    推送、统计报表等服务。☝ 戳上图立即选购 ☝[ APP和MCU之间如何实现 ]关于使用机智
    发表于 08-29 19:27

    物联网中的数据

    推送、统计报表等服务。☝ 戳上图立即选购 ☝[ APP和MCU之间如何实现 ]关于使用机智
    发表于 09-03 14:17

    机智(物联网平台)上新了

    方式,如GPRS、NB-IoT、4G全网通;支持RS232、RS485等方式接入;甚至是可通过APP、后台、小程序等方式进行设备管理。机智
    发表于 11-05 19:21

    485转4G DTU设备(机智)

    App即可很快的实现手机App远程访问我们的开发板。缺点就是通用版App的UI页面看起来不够专业。本例中我们使用了"RawData"这个数据点作为和
    发表于 10-26 19:02

    机智三种APP开发方式介绍

    APP开发,以下为不同需求建议选用的开发方式。 01机智设备接入SDK
    的头像 发表于 11-21 15:27 2750次阅读
    <b class='flag-5'>机智</b><b class='flag-5'>云</b>三种<b class='flag-5'>APP</b>开发方式介绍

    ZWS平台应用(2)-设备基于SDK接入

    物联网开发过程中遇到的棘手问题是:如何让设备连接上设备接入主要是开发者要实现设备平台
    的头像 发表于 03-05 08:24 393次阅读
    ZWS<b class='flag-5'>云</b>平台应用(2)-<b class='flag-5'>设备</b>基于<b class='flag-5'>SDK</b><b class='flag-5'>接入</b>