前言

  树莓派(Raspberry Pi,RPi)是专门为学生计算机编程教育而设计,只有信用卡大小的卡片式电脑,可以运行Linux或者Windows 10 IoT Core操作系统。本文将利用树莓派和UWP(Universal Windows Platform)开发技术搭建一个可以实时监控的气象站系统。

硬件和涉及技术

  

硬件部分:

  • 树莓派2或3一块,8G以上内存卡一张,读卡器(或带sd卡接口的电脑)一个;
  • Dht11温湿度传感器一个,GY-68 BMP180气压计一个;
  • LY-69 土壤湿度计一个,MQ-2 烟雾气敏传感器一个,雨滴传感器一个;
  • 公母杜邦线若干,面包板一个,micro USB线一根,电源一个;
  • HDMI接口显示器一台(或HDMI转其它接口)。

开发部分:

  • 集成开发环境: Visual Studio 2017(建议使用社区版);
  • 开发语言:C#;
  • 开发平台:UWP;
  • 通信协议:MQTT;
  • 树莓派操作系统:WIndows 10 IoT Core;
  • 数据库:Sqlite

操作系统的下载与安装:

  • 安装Windows 10 IoT Core Dashboard 应用, 访问微软开发者中心https://developer.microsoft.com/en-us/windows/iot/GetStarted. 依次选择Raspberry Pi 3,Install onto my blank microSD card,Windows10 IoT core,点击Next按钮来到新页面,点击Download Dashboard按钮下载,然后安装。
  • 烧录操作系统到MicroSD卡,安装完成后选择设置新设备项进入烧录页面。设备类型选择Raspberry Pi 2&3;OS内部版本选择Windows 10 IoT Core(15063);驱动器选择插入的MicroSD卡;输入设备名称、密码、确认密码;勾选WLAN网络连接(勾选此项后可以将当前电脑连接的WLAN信息复制给树莓派开发板的操作系统,省去再次配置的麻烦);至此,树莓派安装Windows 10 IoT操作系统完成。

如下图:

  Windows Device Portal:

  在同一网络环境下的浏览器输入树莓派的IP地址,端口为8080,回车后会提示输入用户名和密码。默认用户名为Administrator,密码为烧录操作系统时设置的密码,如果忘记密码则只能重新安装。登陆成功后会看到树莓派开发板的当前操作系统下的详细信息,应用程序管理界面,设置默认程序以及开机自启动等。

实现

MQTT通信:

  MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议。经过多年的发展,MQTT在各个领域的应用均有凸显,它可以作为手机客户端的消息推送工具,并且在安卓应用中有比较大的占比。作为一款专为物联网设计的通信协议,MQTT具有在低带宽、不稳定的网络环境下正常工作的特性。它的消息传递有三种模式:

  1. 至多一次,会发生消息丢失或重复,这种模式适合传感器类的数据传输,即使消息丢失,很快会再次发送。
  2. 只有一次,确保消息到达且不发生重复数据,适合需要精确数据的系统,例如计费系统。
  3. 至少一次,确保消息可以到达,但可能发生重复。

关于MQTT服务器的搭建可以参考:http://blog.csdn.net/yannanxiu/article/details/52703946

MQTT在UWP下的使用可以参考:http://www.cnblogs.com/Yixin-ran/archive/2016/10/21/mqtt.html

要在UWP下使用MQTT需要安装nuget包m2mqtt

在这里我还是贴一下MQTT的连接代码:

 public class Mqtt : MqttClient
{ public Mqtt(string host) : base(host, , false, MqttSslProtocols.None)
{
Connect(Guid.NewGuid().ToString(), "admin", "password");
Subscribe(new string[] { "atmo" }, new byte[] { MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE });
// PostData("Hello World!");
}
public void RequestData(string msg)
{
Publish("atmo", Encoding.UTF8.GetBytes(msg));
}
public void PostData(string msg)
{
Publish("atmo", Encoding.UTF8.GetBytes(msg));
}
}

Sqlite实现:

要在UWP下使用Sqlite需要先安装VS扩展Sqlite for Universal Windows Platform和Nuget包SQLite.Net-PCL。关于sqlite的详细使用方法参照:http://www.cnblogs.com/yanxiaodi/p/4941312.html

下面是本系统中Database类:

  public class DataBase : SQLiteConnection
{ public static string path = Path.Combine(ApplicationData.Current.LocalFolder.Path, "atmo.db");public DataBase() : base(new SQLitePlatformWinRT(), path)
{
CreateTable<DataModel>();
}
}

INotifyPropertyChanged接口实现

 public class ViewModelBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged([CallerMemberName]string name = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
}
}

树莓派GPIO图

硬件连接图:

传感器引脚图:

项目地址:https://github.com/yixinin/Yixin.Atom

该项目还不完善,欢迎大家补充和指正!

有任何问题可以联系我的Email:xingran1994@live.com

最新文章

  1. GCD 扫盲篇
  2. ubuntu下MySQL中文乱码(新版本Mysql修改方法)
  3. python3-day3-python基础3
  4. LR连接oracle时出现:SQLState=28000[Oracle][ODBC][Ora]ORA-01017:invalid username/password;logon denied
  5. ORACLE 中NUMBER 类型 低精度转换成高精度
  6. android软键盘的一些控制 转来的,格式有点乱
  7. jQuery 元素移除empty() remove()与detach()的区别?
  8. How to Install Tomcat
  9. CM_RESOURCE_LIST structure
  10. HTML基本文件, CSS基础
  11. Python+Selenium+webdriver环境搭建(windows)以及相关资源下载链接
  12. 汇编指令-MRS(读)和MSR(写)指令操作CPSR寄存器和SPSR寄存器使用(1)
  13. CSS盒子模型之详解
  14. Java EE ----- Container/Injection
  15. linux目录1
  16. Good Bye 2018 B. New Year and the Treasure Geolocation
  17. gunicorn flask nginx环境配置
  18. jquery $与jQuery
  19. nginx反向代理tomcat应用,struts2网站程序redirect时导致请求地址错误的解决方法
  20. HwPointEventFilter: do not support AFT because of no config华为手机进入工程菜单

热门文章

  1. [Compose] 12. Two rules about Funtors
  2. iOS8下注冊push方式变更
  3. 【9107】Hanoi双塔问题(NOIP2007)
  4. 新版Sublime text3注册码被移除的解决办法
  5. [React] Public Class Fields with React Components
  6. 【BZOJ1426】收集邮票 概率DP 论文题 推公式题
  7. 第二篇:_UICascadingTextStorage attributesAtIndex:effectiveRange:]: Range or index out of bounds
  8. 我的IT成长路——为梦想扬帆起航
  9. Mybatis中sql语句中的in查询,一定要判断null的情况
  10. Visual Studio Debugger