Azure IoT Edge on Windows 10 IoT Core

时间:2024-01-14 12:37:02

在今年的Build大会上,微软推出了Azure IoT Edge的第一个版本(https://github.com/Azure/iot-edge )。该版本的主要特点就是将计算能力由Azure端推送至边缘设备Azure IoT Edge,减少了数据在云端传输耗费的时间,加快响应时间。举例来说,Azure IoT Edge设备可以作为网关设备,进行数据的预处理和分析,以减少IoTHub数据传输的延迟时间。同时,该版本支持多种现场总线的设备将数据接入Azure IoT Edge设备,再由Azure IoT Edge设备统一与Azure IoTHub进行数据交互。

在今年11月份的Connect大会上,微软宣布对Azure IoT Edge公开预览版(文档链接为:https://docs.microsoft.com/en-us/azure/iot-edge ),已在美国中西部、北欧和东亚地区上线,其他区域也将分批开通。Azure IoT Edge支持Windows、Linux、x64与ARM等平台与架构,可使用基于Docker的Linux或Windows容器。支持C#、C与Python等开发语言。微软同时也发布了适用于Azure IoT Edge的AI套件,以协助开发人员进行边缘AI的应用开发(https://github.com/Azure/ai-toolkit-iot-edge)。

本文将以运行Windows 10 IoT Core的MinnowBoard MAX为例,详细讲述Windows 10 IoT Core(Build 16299)的安装、Docker的部署、Python和Iotedgectl工具的安装、IoT Edge Device的创建、Module的部署与运行。

1. 在MinnowBoard MAX上安装Windows 10 IoT Core(Build 16299)

MinnowBoard MAX是相对而言比较老的板子了,其处理器是Intel Atom的E8325,双核1.3G的主频,可以运行64位的系统。要在MinnowBoard MAX运行Windows 10 IoT Core Build 16299(因为运行Azure IoT Edge运行时的最低系统版本是16299),需要进行固件更新、系统镜像烧写和Bios设置这三个步骤。

1.1 固件更新

固件更新需要到Intel的官网下载下载最新文件,链接地址为:https://firmware.intel.com/projects/minnowboard-max,笔者写文章时,其最新的版本为0.97,如下图所示,

Azure IoT Edge on Windows 10 IoT Core

然后,请参考《Windows 10 IoT Serials 1 - 针对Minnow Board MAX的Windows 10 IoT开发环境搭建》一文的第3部分文档,更新固件。需要注意的是,目前微软发布的针对Minnow Board MAX的Windows 10 IoT Core就是64位的,所以,更新的固件也要选择64位版本的。也就是说,需要用的文件是两个64位固件相关的文件,如下图所示。

Azure IoT Edge on Windows 10 IoT Core

1.2 系统镜像烧写

系统镜像烧写,最简单的方法就是下载官方的Windows 10 IoT Core Dashboard 软件,点击设置新设备,选择设备类型、OS版本、设备名称,设置要密码,点击下载并安装。

Azure IoT Edge on Windows 10 IoT Core

注意,这里一定要下载16299版本以上的OS。

1.3 BIOS设置

系统镜像烧写完成以后,需要设置Minnow Board MAX的BIOS,主要修改的是Boot的顺序。具体方法可以参考参考《Windows 10 IoT Serials 1 - 针对Minnow Board MAX的Windows 10 IoT开发环境搭建》一文的第5部分文档,依次完成对“Manager -> System Setup -> South Cluster Configuration -> LPSS & SCC Configuration”和“Boot Mainenance Manager-> Boot Options > Change Boot Order”的设置。

2. Docker的部署

系统安装完成之后,给Minnow Board MAX连接网线,上电。第一次运行的时候,会经历一些设置,所以速度相对较慢。系统运行以后,实用PowerShell工具连接局域网内的Minnow Board MAX设备,具体可以参考这个文档《login remotely with PowerShell》。注意,这里实用的用户名和密码就是之前烧写系统镜像时候设置的。

之后,逐步运行以下指令:

Invoke-WebRequest https://master.dockerproject.org/windows/x86_64/docker-17.06.0-dev.zip -o temp.zip

Expand-Archive .\temp.zip $env:ProgramFiles -f

Remove-Item .\temp.zip

$env:Path += ";$env:programfiles\docker"

SETX /M PATH "$env:Path"

dockerd --register-service

start-service docker

以上脚本运行之后,会在Minnow Board MAX设备上安装Docker,设置环境变量,并启动Docker服务。

3. IoT Edge运行时的安装

在PowerShell中,运行以下脚本:

Invoke-Expression (Invoke-WebRequest -useb https://aka.ms/iotedgewin)

注意,该指令会按照脚本文件执行,如果不做更改的话,会提示以下错误。

Azure IoT Edge on Windows 10 IoT Core

即下载安装的Docker版本是17.06,但是,打开下载的PowerShell脚本会发现,里面的要求是17.09,所以,需要下载该脚本文件,并对其中的第38行的DockerVersion进行修改,将17.09改为17.06,如下图所示。

Azure IoT Edge on Windows 10 IoT Core

修改之后,通过文件共享、FTP等方式,将该文件传输到Minnow Board MAX设备上,如C盘根目录,之后,通过PowerShell执行以下指令:

C:\Install-IotEdgeRequirements.ps1

这样,就通过PowerShell来执行本地的脚本文件了,这个过程中,会下载Python和IoTedgectl工具,根据网络连接的情况,可能会占用较长的时间。如果下载和安装正确的话,会通过PowerShell返回提示,如下图所示。

Azure IoT Edge on Windows 10 IoT Core

另外,可以通过iotedgectl help命令查看其能够接受的命令。

现在,我们需要通过Docker将IoTedge Agent 和 IoTedge Hub这两个模块 Pull到本地,即在PowerShell中分别运行:

docker pull microsoft/azureiotedge-agent:1.0-preview

docker pull microsoft/azureiotedge-hub:1.0-preview

如果一切安装正常的话,到这一步就完成安装了。

4. IoT Edge Device的创建

目前,IoT Edge Device是通过Azure IoTHub来通信的,所以,需要在Azure订阅上创建一个IoTHub,具体可以参考《Create an IoT hub using the Azure portal》。注意,免费的F1级别已经足够。

创建IoTHub之后,可以选择IoT Edge (preview) -Add IoT Edge Device,如下图所示:

Azure IoT Edge on Windows 10 IoT Core

输入名称,以“MinnowBoard”为例,点击OK。

等待创建完成之后,进入设备信息页面,拷贝其连接的Connection String,如下图所示。

Azure IoT Edge on Windows 10 IoT Core

5. IoT Edge Runtime的部署与配置

IoT Edge runtime由两个模块组成,即IoT Edge agent和IoT Edge hub。IoT Edge agent负责部署并监控部署到IoT Edge设备上的Modules。IoT Edge hub负责部署的Modules之间的通信、以及设备和IoTHub总线的通信。

其配置同样通过PowerShell执行:

iotedgectl setup --connection-string "{device connection string}" --auto-cert-gen-force-no-passwords

其中的"{device connection string}"由上面第4步中保存的Connection String来代替。

之后,就可以通过以下指令开始运行:

iotedgectl start

同时,可以通过以下指令来检查IoT Edge agent是否已经运行:

docker ps

Azure IoT Edge on Windows 10 IoT Core

6. 部署一个Module

Azure IoT Edge其中一个重要的特性就是支持云端动态部署Module到IoT Edge Device端。每个Module都是在容器中运行的程序包。Module支持Azure Service,如Azure Functions, Azure Stream Analytics和 Azure Machine Learning;也支持用户自定义的Module,可以用Java, .NET Core 2.0, Node.js, C, and Python等多种语言实现。

这里,我们利用微软已写好的Module进行部署,该Module会每隔5秒钟产生温湿度、大气压的数据,并上传到IoTHub。具体步骤如下:

首先,在Azure Portal中,导航到刚刚创建的IoTHub,依次点击“IoT Edge (preview)”-“Set Modules”-“Add IoT Edge Module”,在弹出的设置页面中,点击Add IoT Edge Module,如下图所示。

Azure IoT Edge on Windows 10 IoT Core

输入名称和“Image URI”,其中“Image URI”设置为:

microsoft/azureiotedge-simulated-temperature-sensor:1.0-preview

其他的设置为默认,如下图所示。

Azure IoT Edge on Windows 10 IoT Core

后续的设置为默认,最后点击Submit提交。回到设备页面之后,发现下面的Deployed Module中,mytemp已经开始运行。

Azure IoT Edge on Windows 10 IoT Core

7. 监控数据

监控IoT Edge Device设备与IoTHub交互的数据,可以实用Azure Device Explorer工具,该工具在Github上有下载:https://github.com/Azure/azure-iot-sdk-csharp/releases

目前最新的版本是1.4.1。下载安装之后,在Configuration页面输入IoTHub的连接字符串,点击Update:

Azure IoT Edge on Windows 10 IoT Core

之后,就可以在Data页面中,选择设备,进行数据监控了,如下图所示。

Azure IoT Edge on Windows 10 IoT Core

至此,我们已经在MinnowBoard上完成了Windows 10 IoT Core(Build 16299)的安装,进行了Docker的部署和Python、Iotedgectl工具的安装,同时,在Azure Portal上完成了IoT Edge Device的创建、Module的部署与运行。同时,通过Azure Device Explorer工具监控Edge Device和Azure IoTHub数据的交互。

参考链接:

1. Azure IoT Edge V1:https://github.com/Azure/iot-edge

2. Azure IoT Edge V2:https://docs.microsoft.com/en-us/azure/iot-edge

3. Azure IoT Edge AI Kits:https://github.com/Azure/ai-toolkit-iot-edge

4. Windows 10 IoT Serials 1 - 针对Minnow Board MAX的Windows 10 IoT开发环境搭建

5. MinnowBoard固件更新:https://firmware.intel.com/projects/minnowboard-max

6. Windows IoT Core镜像烧写工具: Windows 10 IoT Core Dashboard

7. Azure IoTHub创建:Create an IoT hub using the Azure portal

8. Azure Device Explorer工具下载:https://github.com/Azure/azure-iot-sdk-csharp/releases