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(一定要是這個類型?。》駝t沒有反應,不要問為什么,因為在這個坑里待了很久。?? 哭臉.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閱讀 227,882評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,208評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,746評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,666評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,477評論 6 407
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,960評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,047評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,200評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,726評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,617評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,807評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,327評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,049評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,425評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,674評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,432評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,769評論 2 372

推薦閱讀更多精彩內容