0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用機(jī)智云設(shè)備接入SDK來(lái)進(jìn)行APP與設(shè)備之間的數(shù)據(jù)透?jìng)?/h1>

本文主要介紹如何使用機(jī)智云設(shè)備接入SDK來(lái)進(jìn)行APP與設(shè)備之間的數(shù)據(jù)透?jìng)?。在APP和MCU之間,有兩種數(shù)據(jù)透?jìng)鞣绞剑?/p>

利用“擴(kuò)展類型”數(shù)據(jù)點(diǎn)進(jìn)行透?jìng)?/p>

不定義數(shù)據(jù)點(diǎn)直接進(jìn)行數(shù)據(jù)透?jìng)?,即純透?jìng)?/p>

先來(lái)了解什么是透?jìng)魇裁词峭競(jìng)??透?jìng)骷词峭该鱾魉?,即傳?a href="http://www.ttokpm.com/v/tag/1722/" target="_blank">網(wǎng)絡(luò)無(wú)論傳輸業(yè)務(wù)如何,只負(fù)責(zé)將需要傳送的業(yè)務(wù)傳送到目的節(jié)點(diǎn),同時(shí)保證傳輸?shù)馁|(zhì)量即可,而不對(duì)傳輸?shù)臉I(yè)務(wù)進(jìn)行處理。

這就好比快遞郵件,郵件中間有可能通過(guò)自行車、汽車、火車、飛機(jī)的多種組合運(yùn)輸方式到達(dá)您的手上,但您不用關(guān)心它們中間經(jīng)歷了哪些。

為什么要透?jìng)髂??透?jìng)饕话愣际怯脕?lái)讀取遠(yuǎn)程的串口數(shù)據(jù)。例如:網(wǎng)吧內(nèi)每個(gè)上網(wǎng)者都要刷身份證才能上網(wǎng),但身份證數(shù)據(jù)庫(kù)不可能放在每個(gè)網(wǎng)吧內(nèi)。所以就將讀卡器的串口數(shù)據(jù)通過(guò)透?jìng)骰貍鞯焦簿?,在公安局的平臺(tái)上來(lái)比對(duì)身份證號(hào)碼。

言歸正傳,現(xiàn)在進(jìn)入今天的主題,來(lái)談?wù)?,在機(jī)智云APP和MCU之間有哪兩種透?jìng)鞣绞健?/p>

方式一:擴(kuò)展類型數(shù)據(jù)點(diǎn)透?jìng)?/p>

1.定義數(shù)據(jù)點(diǎn)

在機(jī)智云產(chǎn)品管理中的數(shù)據(jù)點(diǎn)中定義一個(gè)拓展類型的數(shù)據(jù)點(diǎn),如上圖所示:定義數(shù)據(jù)長(zhǎng)度為60個(gè)byte(透?jìng)髑闆r下,數(shù)據(jù)長(zhǎng)度暫時(shí)支持900字節(jié)內(nèi)數(shù)據(jù)傳輸)。

2.設(shè)備上報(bào)數(shù)據(jù)協(xié)議說(shuō)明

設(shè)備MCU按照數(shù)據(jù)點(diǎn)的定義格式上報(bào)透?jìng)鲾?shù)據(jù),在完成新產(chǎn)品的定義后,每個(gè)新產(chǎn)品都有相應(yīng)的串口通信協(xié)議文檔,文檔下載路徑如下圖所示:

在串口通信協(xié)議文檔文檔的4.9部分則有MCU上報(bào)數(shù)據(jù)的格式,如下圖:

圖中的dev_status(60B)即為需要透?jìng)鞯臄?shù)據(jù)。

3.SDK回調(diào)接口說(shuō)明

APP端接收到MCU上報(bào)數(shù)據(jù)的回調(diào)接口:didReceiveData,判斷result為GizWifiErrorCode.GIZ_SDK_SUCCESS,則接收到的數(shù)據(jù)可能為普通數(shù)據(jù)點(diǎn)或者擴(kuò)展數(shù)據(jù)點(diǎn)。

4.APP接收數(shù)據(jù)代碼示例

Andriod接收到MCU上報(bào)拓展數(shù)據(jù)類型代碼示例:

final protected static char[] hexArray = "0123456789ABCDEF".toCharArray();
// 將16進(jìn)制的byte轉(zhuǎn)為string,
比如byte值為{0x62,0x63},
那么將轉(zhuǎn)為“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)
{
// 普通數(shù)據(jù)點(diǎn)類型,有布爾型、整形和枚舉型數(shù)據(jù),
該種類型一般為可讀寫(xiě) if (dataMap.get("data") != null)
{
ConcurrentHashMap map = (ConcurrentHashMap) dataMap.get("data");
// 擴(kuò)展數(shù)據(jù)點(diǎn),
key為"kuozhan" byte[] bytes = (byte[]) map.get("kuozhan");
String string = bytesToHex(bytes);
Toast.makeText(this, string,
Toast.LENGTH_SHORT).show();
}
}}

iOS接收到MCU上報(bào)拓展數(shù)據(jù)類型代碼示例:

- (void)device:(GizWifiDevice *)device didReceiveData:(NSError *)result data:(NSDictionary *)dataMap withSN:(NSNumber *)sn{
if (result.code == GIZ_SDK_SUCCESS)
{
NSLog(@"接收到數(shù)據(jù)");
NSDictionary *data = dataMap[@"data"];
NSString *kuozhan = data[@"kuozhan"];
NSLog(@"dataMap = %@", dataMap);
NSLog(@"kuozhan = %@", kuozhan);
}}

5.設(shè)備上報(bào)數(shù)據(jù)案例

案例:根據(jù)數(shù)據(jù)點(diǎn)上報(bào)格式上報(bào)數(shù)據(jù):

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

注意定義的擴(kuò)展數(shù)據(jù)類型為60個(gè)字節(jié),因此上報(bào)數(shù)據(jù)的時(shí)候也一定要保證上報(bào)命令中“設(shè)備狀態(tài)”字節(jié)數(shù)為60個(gè)字節(jié),否則APP端將不會(huì)收到數(shù)據(jù)。多余的數(shù)據(jù)可以進(jìn)行補(bǔ)零操作。

APP端接收到的dataMap字典中有一個(gè)”kuozhan”的key,對(duì)應(yīng)的值即為透?jìng)鞯臄?shù)據(jù)。

dataMap = {
alerts={ };
data ={
kuozhan = <01020304 05060708 09000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000>;
};
faults={
};
}

6.APP下發(fā)數(shù)據(jù)代碼示例

APP在GizWifiDevice類的write接口中,按照數(shù)據(jù)點(diǎn)定義發(fā)送擴(kuò)展數(shù)據(jù)。

Andriod下發(fā)拓展數(shù)據(jù)類型命令代碼示例:

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下發(fā)拓展數(shù)據(jù)類型命令代碼示例:

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的透?jìng)鹘Y(jié)果是不一樣的,input1中定義的是十六進(jìn)制的數(shù)值,input2中則是十進(jìn)制的數(shù)值。如果使用input1中0x11的值下發(fā)給設(shè)備,那么設(shè)備將收到0x11的十六進(jìn)制值,如果使用input2中11的值下發(fā)給設(shè)備,那么設(shè)備收到將是0x0b(十進(jìn)制11對(duì)應(yīng)十六進(jìn)制b)。使用input1下發(fā)設(shè)備,MCU收到的數(shù)據(jù)為:

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

方式二:無(wú)數(shù)據(jù)點(diǎn)透?jìng)?/p>

1.設(shè)備上報(bào)數(shù)據(jù)協(xié)議說(shuō)明

MCU上報(bào)數(shù)據(jù)的格式如下表所示,包長(zhǎng)度(len)是指從命令開(kāi)始一直到校驗(yàn)和的字節(jié)長(zhǎng)度(包括命令和校驗(yàn)和)。dev_status是需要透?jìng)鲾?shù)據(jù),可以設(shè)置任意長(zhǎng)度,但是暫時(shí)支持900B內(nèi)傳輸。

如設(shè)備上報(bào)指令:FF FF 00 0D 05 00 00 00 06 11 22 33 44 55 66 77 F4 ;那么透?jìng)鞯臄?shù)據(jù)為11 22 33 44 55 66 77

2.SDK回調(diào)接口說(shuō)明

APP端接收到MCU上報(bào)數(shù)據(jù)的回調(diào)接口: didReceiveData,判斷result為GizWifiErrorCode.GIZ_SDK_SUCCESS,則表示接收到數(shù)據(jù)成功,回傳參數(shù)的dataMap 中的“binary”字段的值為透?jìng)鲾?shù)據(jù)。

3.APP接收數(shù)據(jù)代碼示例

Andriod接收MCU無(wú)數(shù)據(jù)點(diǎn)上報(bào)代碼示例:

@Overrideprotected void didReceiveData(GizWifiErrorCode result, GizWifiDevice device,
ConcurrentHashMap dataMap, int sn) {
if (result == GizWifiErrorCode.GIZ_SDK_SUCCESS) {
// 透?jìng)鲾?shù)據(jù),無(wú)數(shù)據(jù)點(diǎn)定義,
適合開(kāi)發(fā)者自行定義協(xié)議自行解析 if (dataMap.get("binary") != null)
{ byte[] binary = (byte[]) dataMap.get("binary"); Log.i("info",
"Binary data:" + bytesToHex(binary));
// 收到后面需要自行解析
}
}}

iOS接收MCU無(wú)數(shù)據(jù)點(diǎn)上報(bào)代碼示例:

- (void)device:(GizWifiDevice *)device didReceiveData:(NSError *)result data:(NSDictionary *)dataMap withSN:(NSNumber *)sn{
if (result.code == GIZ_SDK_SUCCESS)
{
NSLog(@"接收到數(shù)據(jù)");
NSLog(@"dataMap = %@", dataMap);
NSString *binary = dataMap[@"binary"];
// 后面需要自行對(duì)binary數(shù)據(jù)進(jìn)行解析
}}

如MCU上報(bào):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下發(fā)數(shù)據(jù)代碼示例

APP在GizWifiDevice類的write接口中,發(fā)送的json格式為:{“binary”: “xxxxxx”};MCU接收的數(shù)據(jù)格式如下:

Andriod下發(fā)無(wú)數(shù)據(jù)點(diǎn)透?jìng)鲾?shù)據(jù)代碼示例:

byte[] input1 = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77 };ConcurrentHashMap dataMap = new ConcurrentHashMap();dataMap.put("binary", input1);device.write(dataMap, 0);

iOS下發(fā)無(wú)數(shù)據(jù)點(diǎn)透?jìng)鲾?shù)據(jù)代碼示例:

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下發(fā)數(shù)據(jù)格式(即以上bytes數(shù)組下發(fā)后,MCU接收到的數(shù)據(jù)):FF FF 00 0D 03 16 00 00 05 11 22 33 44 55 66 77 07

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • APP
    APP
    +關(guān)注

    關(guān)注

    33

    文章

    1557

    瀏覽量

    72155
  • 機(jī)智云
    +關(guān)注

    關(guān)注

    2

    文章

    563

    瀏覽量

    26313

原文標(biāo)題:如何使用機(jī)智云設(shè)備接入SDK,來(lái)進(jìn)行APP與設(shè)備之間的數(shù)據(jù)透?jìng)?/p>

文章出處:【微信號(hào):IoTMaker,微信公眾號(hào):機(jī)智云開(kāi)發(fā)者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    教你輕松將CC3200接入機(jī)智

    LaunchPad LED D7 創(chuàng)建一個(gè)數(shù)據(jù)點(diǎn)按照 向?qū)c(diǎn)擊下一步,最后可以按照demo APP,或者下載SDK去定制APP3.獲取Product Key在
    發(fā)表于 02-22 14:26

    機(jī)智想說(shuō)愛(ài)你不容易 - 如何開(kāi)發(fā)接入機(jī)智的物聯(lián)網(wǎng)設(shè)備

    機(jī)智平臺(tái)標(biāo)準(zhǔn)接入協(xié)議之App設(shè)備通訊v4.0.1,機(jī)智
    發(fā)表于 09-27 13:26

    五分鐘了解機(jī)智

    上網(wǎng)后自動(dòng)與機(jī)智連接。同時(shí),手機(jī)APP集成機(jī)智提供SDK,也會(huì)自動(dòng)連接
    發(fā)表于 12-27 14:32

    機(jī)智APP開(kāi)源框架介紹

    硬件相關(guān)的App實(shí)現(xiàn)方法。BT/BLE設(shè)備接入機(jī)智Android客戶端示例源碼介紹:BT/BLE設(shè)備
    發(fā)表于 02-15 17:56

    硬件工程師是這樣子開(kāi)發(fā)APP

    %E5%BD%95%E4%B8%8E%E6%8D%A2%E8%82%A4.html6)通常重頭戲在最后。在進(jìn)行APP開(kāi)發(fā)之前,你一定要了解什么是“數(shù)據(jù)
    發(fā)表于 05-12 11:11

    史上最詳細(xì)的Arduino uno R3接入機(jī)智教程

    配網(wǎng)模式,然后手機(jī)APP把SSID和密碼廣播給設(shè)備,原理如下圖:這里需要說(shuō)明的是,機(jī)智開(kāi)發(fā)的配網(wǎng)方案有2種,取名為AirLink和SoftAP,設(shè)
    發(fā)表于 11-18 14:52

    Android開(kāi)發(fā)SDK接入機(jī)智,智能家居實(shí)現(xiàn)APP遠(yuǎn)程控制多設(shè)備

    技術(shù):JAVA 8.32運(yùn)行環(huán)境:AndroidStudio2.2 概述此框架只用了一周星期做了出來(lái),因?yàn)閷?duì)機(jī)智的框架比較熟悉了 !期間SDK初始化出了問(wèn)題,去咨詢了機(jī)智
    發(fā)表于 04-24 10:43

    機(jī)友分享 | 機(jī)智小程序啟蒙:WebSocket網(wǎng)頁(yè)控制

    )、開(kāi)源跨平臺(tái)APP SDK(iOS、Android、APiCloud)、開(kāi)源案例和在線教程,以及社區(qū)及FAE支持,幫助開(kāi)發(fā)者0成本、快速實(shí)現(xiàn)IoT設(shè)備遠(yuǎn)程控制、數(shù)據(jù)采集分析、
    發(fā)表于 07-17 15:40

    機(jī)智小程序啟蒙:WebSocket網(wǎng)頁(yè)控制

    機(jī)智小程序啟蒙:WebSocket網(wǎng)頁(yè)控制 機(jī)智Web版的JS遠(yuǎn)程控制設(shè)備,是調(diào)用了機(jī)智
    發(fā)表于 07-22 09:58

    物聯(lián)網(wǎng)中的數(shù)據(jù)

    推送、統(tǒng)計(jì)報(bào)表等服務(wù)。? 戳上圖立即選購(gòu) ?[ APP和MCU之間如何實(shí)現(xiàn) ]關(guān)于使用機(jī)智
    發(fā)表于 08-29 19:27

    物聯(lián)網(wǎng)中的數(shù)據(jù)

    推送、統(tǒng)計(jì)報(bào)表等服務(wù)。? 戳上圖立即選購(gòu) ?[ APP和MCU之間如何實(shí)現(xiàn) ]關(guān)于使用機(jī)智
    發(fā)表于 09-03 14:17

    機(jī)智(物聯(lián)網(wǎng)平臺(tái))上新了

    方式,如GPRS、NB-IoT、4G全網(wǎng)通;支持RS232、RS485等方式接入;甚至是可通過(guò)APP、后臺(tái)、小程序等方式進(jìn)行設(shè)備管理。機(jī)智
    發(fā)表于 11-05 19:21

    485轉(zhuǎn)4G DTU設(shè)備(機(jī)智)

    App即可很快的實(shí)現(xiàn)手機(jī)App遠(yuǎn)程訪問(wèn)我們的開(kāi)發(fā)板。缺點(diǎn)就是通用版App的UI頁(yè)面看起來(lái)不夠?qū)I(yè)。本例中我們使用了"RawData"這個(gè)數(shù)據(jù)點(diǎn)作為和
    發(fā)表于 10-26 19:02

    機(jī)智三種APP開(kāi)發(fā)方式介紹

    APP開(kāi)發(fā),以下為不同需求建議選用的開(kāi)發(fā)方式。 01機(jī)智設(shè)備接入SDK
    的頭像 發(fā)表于 11-21 15:27 ?2689次閱讀
    <b class='flag-5'>機(jī)智</b><b class='flag-5'>云</b>三種<b class='flag-5'>APP</b>開(kāi)發(fā)方式介紹

    ZWS平臺(tái)應(yīng)用(2)-設(shè)備基于SDK接入

    物聯(lián)網(wǎng)開(kāi)發(fā)過(guò)程中遇到的棘手問(wèn)題是:如何讓設(shè)備連接上設(shè)備接入主要是開(kāi)發(fā)者要實(shí)現(xiàn)設(shè)備平臺(tái)
    的頭像 發(fā)表于 03-05 08:24 ?303次閱讀
    ZWS<b class='flag-5'>云</b>平臺(tái)應(yīng)用(2)-<b class='flag-5'>設(shè)備</b>基于<b class='flag-5'>SDK</b><b class='flag-5'>接入</b>