树莓派 + 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。

相关文章
相关标签/搜索