Azure IoT Edge on Windows 10 IoT Core


        在今年的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上安装https://firmware.intel.com/projects/minnowboard-max,笔者写文章时,其最新的版本为0.97,如下图所示,

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

1.2 系统镜像烧写

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

        注意,这里一定要下载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)

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

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

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

        C:\Install-IotEdgeRequirements.ps1

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

        另外,可以通过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,如下图所示:

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

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

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

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,如下图所示。

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

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

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

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

7. 监控数据

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

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

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

        至此,我们已经在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