前言: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部分:

 using System;
using System.Diagnostics;
using System.IO;
using System.Threading.Tasks; namespace Windows_IoT_Core
{
class PostFlow
{
private string Url { get; set; }
private string Str { get; set; }
public PostFlow(String httpUri , String jsonStr)
{
this.Url = httpUri;
this.Str = jsonStr;
}
public PostFlow(ViewModel view)
{
//由MS-Flow产生的Https请求Url
Url = "https://XXX"; //有效负载的请求正文 JSON架构
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}";
}
public async Task DoPostAsync()
{
var request = System.Net.WebRequest.Create(new Uri(Url));
request.ContentType = "application/json";
request.Method = "POST"; using (var requestStrem = await request.GetRequestStreamAsync())
{
var writer = new StreamWriter(requestStrem);
writer.Write(Str);
writer.Flush();//清空缓存并发送
} using (var resp = await request.GetResponseAsync())
{
using (var responseStream = resp.GetResponseStream())
{
var reader = new StreamReader(responseStream);
var result = reader.ReadToEnd();
Debug.WriteLine(result.ToString());
}
}
}
}
}

服务器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"
]
}

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。

树莓派 + Windows IoT Core 搭建环境监控系统的更多相关文章

  1. 搭建zabbix监控系统详解

    搭建zabbix监控系统详解 文:warren   博文大纲:一.前言 二.zabbix监控架构三.搭建Zabbix监控服务器四.搭建过程中遇到有些服务无法正常启动的解决办法 一.前言 : 要想实时的 ...

  2. 使用monit搭建一个监控系统

    上周用monit搭建或者说定制了一个监控系统,来监控服务器发生事情.当然了主要是监控异常,因为我们的产品属于服务器类型,很多进程都daemon,要不停的运行.我们搭建监控目的不过是出现问题能够及时的知 ...

  3. 搭建前端监控系统(四)Js截图上报篇

    ===================================================================== 前端监控系统: DEMO地址  GIT代码仓库地址 ==== ...

  4. 搭建前端监控系统(三)NodeJs服务器部署篇

    ===================================================================== 监控系统预览地址: DEMO地址    GIT代码仓库地址 ...

  5. 搭建前端监控系统(二)JS错误监控篇

    ===================================================================== 前端性能监控系统: DEMO地址    GIT代码仓库地址 ...

  6. 搭建前端监控系统(六)JS截屏和录屏篇

    怎样定位前端线上问题,一直以来,都是很头疼的问题,因为它发生于用户的一系列操作之后.错误的原因可能源于机型,网络环境,接口请求,复杂的操作行为等等,在我们想要去解决的时候很难复现出来,自然也就无法解决 ...

  7. 搭建前端监控系统(五)Nodejs怎么搭建消息队列

    怎样定位前端线上问题,一直以来,都是很头疼的问题,因为它发生于用户的一系列操作之后.错误的原因可能源于机型,网络环境,接口请求,复杂的操作行为等等,在我们想要去解决的时候很难复现出来,自然也就无法解决 ...

  8. Telegraf+InfluxDB+Grafana快速搭建实时监控系统 监控postgresql

    Telegraf+InfluxDB+Grafana快速搭建实时监控系统  监控postgresql

  9. 从零开始搭建前端监控系统(三)——实现控制iframe前进后退

    前言 本系列文章旨在讲解如何从零开始搭建前端监控系统. 项目已经开源 项目地址: https://github.com/bombayjs/bombayjs (web sdk) https://gith ...

随机推荐

  1. Paxos算法——前世

    Paxos算法是基于消息传递且具有高度容错特性的一致性算法.我们将从一个简单的问题开始,逐步的改进我们的设计方案,最终得到Paxos,一个可以在逆境下工作的协议. 一.客户端-服务器模型 我们从最小的 ...

  2. hexo + next搭建博客

    使用hexo和next主题搭建GitHub博客 安装node.js 在node.js 官网下载, 相应系统位数的软件包. 可以选择LTS长期支持版, 或者Current当前版本. 我这里选择的是Win ...

  3. 关于重写equals()和hashCode()的思考

    最近这几天一直对equals()和hashCode()的事搞不清楚,云里雾里的. 为什么重写equals(),我知道. 但是为什么要两个都要重写呢,我就有点迷糊了,所以趁现在思考清楚后记录一下. 起因 ...

  4. Qt之股票组件-股票检索--支持预览框、鼠标、键盘操作

    目录 一.感慨一下 二.效果展示 三.搜索编辑框 1.编辑框 2.预览框 四.相关文章 原文链接:Qt之股票组件-股票检索--支持预览框.鼠标.键盘操作 一.感慨一下 之前做过一款炒股软件,个人觉着是 ...

  5. mysql-8.0.16-winx64/Linux修改root用户密码

    连接数据库等基础操作请自行解决哈,本篇是重点记录如何改密码. 一.查询用户密码: 查询用户密码命令: select host, user, authentication_string from mys ...

  6. JDK1.8之ConcurrentHashMap

    目录 简介 JDK1.7 JDK1.8 重要属性 Node类 ForwardingNode类 原子操作和Unsafe类 重要方法 初始化表操作(initTable) 插入键值对(put和putVal) ...

  7. UVa 1440:Inspection(带下界的最小流)***

    https://vjudge.net/problem/UVA-1440 题意:给出一个图,要求每条边都必须至少走一次,问最少需要一笔画多少次. 思路:看了好久才勉强看懂模板.良心推荐:学习地址. 看完 ...

  8. scrapy实战4 GET方法抓取ajax动态页面(以糗事百科APP为例子):

    一般来说爬虫类框架抓取Ajax动态页面都是通过一些第三方的webkit库去手动执行html页面中的js代码, 最后将生产的html代码交给spider分析.本篇文章则是通过利用fiddler抓包获取j ...

  9. PTP 接线方式及通讯距离

    PTP 接线方式 CB 1241 RS485 接线 (6ES7 241 1CH30-1XB0) CB1241 RS485 信号板(安装在CPU机本体上) ,订货号为: 6ES7 241 1CH30-1 ...

  10. 跟着大彬读源码 - Redis 4 - 服务器的事件驱动有什么含义?(上)

    众所周知,Redis 服务器是一个事件驱动程序.那么事件驱动对于 Redis 而言有什么含义?源码中又是如何实现事件驱动的呢?今天,我们一起来认识下 Redis 服务器的事件驱动. 对于 Redis ...