初次嘗試!在 Spirit 1 實作 DDC 協議的嗅探器
之前入手了一個搭載了智能邊緣計算系統EdgerOS 的設備Spirit 1,通過該設備我們可以將應用與設備連接起來,通過 javascript 應用可以來控制連接的設備,之前就準備弄一個基于 SDDC 協議的紅外溫度感應的設備接到這個Spirit 1上,來檢測下我房間的溫度的,關于紅外溫度感應設備的開發可以參考這篇文章:基于ESP32S 的第一個應用-紅外測溫槍,
通過 SDDC 協議在愛智的設備應用中掃描、發現、最后添加設備到 Spirit 1上后問題來了(愛智上如何添加設備可以參考這篇文章:邊緣計算機 Spirit 1 初體驗),我突然意識到自己不知道 Spirit 1 收沒收到訊息,然后進官網摸索了一個多小時,最終得出了一個結論,他們沒有提供可測驗的入口 (ノ=Д=)ノ┻━┻,不過好在他們官網我倒是找到了幾個小demo,按照官網上的說法,我應該可以自己寫一個應用,然后部署到 Spirit 1,這樣就可以通過手機去控制設備,同樣設備發訊息之后我也可以通過應用去獲取對應訊息內容,
立馬我就去官網掃了一下應用開發說明,找到了一個實作這方面功能的模塊 device ,唯一不足的是這個模塊是 Spirit 1 里面的內置模塊,不能在其他系統環境中使用,只支持ZDDC和SDDC協議,不過我這個紅外溫度感應的就是基于這個SDDC協議的,所以沒啥大問題,最后我只能自己去實作一個可以除錯的工具應用了, 為此我還特地花費了一晚上去看他們這個應用開發,終于搞出了一個非常非常非常 low 的測驗應用,最終也部署上去了,
看一下我最終的成果(wohahaha…省略一萬字):

我這里就簡單實作了一下,頁面畫的有點磕磣,只能將就著用了,加了一個設備的選擇框,一個發送資料的編輯框,一個設備回應的顯示框,
使用的話也比較簡單,選中一個設備,然后構建一下要發送的指令訊息,然后點擊send,應用后端會通過 device 模塊將資料在 Spirit 1 中進行處理,最后發送到我寫的紅外測溫的設備中,設備收到訊息后會回傳給 Spirit 1 當前的環境溫度和目標溫度,而我的應用后端通過 device 模塊也會監聽到設備發送的訊息,并在前端將其列印出來,這樣我以后開發的時候就可以測驗設備和 Spirit 1 之間的通信了,只能對自己說一句:忒牛 ?( ?????ω????? )? ,
A FEW MOMENT LATER …
…
下面正經的和大家講一下實作的技術難點(我胡扯的,(?ω?) hiahiahia),其實實作上面的功能非常的 So Easy,我只用到了官網提供的一個內置模塊 device 就完成了,不過我在根據官網說明檔案進行開發的時候,發現這個 jsre 和 node.js 很相似,很多功能貌似是直接移植過去的,習慣用 node.js 開發的應該比較容易上手,前端貌似沒啥要求,我直接用官網推薦的 vue 進行開發了,還是比較方便的,直接拷貝代碼就好了 (?ω?)hiahiahia,
不過這么一個單頁面的應用,還是整整消耗了我一天的時間,可能是第一次開發,整個程序中也出現了各種各樣的問題,好在最后還是達到預期效果了,我這也算是全堆疊開發了吧 (? ̄▽ ̄)?,
給大家擺上幾行代碼長長見識!? つ: ?? ? ?? : ?-︻╦???????══╤─
const Device = require('device');
const deviceMap = new Map(); // 設備串列集合
// 獲取設備串列
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,
});
}
});
});
}
});
// 監聽設備加入
Device.on('join', function (devid, info) {
deviceMap.set(devid, { devid, ...info });
io.emit('list', [...deviceMap.values()]); // 通過socket.io推送資料到前端
});
// 監聽設備丟失
Device.on('lost', function (devid) {
deviceMap.delete(devid);
io.emit('list', [...deviceMap.values()]); // 通過socket.io推送資料到前端
});
發送訊息和監聽設備訊息也比較簡單:
...
const dev = new Device();
...
// 發送訊息
dev.send({unit: 'Centigrade'}, (err) => {
...
}, 3)
// 監聽接收設備發送的訊息
device.on('message', function (msg) {
...
console.log('message: ', msg) // 可以通過telnet 192.168.128.1 81埠進行查看日志列印
io.emit('message', msg);
...
});
實作主要的關鍵代碼也就上面這些了,一開始我也有點驚訝【淡━━( ̄ー ̄*|||━━定】,這一點代碼就實作了應用與設備之間的通信?不過我后面也替大家測驗過了,的確在應用與設備之間打通了資料連接,大家感興趣的可以到我的 Gitee 倉庫里面去看完整的通信工具測驗代碼,好了好了,不寫了,我要去擼貓了,
本文僅個人學習使用,如有錯誤,歡迎指正, ( ? ˙?˙ )?謝謝老板!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/297209.html
標籤:其他
