摘要:看一下我最終的成果省略一萬字我這里就簡單實現(xiàn)了一下,頁面畫的有點磕磣,只能將就著用了。加了一個設(shè)備的選擇框,一個發(fā)送數(shù)據(jù)的編輯框,一個設(shè)備響應(yīng)的顯示框。
之前入手了一個搭載了智能邊緣計算系統(tǒng)EdgerOS 的設(shè)備Spirit 1,通過該設(shè)備我們可以將應(yīng)用與設(shè)備連接起來,通過 javascript 應(yīng)用可以來控制連接的設(shè)備,之前就準備弄一個基于 SDDC 協(xié)議的紅外溫度感應(yīng)的設(shè)備接到這個Spirit 1上,來檢測下我房間的溫度的,關(guān)于紅外溫度感應(yīng)設(shè)備的開發(fā)可以參考這篇文章:基于ESP32S 的第一個應(yīng)用-紅外測溫槍。
通過 SDDC 協(xié)議在愛智的設(shè)備應(yīng)用中掃描、發(fā)現(xiàn)、最后添加設(shè)備到 Spirit 1上后問題來了(愛智上如何添加設(shè)備可以參考這篇文章:邊緣計算機 Spirit 1 初體驗),我突然意識到自己不知道 Spirit 1 收沒收到消息,然后進官網(wǎng)摸索了一個多小時,最終得出了一個結(jié)論,他們沒有提供可測試的入口 (ノ=Д=)ノ┻━┻。不過好在他們官網(wǎng)我倒是找到了幾個小demo,按照官網(wǎng)上的說法,我應(yīng)該可以自己寫一個應(yīng)用,然后部署到 Spirit 1,這樣就可以通過手機去控制設(shè)備,同樣設(shè)備發(fā)消息之后我也可以通過應(yīng)用去獲取對應(yīng)消息內(nèi)容。
立馬我就去官網(wǎng)掃了一下應(yīng)用開發(fā)說明,找到了一個實現(xiàn)這方面功能的模塊 device ,唯一不足的是這個模塊是 Spirit 1 里面的內(nèi)置模塊,不能在其他系統(tǒng)環(huán)境中使用,只支持ZDDC和SDDC協(xié)議,不過我這個紅外溫度感應(yīng)的就是基于這個SDDC協(xié)議的,所以沒啥大問題。最后我只能自己去實現(xiàn)一個可以調(diào)試的工具應(yīng)用了, 為此我還特地花費了一晚上去看他們這個應(yīng)用開發(fā),終于搞出了一個非常非常非常 low 的測試應(yīng)用,最終也部署上去了。
看一下我最終的成果(wohahaha…省略一萬字):
我這里就簡單實現(xiàn)了一下,頁面畫的有點磕磣,只能將就著用了。加了一個設(shè)備的選擇框,一個發(fā)送數(shù)據(jù)的編輯框,一個設(shè)備響應(yīng)的顯示框。
使用的話也比較簡單,選中一個設(shè)備,然后構(gòu)建一下要發(fā)送的指令消息,然后點擊send,應(yīng)用后端會通過 device 模塊將數(shù)據(jù)在 Spirit 1 中進行處理,最后發(fā)送到我寫的紅外測溫的設(shè)備中,設(shè)備收到消息后會回傳給 Spirit 1 當前的環(huán)境溫度和目標溫度,而我的應(yīng)用后端通過 device 模塊也會監(jiān)聽到設(shè)備發(fā)送的消息,并在前端將其打印出來,這樣我以后開發(fā)的時候就可以測試設(shè)備和 Spirit 1 之間的通信了,只能對自己說一句:忒牛 ?( ?????ω????? )? 。
A FEW MOMENT LATER …
…
下面正經(jīng)的和大家講一下實現(xiàn)的技術(shù)難點(我胡扯的,(?ω?) hiahiahia),其實實現(xiàn)上面的功能非常的 So Easy,我只用到了官網(wǎng)提供的一個內(nèi)置模塊 device 就完成了,不過我在根據(jù)官網(wǎng)說明文檔進行開發(fā)的時候,發(fā)現(xiàn)這個 jsre 和 node.js 很相似,很多功能貌似是直接移植過去的,習慣用 node.js 開發(fā)的應(yīng)該比較容易上手。前端貌似沒啥要求,我直接用官網(wǎng)推薦的 vue 進行開發(fā)了,還是比較方便的,直接拷貝代碼就好了 (?ω?)hiahiahia。
不過這么一個單頁面的應(yīng)用,還是整整消耗了我一天的時間,可能是第一次開發(fā),整個過程中也出現(xiàn)了各種各樣的問題,好在最后還是達到預(yù)期效果了,我這也算是全棧開發(fā)了吧 (? ̄▽ ̄)?。
給大家擺上幾行代碼長長見識!? つ: ?? ? ?? : ?-︻╦???????══╤─
const Device = require("device");const deviceMap = new Map(); // 設(shè)備列表集合// 獲取設(shè)備列表Device.list(true, (error, list) => { if (error) { console.error("Device.list error!" + error); } else { list.forEach((item) => { Device.info(item.devid, (error, info) => { if (error) { console.error("Device.info error!" + error); } else { deviceMap.set(item.devid, { devid: item.devid, ...info, }); } }); }); }});// 監(jiān)聽設(shè)備加入Device.on("join", function (devid, info) { deviceMap.set(devid, { devid, ...info }); io.emit("list", [...deviceMap.values()]); // 通過socket.io推送數(shù)據(jù)到前端});// 監(jiān)聽設(shè)備丟失Device.on("lost", function (devid) { deviceMap.delete(devid); io.emit("list", [...deviceMap.values()]); // 通過socket.io推送數(shù)據(jù)到前端});
發(fā)送消息和監(jiān)聽設(shè)備消息也比較簡單:
...const dev = new Device();...// 發(fā)送消息dev.send({unit: "Centigrade"}, (err) => { ...}, 3)// 監(jiān)聽接收設(shè)備發(fā)送的消息device.on("message", function (msg) { ... console.log("message: ", msg) // 可以通過telnet 192.168.128.1 81端口進行查看日志打印 io.emit("message", msg); ...});
實現(xiàn)主要的關(guān)鍵代碼也就上面這些了,一開始我也有點驚訝【淡━━( ̄ー ̄*|||━━定】,這一點代碼就實現(xiàn)了應(yīng)用與設(shè)備之間的通信?不過我后面也替大家測試過了,的確在應(yīng)用與設(shè)備之間打通了數(shù)據(jù)連接。大家感興趣的可以到我的 Gitee 倉庫里面去看完整的通信工具測試代碼,好了好了,不寫了,我要去擼貓了,
本文僅個人學習使用,如有錯誤,歡迎指正, ( ? ˙?˙ )?謝謝老板!
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/118974.html
摘要:嗅探器允許從正在運行的集群中自動發(fā)現(xiàn)節(jié)點并將它們設(shè)置到現(xiàn)有的實例的最小的庫,它默認使用節(jié)點信息檢索屬于集群的節(jié)點,并使用解析獲得的響應(yīng)。可以在找到客戶端嗅探器的。 嗅探器 允許從正在運行的Elasticsearch集群中自動發(fā)現(xiàn)節(jié)點并將它們設(shè)置到現(xiàn)有的RestClient實例的最小的庫,它默認使用節(jié)點信息api檢索屬于集群的節(jié)點,并使用jackson解析獲得的json響應(yīng)。 與Elas...
閱讀 2074·2021-11-16 11:45
閱讀 575·2021-11-04 16:12
閱讀 1376·2021-10-08 10:22
閱讀 854·2021-09-23 11:52
閱讀 4137·2021-09-22 15:47
閱讀 3518·2021-09-22 15:07
閱讀 489·2021-09-03 10:28
閱讀 1735·2021-09-02 15:21