標籤:
By Toradex Leonardo Graboski Veiga
1). 簡介
物聯網(Internet of Things)概念的本質其實就是關於發送資料到網路,所以稱為雲端服務。隨著時代發展和技術進步,人們可以使用尺寸更小功耗更低的電子裝置並很容易的串連到雲端,不過有一個問題卻始終困擾著電子工程師們:如何使用這些擷取的資料?而這正是物聯網的主題。
在Microsoft首頁上面有一些實際的應用例子來展示IoT的應用:一個電梯公司通過物聯網來改善並提供預先維護;一個工業自動化公司通過物聯網深入瞭解油氣產業供應鏈,同時提供預先維護;還有一個公司通過IoT預測駕駛人員行為然後最佳化汽車利用。在讀完這個系列文章後,我們期待讀者可以擁有足夠的知識和工具去部署應用來深度檢視同時最佳化整個系統 – 不僅僅是積攢了一堆資料,而是從中擷取了有用的結果!
Azure 是Microsoft提供的雲端服務平台,提供了多種應用如資料庫,虛擬機器,應用服務,機器學習,資料流分析,媒體和CDN服務,大資料解決方案,以及包括IoT Hub的其他眾多應用。就其提供的大量應用本身已經是使用Azure服務的很好理由,但Microsoft更進一步通過和Amazon Web Services的對比來進一步證明其方案是更好的 – 和前面相反,這是一個通過使用者和時間來確認的強有力宣言。另外,高安全性,易於整合以及容易上手也是選擇Azure服務的另一個理由。
本系列文章通過開發一個IoT應用,從讀取現場感應器資料,展示資料到擷取商業智慧(BI)。所使用的用來串連感應器以及上傳資料到雲端的平台:Azure IoT certified partner Toradex 的Colibri VF61電腦模組 + Iris Carrier Board。應用程式擷取感應器資料然後上傳到來自Microsoft Azure雲解決方案的一個叫做Azure IoT Hub 的IoT服務,然後就可以被各種所需要的Microsoft Azure服務來處理。這部分內容將在本系列文章的第二部分著重講解,在此我們主要關注在如何配置Azure IoT Hub以及上傳資料到它上面。
我們選用的IoT環境為模型車監控。為了示範方便,將Toradex平台和感應器置於遙控模型汽車內,如1所示;而圖2則給出的目標應用的框圖。
圖1:遙控汽車
圖2:應用框圖
我們所選用的應用程式設計語言為Javascript 配合Node.js: 一個伺服器端(本文中即Toradex嵌入式系統)基於Chrome V8 引擎編譯的Javascript解譯器。這個選擇是考慮到Azure IoT Hub SDKs 可以提供的開發庫。但是需要注意的是現在IoT Hub SDKs正處於頻繁更新中,每一次更新都會有些改變(至少Node相關),所以在使用前需要考慮清楚。本文所使用的Azure IoT Node包版本為1.0.1。
整個環境的搭建,從開發嵌入式系統應用,到配置Azure來擷取資料我們分為3個主要步驟,下面會分別介紹:
./ 配置Azure環境
./ 添加裝置並發送資訊到IoT Hub
./ Toradex嵌入式系統應用開發
2). 配置Azure環境
首先需要建立一個新的Azure賬戶:從Azure 網站可以申請30試用的免費賬戶。然後就可以使用賬戶裡一定數目的信用額度來免費部署應用使用Azure 服務;同樣,IoT Hub也有一個用於開發的包含有限資源的免費版本,且不受試用期限制。關於價格和IoT Hub的詳細資料,請見這裡。
設定好Azure賬戶後,需要建立IoT Hub。用新建立的Azure賬戶登陸Azure portal,選擇 +New > Internet of Things > Azure IoT Hub。新的IoT Hub配置介面如3所示,“Pricing and scale tier”選項需要選擇“Free”;然後在“Resource Group”選項建立一個新的資源群組,另外“Location”選項需要和後面部署的服務保持一致;“Name”可以自由設定,而“IoT Hub Units”和”Device-to-cloud“選項在免費版本中則無法修改。點擊“Create”後,服務就被部署了,這個過程可能需要幾十秒時間。
圖3:從Azure Portal建立IoT Hub
上面操作完成後,可以看到IoT Hub已經出現在控制台,也就是Azure Portal首頁。點擊後,如4所示頁面會開啟:裡麵包含“Essentials” 是如IoT Hub地區等基本資料;“Usage”是提供給系統管理員註冊裝置數目以及從裝置發送資訊數量的反饋資訊;“Monitoring”是顯示收到資訊數量。
圖4:IoT Hub 主面板
仍然在IoT Hub主面板上,為了讓其他應用也可以訪問服務,”Settings“選項卡裡面的“Shared access policies“選項需要被選中。在新開啟的” Shared access policies“選項卡中,點擊“iothubowner”規則選項,這個包含了本IoT Hub所有可能的許可權。如5所示,“iothubowner”選項卡會開啟,然後複製”Connection string – primary key”對應的內容留作後用:這個是下一步用於管理和監控這個IoT Hub服務的鑰匙。
圖5:擷取iothubowner connection string
3). 添加裝置並發送資訊到IoT Hub
現在雲端設定已經完成,我們需要在開發主機上面安裝iothub-explorer工具來添加裝置到IoT Hub,另外如果開發主機是Windows的話,也可以選擇Device Explorer工具。鑒於本文所使用的開發主機系統為Ubuntu 14.04,我們採用iothub-explorer。需要注意所需Node版本為0.12.x或以上(根據說明如需全部功能工作需要4.x或以上版本),但目前apt-get工具只能安裝0.10.x版本。為瞭解決這個問題,需要先後安裝Node Version Manager (NVM)和Node 版本0.12.9. 然後在終端中使用NPM(Node Package Manager)來安裝iothub-explorer。
---------------------
$ npm install [email protected]
---------------------
然後可以運行iothub-explorer help參數來查看使用方法
---------------------
$ iothub-explorer help
---------------------
根據上面命令的列印結果,iothub-explorer 包含有create和monitor事件參數。首先,我們配合上面圖5中擷取的connection string使用iothub-explorer工具來建立一個裝置“tdx_iot_car”。注意“--connection-string”參數用來顯示裝置connection string (和圖5中擷取的IoT Hub connection string不同),這個也需要儲存下來用來串連這個新建立的裝置到IoT Hub,是的可以使用Colibri VF61應用來發訊息到Hub。
---------------------
$ iothub-explorer "HostName=toradex.azure-devices.net;SharedAccessKeyName=iothubowner;SharedAccessKey=putyoursharedaccesskeyfromtheconnectionstringhere" create tdx_iot_car --connection-string
Created device tdx_iot_car
-
deviceId: tdx_iot_car
generationId: 635931262207620183
etag: MA==
connectionState: Disconnected
status: enabled
statusReason: null
connectionStateUpdatedTime: 0001-01-01T00:00:00
statusUpdatedTime: 0001-01-01T00:00:00
lastActivityTime: 0001-01-01T00:00:00
cloudToDeviceMessageCount: 0
authentication:
SymmetricKey:
primaryKey: somesharedaccesskeyreturned
secondaryKey: somesecondaryaccesskeyreturned
-
connectionString: HostName=toradex.azure-devices.net;DeviceId=tdx_iot_car;SharedAccessKey=somesharedaccesskeyreturned
---------------------
4). Toradex嵌入式系統應用開發
現在來設定Colibri VF61 電腦模組 + Iris 載板。本文中使用Toradex發布的先行編譯Linux image (Colibri_VF_LinuxConsoleImageV2.5),如何刷寫image到模組請參考這裡。然後請參考下面步驟安裝Node.js, NPM 包和git – 安裝過程需要一些時間,尤其是curl步驟。
---------------------
# opkg update
# opkg install nodejs
# opkg install tar
# curl -L https://www.npmjs.com/install.sh | sh
# opkg install git
---------------------
本文所展示的常式(send_data.js)相關packages installer和node檔案存放於這裡,可以通過下面命令將其clone到目標板上面並安裝node packages
---------------------
# git clone https://github.com/leograba/azure-iot-car.git
# [email protected]:~# cd azure-iot-car
# [email protected]:~# npm install
---------------------
現在我們可以在目標板上面運行常式向IoT Hub發送資料,但有幾點需要解釋下:常式使用HTTP協議通訊,但AMQP和MQTT協議也是支援的;變數“connecionString”數值必須和上面用iothub-explorer工具建立新裝置時候所儲存下來string一致:
---------------------
var connectionString = "HostName=toradex.azure-devices.net;DeviceId=tdx_iot_car;SharedAccessKey=somesharedaccesskeyreturned"
---------------------
Setinterval()迴圈函數隨機產生數值發送到IoT Hub, 用來類比感應器資料,如溫度,聲納感應器距離資料,加速度和陀螺儀感應器,一些gps座標資料和來自目標板的時間日期等。如何從真實感應器擷取資料將在這個系列文章的下一篇進行說明。JSON Stringify() 函數用來產生一個JSON編碼資料串,然後封裝於Message object用於發送。下面是一個JSON格式資料串樣本:
---------------------
{"ObjectName":"toradex2",
"ObjectType":"SensorTagEvent",
"temp":24.889683,
"acceleration:
{"accel_x":10.018892,"accel_y":0.039468,"accel_z":-0.081328},
"gyroscope":
{"gyro_x":-0.0532362,"gyro_y":-0.01597086,"gyro_z":0},
"distance":0.17017,
"boardTime":1458064972706}
---------------------
正常情況下,在程式運行時候sendEvent()函數裡面的callback函數不應列印任何串口輸出。下面是在Colibri VF61上面運行程式並正常工作時候的串口列印輸出:
---------------------
# node send_data.js
sending message to the IoT Hub
sending message to the IoT Hub
sending message to the IoT Hub
sending message to the IoT Hub
sending message to the IoT Hub
sending message to the IoT Hub
sending message to the IoT Hub
sending message to the IoT Hub
---------------------
為了確保資料被收到,在Azure Portal IoT Hub面板會顯示每天的訊息計數,同時監控圖表上面會有尖峰顯示,如6所示。需要注意這些資訊大概需要幾十秒才會在portal上面顯示出來。
圖 6: 在Azure Portal中確認資料被收到
另外,也可以使用iothub-explorer工具通過“monitor-event”參數配合device id來查看發送到IoT Hub的資料流,不過需要Colibri VF61程式要同步運行,而通過Azure Portal查看則不需要。下面圖7展示了iothub-exploer收取目標板發送資料情況,上面是具體監測資料命令:
---------------------
$ iothub-explorer "your_iothub_connection_string" monitor-events yourdevice
---------------------
圖7:用iothub-explorer收取目標板發送資料
5). 總結
Microsoft Azure網站上面提供了很多文檔用於協助使用者開發更複雜和穩固的應用。參考這些文檔可以從中擷取更多有用資訊,如建立一個裝置,或者從Hub擷取裝置發送的資料是可以通過編程來完成的。另外,在接下來的文章中我們將側重串連真實感應器到Colibri VF61 + Iris載板,並傳輸真實感應器資料到IoT Hub, 這個也可以用作其他Azure 服務來給裝置部署應用提供深度檢視或變數操控。
我們希望通過本文可以讓使用者瞭解並最終使用Toradex 嵌入式系統方案配合Auzre IoT Hub服務,然後從中獲益。同時,我們也想在這裡感謝來自巴西的Grupo Viceri團隊在Azure and Business Intelligence上面的豐富經驗最終促成了這個IoT Car 項目。
本文最初發表於Embarcados.com, Portuguese,詳見這裡。
Microsoft Azure IoT Hub應用 – 第一部分:向雲端發送資料