EdgeX on Raspbian 3b+ 部署教程

概述

本文讲述如何在树莓派3B+上通过docker拉取镜像,并运行edgex 微服务,达到在树莓派3B+上完成edgex-device-random测试的目标

Edgex Foundry 简介

EdgeX Foundry 旨在创建一个通用的、开源的、厂商中立的边缘计算软件平台。所谓边缘就是与物理世界的设备、传感器、执行器等物联网设备直接交互的网络端。EdgeX 平台帮助、鼓励快速发展的物联网解决方案提供商在一个可互操作的模块组件生态中互相合作。

1.准备工作

准备一个树莓派3b+开发板,一个空的u盘,一个空的32g SD卡,树莓派配套用的显示器、鼠标、键盘等外设。

Raspberry Pi 3 Model B +

2.安装系统

①在EdgeX官网下载为树莓派定制的Ubuntu Linux 18.10(64 bit)系统。(这里也提供一个该文件的百度网盘的下载链接:链接:https://pan.baidu.com/s/1zwfCATkIuo3X9QHOoUGGtg 提取码:u67a)下载文件如下图所示(此系统已经包含了docker-compose组件,组件在/usr/local/bin文件夹下,验证是否安装好可在终端输入:docker-compose version进行查看)。

Ubuntu Linux 18.10 (64 bit)系统

②将准备好的u盘进行格式化,格式化类型选择FAT32(一定要是这个类型!!否则没有反应,不要问为什么,因为在这个坑里待了很久。   哭脸.jpg)。格式化之后,将下载好的usb_installer.zip文件的内容解压至u盘中,u盘中的解压完毕的内容,如下图所示。

解压后的文件内容展示

③将准备好的SD卡也进行格式化,格式化类型选择FAT32(一定要是这个类型!!)。

④将u盘与SD卡插入树莓派开发板,并为树莓派开发板插上配套的鼠标、键盘、显示器等外设。确认所有接口都插牢固后,再给树莓派开发板供电。

⑤供电之后需等待10秒左右,树莓派开发板就会自动的安装u盘里的系统。在系统的安装过程中,按照系统的要求一步步“继续”即可。(和正常的Ubuntu系统安装没什么区别)在完成所有的安装操作后,树莓派会通过SD卡中的系统再次重启。

3.安装docker

       Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中。EdgeX的微服务封装在Docker容器中,在部署EdgeX服务的时候只需要在本地拉取EdgeX微服务的镜像,并在本地运行即可。

安装步骤如下:

①  在/etc/apt/文件夹下,终端输入:

sudo chmod 777 sources.list      //修改文件的操作权限

②先用系统自带的文本编辑器将/etc/apt/sources.list文件中 cn.ports.ubuntu.com修改为mirrors.tuna.tsinghua.edu.cn     //将软件源替换为清华镜像源

③替换为软件源之后,先更新系统软件源。

sudo apt-get update     //更新软件源

④ 安装docker,因为安装的系统已经将docker的软件安装源添加,所以直接安装就可以

sudo apt-get install docker-ce  

⑤ 将非root用户加入docker用户组省去sudo

sudo usermod -aG docker $USER 

⑥ 检查docker版本号

docker  version         

Ps:这里推荐几个一键安装docker的脚本(任选其一使用),如果已经成功了安装docker就不需要了:

脚本一:

curl –sSL https://get.docker.com/ | sh

脚本二:

curl -sSL https://get.daocloud.io/docker | sh

脚本三:

curl -sSL https://get.docker.com | bash –s docker –mirror Aliyun

由于国内访问直接访问Docker hub网速比较慢,拉取镜像的时间就会比较长。一般我们会使用镜像加速或者直接从国内的一些平台镜像仓库上拉取,这里使用daocloud加速器:在docker安装好之后,终端输入:

curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io

然后需要重启docker服务,在终端输入:

sudo systemctl restart docker.service

该脚本可以将 --registry-mirror 加入到你的Docker 配置文件 /etc/docker/daemon.json 中。适用于 Ubuntu14.04、Debian、CentOS6、CentOS7、Fedora、Arch Linux、openSUSE Leap 42.1,其他版本可能有细微不同。

4.部署EdgeX

参照Edgex官网下的安装步骤安装,在官网下载最新的docker-compose文件,并将其文件名称修改为docker-compose.yml保存在本地目录中下。注意:官网提供的docker-compose.yml文件中拉取的镜像是amd/X86架构的,并不适合在树莓派的arm64位上运行,要对docker-compose.yml文件进行部分修改,主要修改部分是将拉取的镜像替换为arm64的镜像,修改方法如下:

1.将

image: edgexfoundry/docker-edgex-volume:0.6.0

修改为:

image:edgexfoundry/docker-edgex-volume-arm64:0.8.0

2.将

image: consul:1.1.0

修改为:

image:arm64v8/consul:1.1.0

3. 将

image: edgexfoundry/docker-core-config-seed-go:0.7.1

修盖为:

image: edgexfoundry/docker-core-config-seed-go-arm64:0.7.1

4. 将

image: edgexfoundry/docker-edgex-mongo:0.6.0

修改为:

image:edgexfoundry/docker-edgex-mongo-arm64:0.8.0

5.将

image: edgexfoundry/docker-support-logging-go:0.7.1

修改为:

    image:edgexfoundry/docker-support-logging-go-arm64:0.7.1

6. 将

image: edgexfoundry/docker-support-notifications-go:0.7.1

修改为:

image:edgexfoundry/docker-support-notifications-go-arm64:0.7.1

7. 将

image: edgexfoundry/docker-core-metadata-go:0.7.1

修改为:

image:edgexfoundry/docker-core-metadata-go-arm64:0.7.1

8. 将

image: edgexfoundry/docker-core-data-go:0.7.1

修改为:

image:edgexfoundry/docker-core-data-go-arm64:0.7.1

9. 将

image: edgexfoundry/docker-core-command-go:0.7.1

修改为:

image:edgexfoundry/docker-core-command-go-arm64:0.7.1

10. 将

image: edgexfoundry/docker-support-scheduler-go:0.7.1

修改为:

image:edgexfoundry/docker-support-scheduler-go-arm64:0.7.1

11. 将

image: edgexfoundry/docker-export-client-go:0.7.1

修改为:

image:edgexfoundry/docker-export-client-go-arm64:0.7.1

12.将

image: edgexfoundry/docker-export-distro-go:0.7.1

修改为:

image:edgexfoundry/docker-export-distro-go-arm64:0.7.1

13.将

image: edgexfoundry/docker-support-rulesengine:0.7.0

修改为:

image:edgexfoundry/docker-support-rulesengine-arm64:0.7.0

14.将

image: edgexfoundry/docker-device-virtual:0.6.0

修改为:

image:edgexfoundry/docker-device-virtual-arm64:0.5.0

15.将

image: edgexfoundry/docker-device-random-go:0.7.1

修改为:

image:edgexfoundry/docker-device-random-go-arm64:0.7.1

16.将

image: edgexfoundry/docker-device-mqtt-go:0.7.1

修改为:

image:edgexfoundry/docker-device-mqtt-arm64:0.5.0

17.将

image: edgexfoundry/docker-device-modbus-go:0.7.1

修改为:

image:edgexfoundry/docker-device-modbus-go-arm64:0.7.1

18.将

image: nexus3.edgexfoundry.org:10004/docker-device-bluetooth:0.6.0

修改为:

image:edgexfoundry/docker-device-bluetooth-arm64:0.5.0

19.将

image: nexus3.edgexfoundry.org:10004/docker-device-bacnet:0.6.0

修改为:

image:edgexfoundry/docker-device-bacnet-arm64:0.5.0

20.将

image: edgexfoundry/docker-edgex-ui-go:0.1.1

修改为:

image:edgexfoundry/docker-edgex-ui-go-arm64:0.1.1

21.将

image:  portainer/portainer

修改为:

image:  portainer/portainer:linux-arm64

有个别的几个镜像没有arm64的,但是不影响Edgex的核心服务。大家也可去docker hub搜索Edgexfoundry的arm64的container,可能会有更新。此处提供一个arm64镜像的docker-compose.yml文件供参考。下载地址如下:

链接:https://pan.baidu.com/s/1PF9ISFUlUFJRIvtZs3_4mA

提取码:8cry

首先,在docker-compose.yml所在的文件处,打开终端输入以下命令从Docker Hub下载EdgeX Foundry 的Docker镜像:

docker-compose pull

然后启动所有EdgeX Foundry微服务:

docker-composeup –d

正常执行后界面如下:


最后,验证EdgeX容器是否已全部启动:

docker-compose ps

正常启动后界面如下:

注意:edgex config seed微服务的state显示Exit 0表示正常退出,因为config seed只是初始化关联的服务然后退出。

5.demo运行

       EdgeXFoundry提供随机数设备服务(Random Number Device Service),该服务可用于测试,它在可配置范围内返回一个随机数。运行此服务的配置包含在docker-compose.yml文件中,但默认情况下处于禁用状态。

5.1连接设备

要启用随机数设备服务,请在docker-compose.yml中取消注释以下行:

  device-random:

   image: edgexfoundry/docker-device-random-go-arm64:0.7.1

   ports:

     - "49988:49988"

   container_name: edgex-device-random

   hostname: edgex-device-random

   networks:

     - edgex-network

   volumes:

     - db-data:/data/db

     - log-data:/edgex/logs

     - consul-config:/consul/config

     - consul-data:/consul/data

   depends_on:

     - data

     - command

然后,您可以启动随机设备服务:

docker-compose up -d device-random

设备服务将自动注册名为Random-Integer-Generator01的设备,该设备将开始将其随机数读数发送到EdgeX。您可以通过查询EdgeX Logging服务来验证是否正在发送这些读数:

curl http:// localhost:48080 / api / v1 / event /device / Random-Integer-Generator01 / 10

5.2控制设备

我们不能直接在设备上调用命令,而是使用EdgeX Foundry Command Service来执行此操作。 第一步是通过向Command服务询问您的设备来检查可以调用哪些命令,返回的json文件格式大致如下:

{

"id": "5ca3475e9f8fc200010fd6a1",

"name": "Random-Integer-Generator01",

"adminState": "UNLOCKED",

"operatingState": "ENABLED",

"lastConnected": 0,

"lastReported": 0,

"labels": ["device-random-example"],

"location": null,

"commands": [{

"created": 1554204510191,

"modified": 0,

"origin": 0,

"id": "5ca3475e9f8fc200010fd69c",

"name": "GenerateRandomValue_Int8",

"get": {

"path": "/api/v1/device/{deviceId}/GenerateRandomValue_Int8",

"responses": [{

"code": "200",

"description": null,

"expectedValues": ["RandomValue_Int8"]

}, {

"code": "503",

"description": "service unavailable",

"expectedValues": []

}],

"url": "http://edgex-core-command:48082/api/v1/device/5ca3475e9f8fc200010fd6a1/command/5ca3475e9f8fc200010fd69c"

},

"put": {

"path": "/api/v1/device/{deviceId}/GenerateRandomValue_Int8",

"responses": [{

"code": "200",

"description": null,

"expectedValues": []

}, {

"code": "503",

"description": "service unavailable",

"expectedValues": []

}],

"parameterNames": ["Min_Int8", "Max_Int8"],

"url": "http://edgex-core-command:48082/api/v1/device/5ca3475e9f8fc200010fd6a1/command/5ca3475e9f8fc200010fd69c"

}

}

注意:URL对每个设备来说不完全相同,因为设备和命令生成的唯一ID将不同。 因此,请务必将您的值用于以下步骤。

您会注意到这一个命令同时具有get和put选项。get调用将返回一个随机数,并自动调用以将数据发送到EdgeX的其余部分。 您也可以使用提供的get的URL手动调用它(要将get的URL中的/edgex-core-command替换为localhost):

Curl http://localhost:48082/api/v1/device/5ca3475e9f8fc200010fd6a1/command/5ca3475e9f8fc200010fd69c

此命令将返回如下所示的JSON结果:

{

"id": "",

"pushed": 0,

"device": "Random-Integer-Generator01",

"created": 0,

"modified": 0,

"origin": 1554371806210,

"schedule": null,

"event": null,

"readings": [{

    "id": "",

    "pushed": 0,

    "created": 0,

    "origin": 1554371806210,

    "modified": 0,

    "device": "Random-Integer-Generator01",

    "name": "RandomValue_Int8",

    "value": "125"

}]

}

此读数的默认范围是-128到127.我们可以通过调用命令将读数的默认范围进行修改,将其限制为0到100之间的正值:

curl -X PUT-d '[

    {"Min_Int8": "0","Max_Int8": "100"}

]' http://localhost:48082/api/v1/device/5ca3475e9f8fc200010fd6a1/command/5ca3475e9f8fc200010fd69c

现在,每当我们调用get命令时,返回的值将介于0和100之间。

至此,表示已经成功地将Edgex的微服务部署在树莓派3B+上。在这里要感谢魏学长的几个关键部分的指导,哈哈哈哈 @不讲道理的魏同学

Ps:部署Edgex微服务到嵌入式开发板上是第一步,最重要的如何将微服务与实际的应用场景结合,这就需要各位开拓自己的思维。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260

推荐阅读更多精彩内容