Skip to main content

设置Azure IoT Edge模块的开发环境和Hello World

分类:  Azure物联网 标签:  #Azure #IoT Edge # 发布于: 2023-06-14 21:32:44

我们之前学习的文章都是理解什么是Azure IoT Edge, 跟着学习了如何安装Azure IoT Edge runtime, 以及如何部署Azure IoT Edge设备,同时也学习了如何使用自动部署来部署Azure IoT Edge的模块,同时我们也理解了Azure IoT Edge提供的两个系统模块的用途以及分工。但是我们一直没有学习如何进行Azure IoT Edge的模块开发,本站开始学习一下Azure IoT Edge模块是如何开发的。

从之前的学习中我们理解了Azure IoT Edge模块就是使用容器封装好的一个镜像,我们开发好这个镜像之后可以上传到某个容器镜像库里,然后通过该库对我们自行开发的模块进行部署到IoT Edge设备上,这个部分我们前面已经是学习过了。

工欲善其事必先利其器,要开发Azure IoT Edge的模块,我们首先需要准备好开发环境,在本节,我们主要使用的工具/环境如下:

  • 用于开发的开发机器:windows 10/windows 11 均可以。
  • Docker Desktop 版本,选择基于Linux的容器。
  • 微软的编辑器:Visual Studio Code 以及插件 AzureAzure IoT Tools

那么我先来设置自己的开发环境。

安装Docker Desktop

我们从官网就可以下载到Docker Desktop了,下载地址是:https://docs.docker.com/desktop/windows/install/, 您可以从这个网络学习到如何在Windows上安装Docker

安装Visual Studio Code

我们简短的使用如下的步骤来安装Visual Studio Code:

  • 从这里下载VS code和安装: https://code.visualstudio.com/
  • 安装成功后,启动VS Code, 选择view -> Extensions
  • 搜索插件Azure IoT Tools, 该插件还会依赖安装Azure插件。
  • 插件安装完成后,选择View -> Command Palette, 或者直接用快捷键:Ctrl + Shift + P也可以打开Command Palette模式。
  • 在命令输入板(Command Palette),输入:Azure:Sign into Azure Cloud, 选择你所在的Azure 区域,例如Azure China, 跟着命令登录成功。
  • 继续使用快捷键打开Command Palette, 然后输入:Azure IoT Hub: Select IoT Hub选择你所在的订阅的IoT Hub。
  • Explorer面板(一般是左侧面板最上面第一个图标就是Explorer, 也可以使用快捷键:Ctrl + Shift + E)
  • Explorer面板上可以找到Azure IoT Hub的面板,找到你所在的设备和hub, 如下图:


创建一个Container registry

您可以直接使用DockerDocker hub, 也可以像本章一样使用Azure提供的Container registry

采用如下的步骤创建一个Container registry:

  • 登录到Azure
  • 搜索Container registry
  • 按照提示创建成功后,找到overview页面,然后选择Access Keys, 启用Admin User, 如下图:


到这里算是开发环境准备好了,现在我们需要尝试使用这套开发环境来进行一个简单的Hello World的模块开发。

新项目的开发

按照上面的配置,配置好了环境之后,一定要记得启动Docker for Desktop

然后打开Vs Code, 使用快捷键Ctrl + Shift + P打开Command Palette, 输入:Azure IoT Edge: New IoT Edge Solution, 然后跟着弹出的窗口提示创建一个新的IoT Edge 方案:

步骤Value
选择文件夹(Select folder)选择您的开发机器上使用哪个目录保存Azure IoT Edge的项目
给您的项目起一个名字(Provide a solution name)给自己的项目起一个名字就好了,这一步,例如Demo1Solution
选择一个模型模板(Select module template)我们这个项目选择Choose C# Module
给你要开发的模块起一个名字(Provide a module name)我们这个快速项目就接受默认的名字好了SampleModule
提供一个docker的注册库(Provide Docker image repository for the module)我们之前创建Azure Container Registry

如下图:


设置Azure IoT Edge runtime的版本号

Vs Code上使用快捷键Ctrl + Shift + P打开Command Palette, 输入Azure IoT Edge: Set Default IoT Edge Runtime Version, 选择你需要的版本,目前建议1.21.1

设置目标机器的架构

Vs Code上使用快捷键Ctrl + Shift + P打开Command Palette, 输入Azure IoT Edge: Set Default Target Platform for Edge Solution, 我们这里选择amd64

设置你的容器镜像服务器的登录账号

Vs Code里打开文件.env, 如下所示:

CONTAINER_REGISTRY_USERNAME_docker=你的用户名
CONTAINER_REGISTRY_PASSWORD_docker=你的登录密码

至此您的第一个项目就算是创建好了,如下图:


这里有一些需要注意的文件和目录:

  • .vscode目录是vs code用于启动配置项目插件等等, 例如文件launch.json用于定义调试模块。
  • modules, 包含我们要开发的模块的所有文件,一个模块一个文件夹
  • .env: 该文件保存容器镜像库的登录信息,可以和Azure IoT Edge设备分享,用于下载模块的镜像。
  • 文件deployment.debug.template.jsondeployment.template.json文件帮助用户用于定义部署文件。

到这一步我们已经有了一个开发环境,并且也有了一个用于测试的项目,您可以尝试采用如下的步骤来发布:

  • 使用View->Terminal或者是快捷键打开一个终端。
  • 在终端里输入:docker login -u <ACR username> -p <ACR password> <ACR login server>
  • 在终端里输入:az acr login -n <ACR registry name>
  • 在右侧找到文件deployment.template.json, 然后右键Build and Push IoT Edge Solution, 如下图就可以将这个项目发布到您的容器库中。

另外在机器上启动docker, 并且由于项目目录有.devcontianer, VS Code会建议你从remote-container里打开项目,这个会需要一段时间,不过这个很好用。

至此全部结束了,下一节,我们学习如何开发一个自定义的Azure IoT Edge模块。