樹莓派 + Windows IoT Core 搭建環境監控系統
前言:Windows IoT 是微軟為嵌入式開發板設計的一種物聯網作業系統,執行Windows UWP(C# 開發),可以設計出豐富的互動介面,驅動GPIO,連線一些感測器做有意思的事,本文詳細介紹如何使用它搭建一個環境監控系統,並將資料上傳到Microsoft Flow雲伺服器。
工具:一臺Windows 10電腦,樹莓派3B/3B+,(8GB(以上)容量SD卡,讀卡器。
感測器:DHT11溫溼度感測器、BMP180氣壓計、BH1750FVI光強感測器、MQ-2煙霧感測器、蜂鳴器、若干杜邦線。
系統框架:
實現室內溫溼度,光線強度,氣壓高度的採集,火災情況的報警,資料的上傳到雲端。
(全是微軟的一套,PowerBi部分沒做)
PS:
1. 本系統感測器驅動程式碼來自 https://github.com/ZhangGaoxing/windows-iot-demo
搬運至碼雲,加速Clone:https://gitee.com/xKryo/windows-iot-demo
2. DHT11專案程式碼有一些問題,修改版本網盤下載:https://pan.baidu.com/s/11-EofiscGOnMuSyPgvFO1w 提取碼:a2p1
3. 本系統的完整程式碼:https://pan.baidu.com/s/1gTaC3vrEigzjzqDfF_uA1Q 提取碼:quau
4. Microsoft Flow伺服器現在HTTP請求觸發需要註冊高階賬戶。
正文:
一、開發平臺的搭建
1.樹莓派安裝Windows IoT
下載Windows 10 IoT Core Dashboard 和最新的韌體:https://docs.microsoft.com/en-us/windows/iot-core/downloads,下載完成後解壓出FFu韌體,開啟Dashboard並選擇韌體,設定密碼,寫入SD卡。
將SD卡插入樹莓派,漫長的等待數次重啟,中間需要通過滑鼠對樹莓派進行設定,最後進入系統:
通過儀表盤(Dashboard)的“我的裝置”可以掃描到區域網的樹莓派,瀏覽器輸入IP:8080,輸入使用者名稱Administrator和剛剛設定的密碼,進入Windows IoT的管理頁面。
2.Visual Studio 2017安裝,可以通過下載Visual Studio Installer安裝:
二、第一個感測器驅動(DHT11 Demo)
以驅動DHT11為例,講解將感測器連線樹莓派,並編譯打包程式並部署到樹莓派。
1.DHT11連線樹莓派,DHT11和樹莓派的引腳定義如圖,將DHT11的資料輸出引腳連線GPIO4(07號引腳),電源(VCC)和地(GND)就近接入但不要接反。
2.VS 2017開啟DHT11 Demo 專案(IDE可能會要求安裝一些依賴的元件)
生成解決方案時,可能會出現證書過期:
雙擊開啟專案Package.appxmanifest檔案:
在新的視窗中選擇打包一欄,彈出的視窗選擇配置證書—建立測試證書(任意名稱)
重新生成解決方案:
我的VS 2017出現了問題,不能遠端除錯,如果除錯設定出現以下資訊,則可以直接遠端除錯安裝應用不用打包部署:
3.打包專案的安裝程式包:
右鍵專案 – 應用商店 – 建立應用程式包 – 建立旁載入包:
選擇生成包的路徑,勾選合適的體系結構,點選建立,漫長等待生成完成:
進入瀏覽器後臺管理頁的Apps Manager選擇打包好的應用,點選Install安裝:
安裝成功:
執行效果:
三、接入所有感測器
下載系統完整程式碼,用VS2017開啟,裡面有詳細的註釋,程式碼模組較為清晰,這裡就不再分析程式碼功能了。
通過重新設計互動介面,接入BMP180氣壓計、BH1750FVI光強感測器、MQ-2煙霧感測器。
圖中可看到感測器功能都已經實現,關於資料上傳部分在後面會講解。
系統設計的電路圖:
對應樹莓派引腳的連線圖:
實物圖如下,先在麵包板上除錯,再把所有感測器模組焊接在實驗板上。
四、Microsoft Flow雲服務
系統通過HTTP POST的方式,將資料打包成的JSON檔案POST到流,伺服器解析後執行流。
推薦先觀看此視訊:https://b23.tv/av21526828使用Microsoft Flow 快速採集IoT裝置資料。
注意:微軟Flow的伺服器升級後,HTTP請求的觸發器已不再支援免費的賬戶,如果不想註冊,則跳過該部分,通過其他的方式上傳到所需要的其他伺服器。
儘管如此,還是記錄一下之前連線Flow的過程。
以視訊中的例子為基礎,程式碼中資料封裝及HTTP POST部分:
1 using System; 2 using System.Diagnostics; 3 using System.IO; 4 using System.Threading.Tasks; 5 6 namespace Windows_IoT_Core 7 { 8 class PostFlow 9 { 10 private string Url { get; set; } 11 private string Str { get; set; } 12 public PostFlow(String httpUri , String jsonStr) 13 { 14 this.Url = httpUri; 15 this.Str = jsonStr; 16 } 17 public PostFlow(ViewModel view) 18 { 19 //由MS-Flow產生的Https請求Url 20 Url = "https://XXX"; 21 22 //有效負載的請求正文 JSON架構 23 Str = "{\n\t\"Temp\" : \" "+view.Temp+"\" ,\n\t\"Hum\" : \""+view.Hum+"\" ,\n\t\"Bright\" : \""+view.Ill+"\" ,\n\t\"Alt\" : \""+view.Alt+"\" ,\n\t\"Press\" : \""+view.Press+"\" ,\n\t\"Fire\" : \""+view.Fire+"\" ,\n\t\"Time\" : \""+view.Time+"\"\n}"; 24 } 25 public async Task DoPostAsync() 26 { 27 var request = System.Net.WebRequest.Create(new Uri(Url)); 28 request.ContentType = "application/json"; 29 request.Method = "POST"; 30 31 using (var requestStrem = await request.GetRequestStreamAsync()) 32 { 33 var writer = new StreamWriter(requestStrem); 34 writer.Write(Str); 35 writer.Flush();//清空快取併發送 36 } 37 38 using (var resp = await request.GetResponseAsync()) 39 { 40 using (var responseStream = resp.GetResponseStream()) 41 { 42 var reader = new StreamReader(responseStream); 43 var result = reader.ReadToEnd(); 44 Debug.WriteLine(result.ToString()); 45 } 46 } 47 } 48 } 49 }
伺服器HTTP端觸發JSON配置:
{ "type": "object", "properties": { "Temp": { "type": "string" }, "Hum": { "type": "string" }, "Bright": { "type": "string" }, "Alt": { "type": "string" }, "Press": { "type": "string" }, "Fire": { "type": "string" }, "Time": { "type": "string" } }, "required": [ "Temp", "Hum", "Bright", "Alt", "Press", "Fire", "Time" ] }View Code
1. 進入Microsoft Flow官網,註冊免費賬戶
2. 在“我的流”中新建,選擇觸發條件,通過搜尋框搜尋HTTP新增觸發條件,填入JSON配置,現在免費賬戶搜尋不到。
新增條件分支,如果發生燃氣洩漏情況,推送報警和Outlook傳送郵件,最終會將資料插入到Excel(OneDrive)。
具體郵件內容的設定:
3. 製作好帶表頭的Excel檔案,上傳到OneDrive,Flow連線OneDrive,可以找到檔案,然後關聯JSON程式碼內容:
上傳多次資料,可以看到表格中的內容如下:
如圖發生r燃氣洩漏,Flow會推送郵箱內容:
Microsoft Flow APP在Googe Paly 中下載,通過Flow APP 和OneDrive APP 在移動端查收:
五、總結
樹莓派搭載Windows IoT接入感測器,基本的環境資料採集、資料展示、資料上傳都已完成。使用微軟的一套東西進行開發著實令人崩潰,所以不再深入了,1年前開發的,有些具體的步驟還不夠清晰,現在總結起來感覺有點low。
&n