樹莓派 + Windows IoT Core 搭建環境監控系統
前言:Windows IoT 是微軟為嵌入式開發闆設計的一種物聯網作業系統,運作Windows UWP(C# 開發),可以設計出豐富的互動界面,驅動GPIO,連接配接一些傳感器做有意思的事,本文詳細介紹如何使用它搭建一個環境監控系統,并将資料上傳到Microsoft Flow雲伺服器。
工具:一台Windows 10電腦,樹莓派3B/3B+,(8GB(以上)容量SD卡,讀卡器。
傳感器:DHT11溫濕度傳感器、BMP180氣壓計、BH1750FVI光強傳感器、MQ-2煙霧傳感器、蜂鳴器、若幹杜邦線。
系統架構:
實作室内溫濕度,光線強度,氣壓高度的采集,火災情況的報警,資料的上傳到雲端。
(全是微軟的一套,PowerBi部分沒做)
PS:
- 本系統傳感器驅動代碼來自 https://github.com/ZhangGaoxing/windows-iot-demo
搬運至碼雲,加速Clone:
https://gitee.com/xKryo/windows-iot-demo- DHT11項目代碼有一些問題,修改版本網盤下載下傳: https://pan.baidu.com/s/11-EofiscGOnMuSyPgvFO1w 提取碼:a2p1
- 本系統的完整代碼: https://pan.baidu.com/s/1gTaC3vrEigzjzqDfF_uA1Q 提取碼:quau
- 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 = "{nt"Temp" : " "+view.Temp+"" ,nt"Hum" : ""+view.Hum+"" ,nt"Bright" : ""+view.Ill+"" ,nt"Alt" : ""+view.Alt+"" ,nt"Press" : ""+view.Press+"" ,nt"Fire" : ""+view.Fire+"" ,nt"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配置:
View Code
- 進入Microsoft Flow官網,注冊免費賬戶
- 在“我的流”中建立,選擇觸發條件,通過搜尋框搜尋HTTP添加觸發條件,填入JSON配置,現在免費賬戶搜尋不到。
添加條件分支,如果發生瓦斯洩漏情況,推送報警和Outlook發送郵件,最終會将資料插入到Excel(OneDrive)。
具體郵件内容的設定:
- 制作好帶表頭的Excel檔案,上傳到OneDrive,Flow連接配接OneDrive,可以找到檔案,然後關聯JSON代碼内容:
上傳多次資料,可以看到表格中的内容如下:
如圖發生r瓦斯洩漏,Flow會推送郵箱内容:
Microsoft Flow APP在Googe Paly 中下載下傳,通過Flow APP 和OneDrive APP 在移動端查收:
五、總結
樹莓派搭載Windows IoT接入傳感器,基本的環境資料采集、資料展示、資料上傳都已完成。使用微軟的一套東西進行開發着實令人崩潰,是以不再深入了,1年前開發的,有些具體的步驟還不夠清晰,現在總結起來感覺有點low。
原文位址
https://www.cnblogs.com/kryo/p/11303422.html