前言:Windows IoT 是微軟為嵌入式開發(fā)板設(shè)計(jì)的一種物聯(lián)網(wǎng)操作系統(tǒng),運(yùn)行Windows UWP(C#
開發(fā)),可以設(shè)計(jì)出豐富的交互界面,驅(qū)動(dòng)GPIO,連接一些傳感器做有意思的事,本文詳細(xì)介紹如何使用它搭建一個(gè)環(huán)境監(jiān)控系統(tǒng),并將數(shù)據(jù)上傳到Microsoft
Flow云服務(wù)器。
工具:一臺(tái)Windows 10電腦,樹莓派3B/3B+,(8GB(以上)容量SD卡,讀卡器。
傳感器:DHT11溫濕度傳感器、BMP180氣壓計(jì)、BH1750FVI光強(qiáng)傳感器、MQ-2煙霧傳感器、蜂鳴器、若干杜邦線。
?
系統(tǒng)框架:
實(shí)現(xiàn)室內(nèi)溫濕度,光線強(qiáng)度,氣壓高度的采集,火災(zāi)情況的報(bào)警,數(shù)據(jù)的上傳到云端。
(全是微軟的一套,PowerBi部分沒做)
?
PS:
1. 本系統(tǒng)傳感器驅(qū)動(dòng)代碼來(lái)自 https://github.com/ZhangGaoxing/windows-iot-demo
搬運(yùn)至碼云,加速Clone:https://gitee.com/xKryo/windows-iot-demo
2. DHT11項(xiàng)目代碼有一些問題,修改版本網(wǎng)盤下載:https://pan.baidu.com/s/11-EofiscGOnMuSyPgvFO1w
提取碼:a2p1
3. 本系統(tǒng)的完整代碼:https://pan.baidu.com/s/1gTaC3vrEigzjzqDfF_uA1Q 提取碼:quau
4. ?Microsoft Flow服務(wù)器現(xiàn)在HTTP請(qǐng)求觸發(fā)需要注冊(cè)高級(jí)賬戶。
?
正文:
一、開發(fā)平臺(tái)的搭建
1.樹莓派安裝Windows IoT
下載Windows 10 IoT Core Dashboard
和最新的固件:https://docs.microsoft.com/en-us/windows/iot-core/downloads,下載完成后解壓出FFu固件,打開Dashboard并選擇固件,設(shè)置密碼,寫入SD卡。
將SD卡插入樹莓派,漫長(zhǎng)的等待數(shù)次重啟,中間需要通過鼠標(biāo)對(duì)樹莓派進(jìn)行設(shè)置,最后進(jìn)入系統(tǒng):
通過儀表盤(Dashboard)的“我的設(shè)備”可以掃描到局域網(wǎng)的樹莓派,瀏覽器輸入IP:8080,輸入用戶名Administrator和剛剛設(shè)置的密碼,進(jìn)入Windows
IoT的管理頁(yè)面。
?
2.Visual Studio 2017安裝,可以通過下載Visual Studio Installer安裝:
?
二、第一個(gè)傳感器驅(qū)動(dòng)(DHT11 Demo)
以驅(qū)動(dòng)DHT11為例,講解將傳感器連接樹莓派,并編譯打包程序并部署到樹莓派。
1.DHT11連接樹莓派,DHT11和樹莓派的引腳定義如圖,將DHT11的數(shù)據(jù)輸出引腳連接GPIO4(07號(hào)引腳),電源(VCC)和地(GND)就近接入但不要接反。
?
2.VS 2017打開DHT11 Demo 項(xiàng)目(IDE可能會(huì)要求安裝一些依賴的組件)
生成解決方案時(shí),可能會(huì)出現(xiàn)證書過期:
?
雙擊打開項(xiàng)目Package.appxmanifest文件:
在新的窗口中選擇打包一欄,彈出的窗口選擇配置證書—?jiǎng)?chuàng)建測(cè)試證書(任意名稱)
?
重新生成解決方案:
?
我的VS 2017出現(xiàn)了問題,不能遠(yuǎn)程調(diào)試,如果調(diào)試設(shè)置出現(xiàn)以下信息,則可以直接遠(yuǎn)程調(diào)試安裝應(yīng)用不用打包部署:
3.打包項(xiàng)目的安裝程序包:
右鍵項(xiàng)目 – 應(yīng)用商店 – 創(chuàng)建應(yīng)用程序包 – 創(chuàng)建旁加載包:
選擇生成包的路徑,勾選合適的體系結(jié)構(gòu),點(diǎn)擊創(chuàng)建,漫長(zhǎng)等待生成完成:
進(jìn)入瀏覽器后臺(tái)管理頁(yè)的Apps Manager選擇打包好的應(yīng)用,點(diǎn)擊Install安裝:
安裝成功:
?
運(yùn)行效果:
三、接入所有傳感器
下載系統(tǒng)完整代碼,用VS2017打開,里面有詳細(xì)的注釋,代碼模塊較為清晰,這里就不再分析代碼功能了。
通過重新設(shè)計(jì)交互界面,接入BMP180氣壓計(jì)、BH1750FVI光強(qiáng)傳感器、MQ-2煙霧傳感器。
圖中可看到傳感器功能都已經(jīng)實(shí)現(xiàn),關(guān)于數(shù)據(jù)上傳部分在后面會(huì)講解。
?
?
系統(tǒng)設(shè)計(jì)的電路圖:
對(duì)應(yīng)樹莓派引腳的連接圖:
?
?
實(shí)物圖如下,先在面包板上調(diào)試,再把所有傳感器模塊焊接在實(shí)驗(yàn)板上。
?
四、Microsoft Flow云服務(wù)
系統(tǒng)通過HTTP POST的方式,將數(shù)據(jù)打包成的JSON文件POST到流,服務(wù)器解析后執(zhí)行流。
推薦先觀看此視頻:https://b23.tv/av21526828使用Microsoft Flow 快速采集IoT設(shè)備數(shù)據(jù)。
注意:微軟Flow的服務(wù)器升級(jí)后,HTTP請(qǐng)求的觸發(fā)器已不再支持免費(fèi)的賬戶,如果不想注冊(cè),則跳過該部分,通過其他的方式上傳到所需要的其他服務(wù)器。
?
盡管如此,還是記錄一下之前連接Flow的過程。
以視頻中的例子為基礎(chǔ),代碼中數(shù)據(jù)封裝及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產(chǎn)生的Https請(qǐng)求Url 20 Url = "https://XXX"; 21 22 //有效負(fù)載的請(qǐng)求正文 JSON架構(gòu) 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();//
清空緩存并發(fā)送 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 }
?
服務(wù)器HTTP端觸發(fā)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. 進(jìn)入Microsoft Flow官網(wǎng),注冊(cè)免費(fèi)賬戶
?
2.?在“我的流”中新建,選擇觸發(fā)條件,通過搜索框搜索HTTP添加觸發(fā)條件,填入JSON配置,現(xiàn)在免費(fèi)賬戶搜索不到。
添加條件分支,如果發(fā)生燃?xì)庑孤┣闆r,推送報(bào)警和Outlook發(fā)送郵件,最終會(huì)將數(shù)據(jù)插入到Excel(OneDrive)。
?
具體郵件內(nèi)容的設(shè)置:
?
?
?3.?制作好帶表頭的Excel文件,上傳到OneDrive,F(xiàn)low連接OneDrive,可以找到文件,然后關(guān)聯(lián)JSON代碼內(nèi)容:
?
上傳多次數(shù)據(jù),可以看到表格中的內(nèi)容如下:
?
如圖發(fā)生r燃?xì)庑孤?,F(xiàn)low會(huì)推送郵箱內(nèi)容:
?
Microsoft Flow APP在Googe Paly 中下載,通過Flow APP 和OneDrive APP 在移動(dòng)端查收:
五、總結(jié)
樹莓派搭載Windows
IoT接入傳感器,基本的環(huán)境數(shù)據(jù)采集、數(shù)據(jù)展示、數(shù)據(jù)上傳都已完成。使用微軟的一套東西進(jìn)行開發(fā)著實(shí)令人崩潰,所以不再深入了,1年前開發(fā)的,有些具體的步驟還不夠清晰,現(xiàn)在總結(jié)起來(lái)感覺有點(diǎn)low。
?
熱門工具 換一換