工控網首頁
>

應用設計

>

Microsoft Azure IoT Hub應用 – 第一部分:向云端發送數據

Microsoft Azure IoT Hub應用 – 第一部分:向云端發送數據

1). 簡介

物聯網(Internet of Things)概念的本質其實就是關于發送數據到網絡,所以稱為云服務。隨著時代發展和技術進步,人們可以使用尺寸更小功耗更低的電子設備并很容易的連接到云端,不過有一個問題卻始終困擾著電子工程師們:如何使用這些獲取的數據?而這正是物聯網的主題。

在Microsoft主頁上面有一些實際的應用例子來展示IoT的應用:一個電梯公司通過物聯網來改善并提供預先維護;一個工業自動化公司通過物聯網深入了解油氣產業供應鏈,同時提供預先維護;還有一個公司通過IoT預測駕駛人員行為然后優化汽車利用。在讀完這個系列文章后,我們期待讀者可以擁有足夠的知識和工具去部署應用來深度檢視同時優化整個系統– 不僅僅是積攢了一堆數據,而是從中獲取了有用的結果!

Azure 是Microsoft提供的云服務平臺,提供了多種應用如數據庫,虛擬機,應用服務,機器學習,數據流分析,媒體和CDN服務,大數據解決方案,以及包括IoT Hub的其他眾多應用。就其提供的大量應用本身已經是使用Azure服務的很好理由,但Microsoft更進一步通過和Amazon Web Services的對比來進一步證明其方案是更好的– 和前面相反,這是一個通過用戶和時間來確認的強有力宣言。另外,高安全性,易于整合以及容易上手也是選擇Azure服務的另一個理由。

本系列文章通過開發一個IoT應用,從讀取現場傳感器數據,展示數據到獲取商業智能(BI)。所使用的用來連接傳感器以及上傳數據到云端的平臺:AzureIoT certified partner Toradex 的ColibriVF61計算機模塊 + IrisCarrier 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 andscale 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“選項需要被選中。在新打開的” Sharedaccess policies“選項卡中,點擊“iothubowner”規則選項,這個包含了本IoT Hub所有可能的權限。如下圖5所示,“iothubowner”選項卡會打開,然后復制”Connection string – primary key”對應的內容留作后用:這個是下一步用于管理和監控這個IoT Hub服務的鑰匙。

圖5:獲取iothubowner connection string

3). 添加設備并發送信息到IoTHub

現在云端設置已經完成,我們需要在開發主機上面安裝iothub-explorer工具來添加設備到IoTHub,另外如果開發主機是Windows的話,也可以選擇DeviceExplorer工具。鑒于本文所使用的開發主機系統為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 iothub-explorer@latest

---------------------

然后可以運行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嵌入式系統應用開發

現在來設置ColibriVF61 計算機模塊+ 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 clonehttps://github.com/leograba/azure-iot-car.git

# root@colibri-vf:~# cd azure-iot-car

# root@colibri-vf:~# 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.comPortuguese,詳見這里

投訴建議

提交

查看更多評論
其他資訊

查看更多

通過 Docker 部署測試 CODESYS PLC示例

Yocto layer 使用 TI AM62 安全啟動功能

定制 Linux Kernel Driver 編譯示例

在 NXP i.MX 95 上運行 Zephyr 實現非對稱多核處理

HDMI 顯示器熱插拔對應顯示應用啟停測試