用Raspberry Pi搭建Azure IOT解決方案

衡子發表於2016-03-08

Raspberry Pi是一款基於Linux的單板機電腦。它由英國的樹莓派基金會所開發,目的是以低價硬體及自由軟體刺激在學校的基本電腦科學教育。樹莓派配備一枚博通(Broadcom)出產的ARM架構700MHz BCM2835處理器,256MB記憶體(B型已升級到512MB記憶體),使用SD卡當作儲存媒體,且擁有一個Ethernet、兩個USB介面、以及HDMI(支援聲音輸出)和RCA端子輸出支援。樹莓派只有一張信用卡大小,體積大概是一個火柴盒大小,可以執行像《雷神之錘III競技場》的遊戲和進行1080p視訊的播放。作業系統採用開源的Linux系統如Debian、ArchLinux,自帶的Iceweasel、KOffice等軟體,能夠滿足基本的網路瀏覽、文書處理以及電腦學習的需要。

當然Raspberry Pi也可以成為最佳的IOT的終端裝置,通過感測器收集資料,以供後臺系統進行分析等。

一.Raspberry Pi的資料採集

本文采用Raspberry Pi 2B,有4個USB介面,一個Ethernet介面,一個HDMI介面,一個MicroSD插槽,一個3.5毫米音訊插孔和複合視訊,攝像頭介面(CSI),顯示介面(DSI),另外還有一個40Pin的GPIO介面。

我購買的淘寶連結:

https://item.taobao.com/item.htm?spm=a1z10.5-c.w4002-11372085286.12.V3rWzS&id=522217122138

價格在210元左右。

另外,Raspberry Pi的感測器有多種多樣。可以通過GPIO的介面進行連線。本文采用的是整合的感測器: Sense Hat。

Sense Hat保護多種感測器:陀螺儀、加速度計、磁力儀、溫度、氣壓、溼度。另外還包含一個8×8 RGB LED matrix和一個Joystick的活動手柄。

我購買的淘寶連結為:

https://item.taobao.com/item.htm?spm=a1z09.2.0.0.MivT32&id=522031087011&_u=7bp4gm8c97

價格在240元左右。

將Sense Hat與Pi連線,然後系統開機上電。預設的作業系統為Linux系統Raspbian,是從Debian演進來的。關於其由來可以參考:

http://arstechnica.com/information-technology/2013/03/how-two-volunteers-built-the-raspberry-pis-operating-system/2/

在Bash Shell中編寫Python2.7的程式,獲得溫度感測器資料:

#!/usr/bin/python

from sense_hat import SenseHat

sense = SenseHat()

sense.clear()

temp = sense.get_temperature()

print(temp)

執行此程式,可以在螢幕上列印目前的溫度。

同樣,可以通過get_humidity()和get_pressure()等方法獲得其他感測器的數值。

具體的Sense-hat的各種python方法,請參考:

https://pythonhosted.org/sense-hat/api/

 

二.在Azure上建立Event Hub、Stream Analytics和SQL Azure DB

1.建立Event hub:

選擇Custom create:

填寫相應的資訊後輸入:

這樣就建立了Event Hub的一個PaaS的服務。在配置中,建立一個Shared Access Policies:

Save以後可以獲得其SharedAccessKey:

2.建立SQL Azure Database

在Azure管理介面中選擇SQL DB。在Server中選擇Add:

輸入使用者名稱和密碼。建立SQL Server。

然後選擇建立SQL Database:

建立好後,把本機的地址加入SQL的白名單:

使用SQL的客戶端連線資料庫:

在Options中選擇資料庫:

登陸後建立table:

Create table [dbo].[hwtest1] (

Time Datetime2 (6) Null,

DeviceId Varchar (16) Null,

Temperature Float (53) Null,

Humidity Float (53) Null

);

GO

Create clustered index [hwtest1] on [dbo].[hwtest1] ([DeviceId] ASC);

3.建立Stream Analytics

建立成功後,在Input中新增Input:

選擇Event Hub:

然後新增Event Hub的設定:

在事件格式中選擇JSON和UTF8

建立Output:

選擇SQL Database,新增SQL的配置:

在Query的設定中加入下面的配置:

這裡的DeviceId,Temperature,Humidity等引數必須在Python程式、Stream Analytics和SQL中相同。否則資料將不能取到。

Input、Output和Query設定好後就可以啟動此Job了。

三.將Raspberry Pi的資料上傳到Azure的Event Hub

在Raspberry Pi上安裝Azure的SDK:

pip install azure

安裝完成後,更改Azure Service Bus的endpoint。請參考:

https://msdn.microsoft.com/en-us/library/azure/dn578439.aspx

對於Python的endpoint更改:

在/usr/local/lib/python2.7/dist-packages/azure/servicebus/constants.py

修改31行的配置

#SERVICE_BUS_HOST_BASE = '.servicebus.windows.net'

SERVICE_BUS_HOST_BASE = '.servicebus.chinacloudapi.cn'

 

建立Python程式:

#!/usr/bin/python

from azure.servicebus import ServiceBusService

from sense_hat import SenseHat

from time import sleep

import json;

sense = SenseHat()

sbs = ServiceBusService("hwtest", shared_access_key_name="hwtest", shared_access_key_value="xxxxxx=")

while True:

temp1 = sense.get_temperature()

humi = sense.get_humidity()

press = sense.get_pressure()

temp= {'DeviceId': 'dev-01', 'Temperature': temp1, 'Humidity': humi}

sbs.send_event('hwtest', json.dumps(temp))

sleep(60)

除錯程式讓其後臺執行。

四.檢視資料

Raspberry Pi執行後,資料將傳送到Azure的Event Hub。

在Pi上可以通過tcpdump檢視是否有https的包傳送:

tcpdump port 443

 

在Stream Analytics上可以檢視事件的情況:

如果既有input又有output,說明配置正常。

在Sql客戶端上查詢:

Select * from hwtest1;

五.通過Excel和PowerBI對資料進行分析

目前Raspberry Pi的資料已經上傳到了Event Hub,經過Stream Analytics傳送到了SQL Server的表中。使用者的展現可以通過Exel,PowerBI實現。

1.Exel的展現:

在Excel中選擇資料,選擇"自其他來源",選擇"來自SQL Server"。

設定SQL Server:

選擇相應的資料庫和相應的表:

匯入資料後,可以選擇"插入",選擇"資料透檢視":

在進行相應的選擇後,將顯示資料透檢視:

2.通過PowerBI實現展現

開啟網站: http://powerbi.microsoft.com

下載Desktop的軟體,進行安裝。

在客戶端軟體上進行SQL的連線配置:

此時可以看到SQL中的表:

選擇import:

選擇相應的配置,就可以把資料以折線的形式展現出來:

至此,所有的工作結束。

 

 

 

相關文章