国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Ruff 上的 ZigBee 應(yīng)用

miracledan / 2068人閱讀

摘要:組包解包和解析以開關(guān)燈的控制協(xié)議來看的組包過程包的首尾是開始和結(jié)束標(biāo)志。前三個(gè)字段分別是之后就是具體的控制數(shù)據(jù)。由于要在包內(nèi)容里避免使用開頭或者結(jié)尾的標(biāo)志字段,所以需要對源包內(nèi)容進(jìn)行轉(zhuǎn)義,轉(zhuǎn)義示意如下。我們就可以接入上面展示的燈和開關(guān)了。

原理簡介

這個(gè)智能控制系統(tǒng)采用 ZigBee 作為無線通信協(xié)議。
在支持 OpenWRT 系統(tǒng)的路由器上刷入 Ruff,利用 ZigBee-USB dongle 模塊,和其他 ZigBee 終端設(shè)備通信,實(shí)現(xiàn)遙控功能。

物件清單
主控平臺

極路由3 ,已刷入 Ruff。

傳感器和執(zhí)行元件

ZigBee-USB dongle 模塊

ZigBee 燈

小米 ZigBee 開關(guān)

開發(fā)步驟

初始化 APP
$ rap init

添加 zigbee 驅(qū)動,id 為 zigbee ,型號選擇 jn5168a
$ rap device add zigbee (jn5168a)

編寫 src/index.js代碼

"use strict";

var zigbee;

$.ready(function (error) {
 if (error) {
     console.log(error);
     return;
 }
 zigbee = $("#zigbee");
 zigbee.startup();

 zigbee.setTurnLightOn();
 zigbee.setTurnLightOff();
 zigbee.setToggleLight();
});

$.end(function () {
});

改寫板卡描述 board.json

由于路由器上沒有 GPIO 之類的接口,所以我們要改寫板卡描述文件 ruff_modules/ruff-mbd-v1/board.json

     {
     "version": "2.0",
     "id": "ruff-mbd-v1",
     "model": "ruff-mbd-v1",
     "preloads": {
         "uart-0": "uart-0/uart"
     },
     "outputs": {
         "uart-0": "uart-0/uart",
         "gnd-0": "ground/gnd-0",
         "vdd-0": "power/vdd-0"
     },
     "devices": [
         {
             "id": "ground",
             "outputs": {
                 "gnd-0": {
                     "type": "ground"
                 }
             }
         },
         {
             "id": "power",
             "outputs": {
                 "vdd-0": {
                     "type": "power",
                     "args": {
                         "voltage": "3.3v"
                     }
                 }
             }
         },
         {
             "id": "uart-0",
             "model": "ruff-sys-uart",
             "driver": "sys-uart",
             "inputs": {
                 "device": {
                     "type": "string",
                     "args": {
                         "path": "/dev/ttyUSB0"
                     }
                 }
             },
             "outputs": {
                 "uart" : {
                     "type":"uart"
                 }
             }
         }
     ]
 }

5.部署代碼

`$ rap deploy your-router-ip -s`
ZigBee 驅(qū)動解析

以下三個(gè)部分分別從

ZigBee 網(wǎng)絡(luò)包的組成

ZigBee 網(wǎng)絡(luò)的組建

開關(guān)燈控制

三個(gè)方面,來介紹 ZigBee 驅(qū)動模塊。

ZigBee 組包、解包和解析

以開關(guān)燈的控制協(xié)議來看 ZigBee 的組包過程:

 start = 0x1
 end = 0x3
 data = [0x2, 0x44, 0xa6, 0x1, 0x1, 0x1]
 msgType = 146 = 0x92 (OnOff)
 msgLen = 0x6
 crc = 0x92 ^ 0x6 ^ 0x2 ^ 0x44 ^ 0xa6 ^ 0x1 ^ 0x1 ^ 0x1 = 0x75

 -----------------------------------------------------------------------------------
 |  0x1  |   0x92   |   0x6   |  0x75 |   0x2, 0x44, 0xa6, 0x1, 0x1, 0x1   |  0x3  |
 -----------------------------------------------------------------------------------
 | start | msgType  |  msgLen |  crc  |              Data                  |  stop |
 -----------------------------------------------------------------------------------

包的首尾是開始和結(jié)束標(biāo)志。前三個(gè)字段分別是message type, message length, CRC checksum, 之后就是具體的控制數(shù)據(jù)。
由于要在包內(nèi)容里避免使用開頭或者結(jié)尾的標(biāo)志字段,所以需要對源包內(nèi)容進(jìn)行轉(zhuǎn)義,轉(zhuǎn)義示意如下。

0x00 0x92 -> 0x2 0x10^0x00 0x92

 ------------------------------------------------------------------------------------------------------------
 |  0x1  | 0x2 0x10 0x92 | 0x2 0x10 0x2 0x16 | 0x75 | 0x2 0x12 0x44 0xa6 0x2 0x11 0x2 0x11 0x2 0x11 |  0x3  |
 ------------------------------------------------------------------------------------------------------------
 | start |     msgType   |      msgLen       | crc  |                  Data                         |  stop |
 ------------------------------------------------------------------------------------------------------------

解包是組包的逆過程。
解析而是依據(jù)ZigBee協(xié)議的數(shù)據(jù)手冊(JN-AN-1194-ZigBee-IoT-Gateway-Control-Bridge pdf),一一對照著解析包的內(nèi)容。

ZigBee網(wǎng)絡(luò)組建代碼

根據(jù)數(shù)據(jù)手冊,ZigBee初始化組建網(wǎng)絡(luò)需要經(jīng)過以下幾個(gè)步驟:

  this.getVersion();
  this.setExtendedPANID();
  this.setChannelMask();
  this.setSecurityStateAndKey();
  this.setDeviceType();
  this.startNetwork();
  this.permitJoiningRequest();

在這之后,ZigBee 網(wǎng)絡(luò)處于開放狀態(tài),可以接受連接請求。我們就可以接入上面展示的 ZigBee 燈和開關(guān)了。

ZigBee 開關(guān)燈代碼

ZigBee 協(xié)議里有直接控制開關(guān)的通信類型,通過查找 ZigBee 數(shù)據(jù)手冊,可以找到如下信息:

利用這個(gè)通信類型,我們寫的開關(guān)燈的代碼是這樣的。

ZigBee.prototype.turnLightOn = function () {
  console.log("turn light on");
  var devices = interpreter.getDeviceList();
  var msg = new Buffer([0x2, 0xff, 0xff, 0x1, 0x1, 0x1]);
  if (devices.length !== 0) {
    msg.writeUInt16BE(devices[0].shortAddress, 1);
  }
  this._writeCmd(0x92, msg);
}

ZigBee.prototype.turnLightOff = function () {
  console.log("turn light off");
  var devices = interpreter.getDeviceList();
  var msg = new Buffer([0x2, 0xff, 0xff, 0x1, 0x1, 0x0]);
  if (devices.length !== 0) {
    msg.writeUInt16BE(devices[0].shortAddress, 1);
  }
  this._writeCmd(0x92, msg);
}

ZigBee.prototype.toggleLight = function () {
  console.log("toggle light");
  var devices = interpreter.getDeviceList();
  var msg = new Buffer([0x2, 0xff, 0xff, 0x1, 0x1, 0x2]);
  if (devices.length !== 0) {
    msg.writeUInt16BE(devices[0].shortAddress, 1);
  }
  this._writeCmd(0x92, msg);
}
演示視頻

演示(騰訊)

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/81155.html

相關(guān)文章

  • JavaScript在物聯(lián)網(wǎng)中的應(yīng)用

    摘要:定律在那篇最流行的編程語言能做什么里,我們列舉了在不同領(lǐng)域的使用情況,今天讓我們來詳解一下在物聯(lián)網(wǎng)中的應(yīng)用。這個(gè)硬件層決定了物聯(lián)網(wǎng)應(yīng)用比應(yīng)用更加復(fù)雜。這時(shí),我開始關(guān)注實(shí)現(xiàn)物聯(lián)網(wǎng)應(yīng)用的可能性。 凡是能用JavaScript寫出來的,最終都會用JavaScript寫出來。 —— Atwood定律 在那篇《最流行的編程語言JavaScript能做什么?》里,我們列舉了JavaScript在不...

    aaron 評論0 收藏0
  • JavaScript在物聯(lián)網(wǎng)中的應(yīng)用

    摘要:定律在那篇最流行的編程語言能做什么里,我們列舉了在不同領(lǐng)域的使用情況,今天讓我們來詳解一下在物聯(lián)網(wǎng)中的應(yīng)用。這個(gè)硬件層決定了物聯(lián)網(wǎng)應(yīng)用比應(yīng)用更加復(fù)雜。這時(shí),我開始關(guān)注實(shí)現(xiàn)物聯(lián)網(wǎng)應(yīng)用的可能性。 凡是能用JavaScript寫出來的,最終都會用JavaScript寫出來。 —— Atwood定律 在那篇《最流行的編程語言JavaScript能做什么?》里,我們列舉了JavaScript在不...

    Barrior 評論0 收藏0
  • 【物聯(lián)網(wǎng)】JavaScript快速開發(fā)智能硬件應(yīng)用ruff開箱篇(一)

    摘要:前言最近聽到有小伙伴們對感興趣,我也跟著加入了大軍中,本篇文章展示了的開發(fā)套件,以及入手后的小,后續(xù)持續(xù)更新參考文獻(xiàn)官網(wǎng)思否首頁開箱如同官網(wǎng)展示的配件如下上手官方我開發(fā)時(shí)使用的是系統(tǒng),所以下載安裝包創(chuàng)建項(xiàng)目文件,在當(dāng)前目錄執(zhí)行下面命令查看 前言 最近聽到有小伙伴們對ruff感興趣,我也跟著加入了大軍中,本篇文章展示了ruff的開發(fā)套件,以及入手后的小demo,后續(xù)持續(xù)更新參考文獻(xiàn)ruf...

    NeverSayNever 評論0 收藏0
  • 斜杠青年Ruff:區(qū)塊鏈只是分內(nèi)事

    摘要:物聯(lián)網(wǎng)操作系統(tǒng)落地工業(yè)物聯(lián)網(wǎng)定制化解決方案實(shí)施上線上天并不像一個(gè)正經(jīng)的創(chuàng)業(yè)公司,更不像一個(gè)掙扎在生死邊緣的創(chuàng)業(yè)者,反而像一個(gè)時(shí)下流行叫法斜杠青年。所以,對于而言,區(qū)塊鏈只是份內(nèi)的事。 showImg(https://segmentfault.com/img/bV9xuY?w=1182&h=591); 物聯(lián)網(wǎng)操作系統(tǒng)落地工業(yè)物聯(lián)網(wǎng)、定制化解決方案實(shí)施、Ruff Chain 上線、Ruff...

    zhisheng 評論0 收藏0
  • Ruff Chain 創(chuàng)始人 Roy Li:具有價(jià)值流轉(zhuǎn)和價(jià)值流通的數(shù)據(jù)才值得上鏈

    摘要:雖然表現(xiàn)層的數(shù)據(jù)占到,甚至可能更多,但價(jià)值網(wǎng)絡(luò)的數(shù)據(jù)在物聯(lián)網(wǎng)中則更能產(chǎn)生價(jià)值。因此,采取的是在末端使用無人化的方式運(yùn)作,利用邊緣節(jié)點(diǎn)采取數(shù)據(jù),然后把其他最有價(jià)值的需要保證絕對的一致性的可以用于價(jià)值流轉(zhuǎn)和價(jià)值流通的數(shù)據(jù)進(jìn)行上鏈。 showImg(https://segmentfault.com/img/bV64yb?w=2160&h=1440); 2018年3月27日,人民網(wǎng)創(chuàng)投?區(qū)塊鏈...

    zhaochunqi 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<