IIoT 边缘开发——使用 WebSockets
编者注:工业物联网 (IIoT) 承诺提供对工业运营的深入洞察,并提高互联机器和系统的效率。大规模 IIoT 应用程序依赖分层架构从各种传感器收集数据,将数据可靠、安全地移动到云中,并执行提供洞察力和效率所需的分析。在工业互联网应用程序开发中,作者详细介绍了 IIoT 架构,并讨论了满足与这些系统相关的广泛要求的方法。
改编自工业互联网应用开发,作者:Alena Traukina、Jayant Thomas、Prashant Tyagi、Kishore Reddipalli。
第 3 章 IIoT 边缘开发(续)
作者:Alena Traukina、Jayant Thomas、Prashant Tyagi、Kishore Reddipalli
应用级协议——WebSocket
在本节中,我们将尝试构建一个简单的 IoT 应用程序,用于使用 Raspberry Pi 集线器和 WebSocket 协议将数据从 XD-80 光传感器模块发送到接收器设备:
从 XD-80 传感器到接收器设备的数据流
WebSocket 最广泛用于需要快速传输实时数据的情况。该协议允许客户端和服务器之间的双向交互,以及使用相同的 TCP 连接流式传输多条消息,从而降低了通信开销。
在下表中,您可以找到该协议的更详细说明,以了解它是否适合您的需求:
键 价值 开源是OSI层应用数据类型字符串限制不适合大量二进制数据可能的操作发送/接收数据延迟非常低使用实时通信安全性是压缩是表 3:WebSocket 协议规范
为了构建应用程序,我们需要以下内容。
所需软件:
- Node.js 6+ (https:// /nodejs.org/en/download/ 字体> )
- RPIO (https://www.npmjs.com/package/rpio )
- WebSocket (https://www.npmjs.com/package/ws )
- Docker (https://docs.docker.com/engine/installation/ )
所需硬件:
- 树莓派 3(B 型)
- 一个电源适配器 (2A/5V)
- 一张 microSD 卡 (8 GB+) 和一个 SD 适配器
- XD-80 光传感器模块
- 一块面包板和一套杜邦电缆
- 用于有线网络连接的以太网电缆
组装设备
在构建应用程序之前,您需要通过面包板将 XD-80 传感器连接到 Raspberry Pi。
准备一张SD卡
要准备 SD 卡,请按照所述的操作顺序进行操作:
- 下载最新的 Raspbian LITE 图像(可在 https://raspberrypi.org/downloads/raspbian/ ).
- 将您的 SD 卡连接到计算机并使用 Etcher (https://io/ ) 来刷新 Raspbian .img 文件到 SD 卡。
- 使用以下命令启用 SSH:
cd /Volumes/boot
触摸 ssh 字体>
- 要启用 Wi-Fi,请创建 conf 具有以下内容:
network={
ssid=”YOUR_SSID”
psk=”YOUR_WIFI_PASSWORD”
}
- 创建/home/pi/sensor
- 创建/home/pi/sensor/package.json 包含以下内容的文件:
{
“名称”:“传感器”,
“版本”:“1.0.0”,
“说明”:“”,
“main”:“index.js”,
“脚本”:{
“start”:“node index.js”,
“test”:“echo”错误:未指定测试” &&exit 1″
},
“作者”:“”,
“许可证”:“ISC”,
“依赖项”:{“rpio”: “^0.9.16”,
“ws”:“^2.3.1”
}
}
- 创建/home/pi/sensor/index.js 文件内容如下,替换 REMOTE-SERVER-ADDRESS.com 具有实际价值:
var WebSocket =require('ws');
var rpio =require('rpio');
var ws;
varreceiver ='ws://REMOTE-SERVER-ADDRESS.com:8080';
rpio.open(11, rpio.INPUT);
varestablishConnection =function () {<登记/> WS =新的WebSocket(接收机);
ws.on( '关闭',establishConnection);
ws.on( '错误',establishConnection);
};
establishConnection();
var sendStatus =function () {
var status =rpio.read(11) ===0;
console.log('light status:'+状态);
VAR数据=JSON.stringify({
设备: '覆盆子',
时间戳:Date.now(),
光:状态
});
try { ws.send(data); }
赶上(E){的console.log( '未能发送数据为' +接收器);}
的setTimeout(sendStatus,1000);
};
sendStatus();
字体>
- 创建/home/pi/sensor/Dockerfile 包含以下内容的文件:
FROM hypriot/rpi-node:boron-onbuild
物联网技术