关于2022 EdgeX中国挑战赛
2022 EdgeX中国挑战赛暨中关村国际前沿科技创新大赛EdgeX专题赛正式拉开帷幕。大赛由北京市科委、中关村管委会指导,由Linux基金会主办,由阿里云、百度智能云、EMQ、GSMA 5G IN、英特尔、InnoSpace、中科创达、VMware、紫竹ET孵化器等联合承办单位共同支持,将在线上线下同步开赛。本次大赛分设两大赛道:健康、教育、消费品行业赛道和工业、能源、供应链赛道。大赛致力于构建一个物联网及边缘计算的学习和分享平台,基于EdgeX Foundry,针对不同赛道的多个应用场景,以共享技术投资解决行业技术问题。除了近40万元人民币总奖池,参赛者还可以获得技术、资本、市场等一系列参赛回报。
为帮助参赛选手更好地了解并运用相关技术,本次大赛将在7月至9月持续开展3轮技术培训,涵盖初、中、高不同层级,帮助开发者系统学习智能边缘系统知识。我们邀请到来自英特尔、VMware、阿里云等多家机构的技术专家进行分享。
初级培训第一场于7月18日举办,由VMware中国研发中心的高级软件工程师张华乔主讲,培训主题为“简要介绍EdgeX及Hello World编程”,演讲内容包括EdgeX Foundry体系架构简介,以及如何使用EdgeX提供的SDK编写一个设备服务连接一个模拟设备,并使其输出HelloWorld信息。下面,让我们共同简单回顾讲座的精彩内容吧!
在培训中,张华乔首先对EdgeX的架构体系和环境准备展开了介绍:
图注:EdgeX架构体系
环境准备主要包括以下几个部分:
Docker最新版本https://docs.docker.com/engine/install/
docker-compose最新版本 https://docs.docker.com/compose/install/
Golang语言开发环境
make命令,VScode IDE工具
EdgeXFoundry v2.2.0部署文件
此次培训还分享了编写Hello World的基础文件资料(云盘链接:https://pan.baidu.com/s/1UTX2Qdmf9NYzNDFx4iX3iQ 提取码: 61nq),包括:
·helloworld-profile.yaml文件
·mock-device可执行程序,支持macOS,Linux,Windows
·EdgeX快速启动部署文件docker-compose-no-secty.yml
随后,他还介绍了EdgeX的快速安装启动步骤:
- 获取EdgeX运行文件
- 云盘资料中的文件docker-compose-no-secty.yml
- 运行EdgeX
- docker-compose -f docker-compose-no-secty.yml up -d
- 查看运行状态
- docker ps
关于访问EdgeX GUI(EdgeX官方GUI由VMware提供和维护):
·打开浏览器,地址栏输入http://<ip>:4000,请替换EdgeX GUI实例运行ip地址
此次培训也对如何使用Device Service SDK编写设备驱动服务展开了详尽的说明:
1:创建工作空间
mkdir -p ~/edgexfoundry
2:下载device service SDK开发包
cd ~/edgexfoundry
git clone --depth 1 --branch v2.2.0 https://github.com/edgexfoundry/device-sdk-go.git
3:创建设备驱动服务项目
推荐命名方式device-<protocol>,protocol的依据实际协议名命令,比如modbus,mqtt,rest。
mkdir -p ~/edgexfoundry/device-simple
4:从SDK开发包添加device service模板工程
cd ~/edgexfoundry
cp -rf ./device-sdk-go/example/* ./device-simple/
5:添加Makefile和Version文件
cp ./device-sdk-go/Makefile ./device-simple/
cp ./device-sdk-go/version.go ./device-simple/
6:使用VScode打开cmd/device-simple/main.go文件修改相关依赖路径
找到红色行,用绿色部分替换
github.com/edgexfoundry/device-sdk-go/v2/example/driver ==>github.com/edgexfoundry/device-simple/driver
github.com/edgexfoundry/device-sdk-go/v2 ==>github.com/edgexfoundry/device-simple
7:使用VScode打开Makefile文件,找到如下红色部分,用绿色部分替换掉
MICROSERVICES=example/cmd/device-simple/device-simple ==>
MICROSERVICES=cmd/device-simple/device-simple
GOFLAGS=-ldflags "-X github.com/edgexfoundry/device-sdk-go/v2.Version=$(VERSION)" ==>
GOFLAGS=-ldflags "-X github.com/edgexfoundry/device-simple.Version=$(VERSION)"
example/cmd/device-simple/device-simple:
$(GOCGO) build $(GOFLAGS) -o $@ ./example/cmd/device-simple
==>
cmd/device-simple/device-simple:
$(GOCGO) build $(GOFLAGS) -o $@ ./cmd/device-simple
8:执行如下命令初始化golang mod模式
cd ~/edgexfoundry/device-simple
GO111MODULE=on go mod init github.com/edgexfoundry/device-simple
9:编辑上一步产生的go.mod文件,添加如下语句:
require (
github.com/edgexfoundry/device-sdk-go/v2 v2.2.0
github.com/edgexfoundry/go-mod-core-contracts/v2 v2.2.0
)
10:执行如下命令整理依赖库
cd ~/edgexfoundry/device-simple
go mod tidy
11:执行make build 编译验证是否成功
cd ~/edgexfoundry/device-simple
make build
12:编辑driver/simpledriver.go文件自定义实现逻辑
(1)在文件的导入语句之后添加变量var messageValue string = "Hello EdgeXFoundry!"
(2)找到ValidateDevice()方法,清空或注释掉方法内的代码
(3)在HandleReadCommands()函数中删掉if else语句,添加如下代码:
res = make([]*sdkModels.CommandValue, len(reqs))
for i, req := range reqs {
if reqs[i].DeviceResourceName == "getMessage" {
cmdResp,_:=sdkModels.NewCommandValue(req.DeviceResourceName,common.ValueTypeString,messageValue)
res[i] = cmdResp
}
}
(4)在HandleWriteCommands()函数中删掉所有代码,添加如下代码:
for i, r := range reqs {
switch r.DeviceResourceName {
case "setMessage":
messageValue = params[i].ValueToString()
}
}
return nil
13:修改res/configuration.toml文件(可选,EdgeX实例和开发环境在不同宿主机下时需要更改)
更改当前simple-service主机地址
更改所有EdgeX服务客户端地址
14:编译运行
export EDGEX_SECURITY_SECRET_STORE=false
cd ~/edgexfoundry/device-simple
make build
cd ~/edgexfoundry/device-simple/cmd/device-simple
./device-simple
15:打开EdgeX GUI查看设备服务状态
浏览器中输入http://localhost:4000
导航至Metadata >Device Service页面,查看是否注册成功
16:添加helloworld profile文件
EdgeX GUI导航至Metadata >Device Profile页面
点击添加按钮进入添加页面,拖拽helloworld-profile.yaml文件到编辑器区域
(或者使用编辑器打开helloworld-profile.yaml文件,粘贴复制)
17:添加设备
EdgeX GUI导航至Metadata >Device页面
点击添加按钮进入添加设备页面,跟随添加向导完成设备添加
18:测试设备指令
EdgeX GUI导航至Metadata >Device页面
找到新添加的device,点击Command列按钮,选中左侧命令
在右侧点击Get方法面板的 try按钮,输出Hello EdgeXFoundry!
在右侧Set方法面板输入参数,点击try按钮
在右侧Get方法面板再次点击try按钮验证输出改变
19:使用mock device测试实际场景(以下步骤可选)
打开一个新的命令行终端,执行如下命令启动mock device:
windows平台:.\mock-device.windows --port=9090
Linux系统:./mock-device.linux --port=9090
MacOS系统:./mock-device.macos --port=9090
20:修改device-simple/driver/simpledriver.go文件
(1)文件开头导入语句之后添加如下代码
(2)删除HandleReadCommands()函数内前一步的旧代码,添加如下新代码:
21:重新编译运行
cd ~/edgexfoundry/device-simple
make build
cd ~/edgexfoundry/device-simple/cmd/device-simples
./device-simple
22:GUI上更新device,添加连接协议
Protocol Name输入框填http
创建三个属性值,分别如下:
host = localhost
port = 9090
path = /api/v1/message
23:测试设备指令
EdgeX GUI导航至Metadata >Device页面
找到更新后的device,点击Command列按钮,选中左侧命令
在右侧点击Get方法面板的 try按钮,输出Hello EdgeXFoundry from mock device!
在培训的最后,张华乔提出了几点特别说明:
·实际开发中,应该以协议名替换掉所有的simple关键字
·这里只演示单个设备指令,生产开发,应支持多指令并发,错误处理等事项
·简化官方教程的冗余步骤,减轻开发者踩坑负担
·补充了官方文档和SDK不清晰的步骤
2022 EdgeX中国挑战赛已于8月3日盛大开幕,EdgeX中文社区将在接下来的日子里为大家带来更多边缘计算讲座分享和赛事进度更新。在这个盛夏,让我们一起展现风采,从自身所学的领域出发,为物联网、边缘计算市场提供更多更好的解决方案,展望一个更好的科技未来。