资讯专栏INFORMATION COLUMN

初次尝试!在 Spirit 1 实现 DDC协议嗅探器

Reducto / 451人阅读

摘要:看一下我最终的成果省略一万字我这里就简单实现了一下,页面画的有点磕碜,只能将就着用了。加了一个设备的选择框,一个发送数据的编辑框,一个设备响应的显示框。

初次尝试!在 Spirit 1 实现 DDC 协议的嗅探器

之前入手了一个搭载了智能边缘计算系统EdgerOS 的设备Spirit 1,通过该设备我们可以将应用与设备连接起来,通过 javascript 应用可以来控制连接的设备,之前就准备弄一个基于 SDDC 协议的红外温度感应的设备接到这个Spirit 1上,来检测下我房间的温度的,关于红外温度感应设备的开发可以参考这篇文章:基于ESP32S 的第一个应用-红外测温枪
通过 SDDC 协议在爱智的设备应用中扫描、发现、最后添加设备到 Spirit 1上后问题来了(爱智上如何添加设备可以参考这篇文章:边缘计算机 Spirit 1 初体验),我突然意识到自己不知道 Spirit 1 收没收到消息,然后进官网摸索了一个多小时,最终得出了一个结论,他们没有提供可测试的入口 (ノ=Д=)ノ┻━┻。不过好在他们官网我倒是找到了几个小demo,按照官网上的说法,我应该可以自己写一个应用,然后部署到 Spirit 1,这样就可以通过手机去控制设备,同样设备发消息之后我也可以通过应用去获取对应消息内容。

立马我就去官网扫了一下应用开发说明,找到了一个实现这方面功能的模块 device ,唯一不足的是这个模块是 Spirit 1 里面的内置模块,不能在其他系统环境中使用,只支持ZDDCSDDC协议,不过我这个红外温度感应的就是基于这个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.ucloud.cn/yun/118974.html

相关文章

  • Elasticsearch Java Low Level REST Client(探器

    摘要:嗅探器允许从正在运行的集群中自动发现节点并将它们设置到现有的实例的最小的库,它默认使用节点信息检索属于集群的节点,并使用解析获得的响应。可以在找到客户端嗅探器的。 嗅探器 允许从正在运行的Elasticsearch集群中自动发现节点并将它们设置到现有的RestClient实例的最小的库,它默认使用节点信息api检索属于集群的节点,并使用jackson解析获得的json响应。 与Elas...

    hiYoHoo 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<