将Azure IoT Edge v1引入PINE64

简要概括

broker.png
e585a8e4bd93e59bb3.png

在之前的文章中,我们尝试将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之后,添加设备并获取连接字符串如下所示。

e59bb33.png

修改设置文件

编辑下方的文件

 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内的配置,我会在另一篇文章中进行详细介绍。

powerbi.png
广告
将在 10 秒后关闭
bannerAds