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演進來的。關於其由來可以參考:
在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:
選擇相應的配置,就可以把數據以折線的形式展現出來:
至此,所有的工作結束。