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。

  • 相关阅读:
    ROS入门笔记(三):二进制包与源代码包
    zsh 使用通配符功能
    Linux显示行号设置
    Linux、Ubuntu、CentOS安装和配置zsh
    Python中出现 SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 12-13: truncated UXXXXXXXX escape
    Python数据分析:pandas玩转Excel(三)
    【WP8】ScrollViewer滑动到底触发器(ListBox失效)
    【WP8】扩展CM的INavigationService方法
    【WP8】仿QQ提示消息
    【WP8】键盘弹出时控制Frame位置
  • 原文地址:https://www.cnblogs.com/kryo/p/11303422.html
Copyright © 2011-2022 走看看