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:
選擇相應的配置,就可以把資料以折線的形式展現出來:
至此,所有的工作結束。