将Azure IoT Edge v1引入PINE64
简要概括
在之前的文章中,我们尝试将Modbus设备的数据连接到PowerBI的仪表板上。这一次,我想更深入地尝试一下用于网关的软件。关于这部分,请参考之前的文章。
– 我想继续使用之前的Modbus设备连接。
– 我们会安装USB转RS485转换适配器。这部分和之前的文章几乎一样。
– 它将成为/dev/ttyUSB0设备文件。我们将更改权限。
– 我们将构建和安装libmodbus。
– 我们还将构建之前创建的C语言代码。
我们将在PINE64上安装Ubuntu 16.04。安装完成后,我们会通过以下步骤将其更新到最新状态。
sudo apt-get update
sudo apt-get upgrade
接下来我们将构建IoT Edge。需要考虑的是要使用哪种语言来进行自定义。我打算配置Node.js的Binding。
最需要考虑的是Node.js的版本。由于Node.js的升级很繁琐,所以在配置管理中选择使用哪个版本非常重要。IoT Edge推荐使用Node LTS。
安装Ubuntu16.04后,可以使用apt获取的nodejs版本为4.2.6。目前最新的LTS版本是6.11.1,但是4.2.6版本也没有问题,因此我们决定直接使用它。
构建和部署IoT Edge
引入相互依存关系
sudo apt-get update
sudo apt-get install nodejs-legacy npm git
sudo apt-get install curl build-essential libcurl4-openssl-dev git cmake pkg-config libssl-dev uuid-dev valgrind libglib2.0-dev libtool autoconf
在PINE64上,我毫無困難地完成了導入。
在git上将源代码克隆
克隆并递归获取https://github.com/Azure/iot-edge.git上的代码资料。
绑定模块的构建
你可以使用以下脚本进行构建。
cd <azure_iot_gateway_sdk_root>/tools/
./build_nodejs.sh
设置用于构建的路径。
当成功构建时,将显示下面的内容并进行配置。
export NODE_INCLUDE <<ビルド終了後表示されるパス>>
export NODE_LIB <<ビルド終了後表示されるパス>>
物联网边缘的构建
./build.sh –enable-nodejs-binding
cd ../samples/nodejs_simple_sample/nodejs_modules/
npm install
所需的Node.js模块将被复制到nodejs_modules文件夹下。
访问Azure门户,在其中创建iothub。
在创建iothub之后,添加设备并获取连接字符串如下所示。
修改设置文件
编辑下方的文件
cd <azure_iot_gateway_sdk_root>/samples/nodejs_simple_sample/src/
gateway_sample_lin.jsonを編集
将 IoT Hub 设备连接字符串替换为连接字符串。
我会执行一次样本试验。
cd ../../../build/samples/nodejs_simple_sample/
./nodejs_simple_sample ../../../samples/nodejs_simple_sample/src/gateway_sample_lin.json
通过Modbus命令获取室温和湿度
在定制样本并从命令中获取数据后,将其集成到Iot-Edge中。对sensor.js进行修改。该命令已经以testmodbus的名称进行构建。
try{
const execSync = require('child_process').execSync;
var result = execSync('/home/ubuntu/testmodbus /dev/ttyUSB0').toString();
var data=result.split(",");
this.broker.publish({
properties: {
'source': 'sensor'
},
content: new Uint8Array([data[0]/10,data[1]/10])
});
}
catch(e){
}
模块之间以Uint8Array数据类型进行交流。
将获取到的温度和湿度设置为属性名。
自定义Iothub_writer.js
receive(message) {
if(this.connected) {
var a = {temperature:message.content[0],humidity:message.content[1]};
var m = new Message(JSON.stringify(a));
if(message.properties) {
for(var prop in message.properties) {
m.properties.add(prop, message.properties[prop]);
}
}
如果再次执行以下操作,将向IoTHub发送数据。
./nodejs_simple_sample ../../../samples/nodejs_simple_sample/src/gateway_sample_lin.json
这是将从IotHub接收到的数据在PowerBi中可视化的结果。关于如何使用Time Series Insights以及在Azure内的配置,我会在另一篇文章中进行详细介绍。