樹莓派 + Windows IoT Core 搭建環境監控系統

前言:Windows IoT 是微軟爲嵌入式開發板設計的一種物聯網操做系統,運行Windows UWP(C# 開發),能夠設計出豐富的交互界面,驅動GPIO,鏈接一些傳感器作有意思的事,本文詳細介紹如何使用它搭建一個環境監控系統,並將數據上傳到Microsoft Flow雲服務器。git

工具:一臺Windows 10電腦,樹莓派3B/3B+,8GB(以上)容量SD卡,讀卡器。github

傳感器:DHT11溫溼度傳感器、BMP180氣壓計、BH1750FVI光強傳感器、MQ-2煙霧傳感器、蜂鳴器、若干杜邦線。json

 

系統框架:windows

實現室內溫溼度,光線強度,氣壓高度的採集,火災狀況的報警,數據的上傳到雲端。瀏覽器

(全是微軟的一套,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 提取碼:a2p1app

3. 本系統的完整代碼:https://pan.baidu.com/s/1gTaC3vrEigzjzqDfF_uA1Q 提取碼:quau

4.  Microsoft Flow服務器如今HTTP請求觸發須要註冊高級帳戶


 

正文:

1、開發平臺的搭建

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安裝:

 

2、第一個傳感器驅動(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安裝:

安裝成功:

 

運行效果:

3、接入全部傳感器

下載系統完整代碼,用VS2017打開,裏面有詳細的註釋,代碼模塊較爲清晰,這裏就再也不分析代碼功能了。

經過從新設計交互界面,接入BMP180氣壓計、BH1750FVI光強傳感器、MQ-2煙霧傳感器。

圖中可看到傳感器功能都已經實現,關於數據上傳部分在後面會講解。

 

 

系統設計的電路圖:

對應樹莓派引腳的鏈接圖:

 

 

實物圖以下,先在麪包板上調試,再把全部傳感器模塊焊接在實驗板上。

 

4、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代碼內容:

 

上傳屢次數據,能夠看到表格中的內容以下:

 

如圖發生燃氣泄漏,Flow會推送郵箱內容:

 

Microsoft Flow APP在Googe Paly 中下載,經過Flow APP 和OneDrive APP 在移動端查收:

5、總結

樹莓派搭載Windows IoT接入傳感器,基本的環境數據採集、數據展現、數據上傳都已完成。使用微軟的一套東西進行開發着實使人崩潰,因此再也不深刻了,1年前開發的,有些具體的步驟還不夠清晰,如今總結起來感受有點low。

相關文章
相關標籤/搜索