1. 程式人生 > >Microsoft Azure IoT Hub應用 – 第一部分:向雲端傳送資料

Microsoft Azure IoT Hub應用 – 第一部分:向雲端傳送資料

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應用第一部分雲端傳送資料

By Toradex Leonardo Graboski Veiga 1). 簡介 物聯網(Internet of Things)概念的本質其實就是關於傳送資料到網路,所以稱為雲服務。隨著時代發展和技術進步,人們可以使用尺寸更小功耗更低的電子裝置並很容易的連線到雲端,不過有

數字影象處理的筆記(一)第一部分概念和應用領域

影象處理的部分先做一個大概的記錄,後續深入學習後展開。內容圍繞影象的分割和增強展開。 只是相關技術的某些應用,也可能不盡準確,為了記錄和學習。 第一部分:概念和應用領域 第二部分:相關的程式碼實現 ----------------------------針對畫素本身的操作,非

Azure IoT Hub和Event Hub相關的技術系列-索引篇

pos 鏈接 list www 隊列 .cn 研究 系列 業務 Azure IoT Hub和Event Hub相關的技術系列,最近已經整理了不少了,統一做一個索引鏈接,置頂。 Azure IoT 技術研究系列1-入門篇 Azure IoT 技術研究系列2-設備註冊到Az

cocoapods應用第一部分-xcode創建.framework相關

all 輸入 一次 oot 不出 模擬 builds bject pos 問題的提出: 隨著項目的越來越大,可能會出現好幾個團隊共同維護一個項目的情況,比如:項目組A負責當中的A塊,項目組B負責當中的B塊.....這幾塊彼此之間既獨立,也相互聯系.對於這樣的情況,

第一部分批處理的專用命令

分隔符 pause exe call pat sage 設置環境變量 定義 順序 批處理文件是將一系列命令按一定的順序集合為一個可執行的文本文件,其擴展名為BAT。這些命令統稱批處理命令,下面我就來給大家介紹一下批處理的命令。 1、 REM REM 是個註釋命令一般是用來給

【區塊鏈Go語言實現】第一部分區塊鏈基本原型

ont 構建 獲得 列表 append 檢查 世紀 正常 私有 0x00 介紹 區塊鏈(Blockchain)是21世紀最具革命性的技術之一,目前它仍處於逐漸成熟階段,且其發展潛力尚未被完全意識到。從本質上講,區塊鏈只是一種記錄的分布式數據庫。但它之所以獨特,是因為它並

jQuery源碼逐行分析學習02(第一部分jQuery的一些變量和函數)

篩選 復雜 我們 分解 support letter content 變量 new對象 第一次嘗試使用Office Word,方便程度大大超過網頁在線編輯,不過初次使用,一些內容不甚熟悉,望各位大神見諒~ 在上次的文章中,把整個jQuery的結構進行了梳理,得到了整個jQu

第一部分MongoDB備忘錄

taf slow 日誌 復制集 副本集 () nss nec ror 一、NoSQL 簡介   Nosql的全稱是Not Only Sql,這個概念早起就有人提出,在09年的時候比較火。Nosql指的是非關系型數據庫,而我們常用的都是關系型數據庫。就像我們常用的mysql,

什麼是REST——適合初學者的一種簡單解釋,第一部分介紹

  原文地址:https://medium.com/extend/what-is-rest-a-simple-explanation-for-beginners-part-1-introduction-b4a072f8740f     這篇文章是解釋REST基本概念的兩篇文章中的第一篇。      閱讀

雜湊三部曲第一部分C語言實現 靜態雜湊表

在這個靜態雜湊表中 我們用一個容量為10 的靜態陣列作為雜湊表的底層構造 但是陣列的每一個儲存空間中又分為兩個部分                                 資料區:data                                    

第一部分Twisted理論基礎

前言: 最近有人在Twisted郵件列表中提出諸如”為任務緊急的人提供一份Twisted介紹”的的需求。值得提前透露的是,這個序列並不會如他們所願.尤其是介紹Twisted框架和基於Python 的非同步程式設計而言,可能短時間無法講清楚。因此,如果你時間緊急,這恐怕不是你想找的資料。 &nbs

微軟開始試用Kubernetes管理Azure IoT Edge應用_Kubernetes中文社群

今年微軟開發者大會Build上,在整合Azure及Kubernetes的新應用領域上了許多新菜,除了簡化Kubernetes叢集部署工作,還推出原生健康檢查預覽版功能,逐漸完善Azure環境中使用Kubernetes的必備周邊工具。 Azure IoT Edge是什麼? 邊緣計算是將雲端的計

Integrating Libelium Meshlium with Azure IoT Hub

Integrating Libelium Meshlium with Azure IoT HubThis article has the objective to share how we connect Libelium Meshlium gateway and his devices, called Wa

jquery與php互動的ajax應用第一檢測使用者註冊時使用者名稱是否存在

當用戶註冊需要知道這個使用者名稱是否被人使用所以需要在使用者登陸前判斷 為了使使用者得到更好的體驗,我們使用了jquery的ajax效果,來使用者名稱是否存在。 首先需要一個新增年級的頁面,暫時叫grade.htm 這個檔案需要引入兩個檔案jquery.js(jquery

普林斯頓大學_演算法公開課:Part_1_第一部分並查集

首先,給大家推薦一個平臺,Coursera (類比國內的mooc網),你可以在上面學習諸多國外一流大學的公開課視訊,各個領域的都有,涉獵範圍很廣。想要出國留學的小夥伴兒不妨在上面事先感受一波國外授課的氛圍與模式。言歸正傳,作為一名程式猿,演算法實在是太重要了!即便不是一名程式

【樹莓派】RTC時鐘模組安裝教程第一部分接線

您的樹莓派系統時間是否在每次斷電重啟後都需要聯網矯正?您是否苦於在沒網時需要手動矯正樹莓派時間? 一個RTC時鐘就能解決您的煩惱,只要跟隨本篇文章引導,您的樹莓派將無需聯網也能自動矯正因關機斷電引起的時間錯誤,隨時獲取最精確時間就是這麼簡單!在本篇文章中作者將一步一步教您怎

資料庫應用第一SQL Server簡介

一. SQL Server 2008的系統資料庫有哪幾種?功能是什麼? SQL Server 2008的系統資料庫由master、model、msdb、tempdb 和隱藏的Resourc

MySql面試總結第一部分B,B+,引擎,索引

1為什麼用B/B+樹這種結構來實現索引呢?? 答:紅黑樹等結構也可以用來實現索引,但是檔案系統及資料庫系統普遍使用B/B+樹結構來實現索引。mysql是基於磁碟的資料庫,索引是以索引檔案的形式存在於磁碟中的,索引的查詢過程就會涉及到磁碟IO消耗,磁碟IO

【JavaFx教程】第一部分Scene Builder

第一部分的主題 開始瞭解 JavaFX 。 建立並執行一個 JavaFX 專案。 使用 Scene Builder 來設計使用者介面。 使用 模型 - 檢視 - 控制器(MVC)模式 構造基礎的應用。 你需要準備 最新的 Java JDK 8 (包含 JavaF

感測器的五種感覺第一部分嗅覺、味覺和聽覺

  在第一篇文章中的一系列更新“五感感測器”在2011區發表的文章(聲音、視覺、味覺、嗅覺、觸覺),我們將討論在感測器技術,模仿人的嗅覺、味覺和聽覺的進步。本文將重點討論底層感測器的變化以及應用程式是如何增長的,特別是在物聯網出現的情況下。  嗅覺  電化學的鼻子,也被稱為電