zoukankan      html  css  js  c++  java
  • 树莓派 + 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 = "{
    	"Temp" : " "+view.Temp+"" ,
    	"Hum" : ""+view.Hum+"" ,
    	"Bright" : ""+view.Ill+"" ,
    	"Alt" : ""+view.Alt+"" ,
    	"Press" : ""+view.Press+"" ,
    	"Fire" : ""+view.Fire+"" ,
    	"Time" : ""+view.Time+""
    }";
    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 在移动端查收:

    五、总结

    树莓派搭载Windows IoT接入传感器,基本的环境数据采集、数据展示、数据上传都已完成。使用微软的一套东西进行开发着实令人崩溃,所以不再深入了,1年前开发的,有些具体的步骤还不够清晰,现在总结起来感觉有点low。

  • 相关阅读:
    wget(转)
    852. Peak Index in a Mountain Array
    617. Merge Two Binary Trees
    814. Binary Tree Pruning
    657. Judge Route Circle
    861. Score After Flipping Matrix
    832. Flipping an Image
    461. Hamming Distance
    654. Maximum Binary Tree
    804. Unique Morse Code Words
  • 原文地址:https://www.cnblogs.com/kryo/p/11303422.html
Copyright © 2011-2022 走看看