用Raspberry Pi搭建Azure IOT解決方案


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:

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

至此,所有的工作結束。

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM