Windows 10 IoT Core 是微软针对物联网市场的一个重要产品,与以往的Windows版本不同,是为物联网设备专门设计的,硬件也不仅仅限于x86架构,同时可以在ARM架构上运行。

上一篇文章我们详细介绍了Raspberry安装Win 10 IoT Core系统及搭建开发环境的过程,如果还不熟悉安装搭建过程可以参考  Win10 IoT C#开发 1 - Raspberry安装IoT系统及搭建开发环境(http://www.cnblogs.com/cloudtech/p/5562120.html)。

这次要通过对Pin的操作来模拟交通灯的切换,流程很简单。首先红灯亮起 -> 红灯10秒后熄灭 -> 黄灯亮起 -> 黄灯3秒后熄灭 -> 绿灯亮起 -> 绿灯10秒后熄灭,然后开始下一个循环。每次灯亮时会向远程服务器推送当前哪盏灯亮的消息。

准备工作:

刷好Win 10 IoT Core系统的 Raspberry Pi 2

部署Visual Studio 2015开发环境的PC

红,黄,绿 3种颜色的发光二极管

220R电阻

GPIO扩展板

IDC排线

杜邦线

面包板

1.安装元器件

首先将 GPIO扩展板 安装到面包板上,再通过 IDC排线 与 Raspberry Pi 2 的 GPIO 接口连接。

下面开始连接发光二极管,为了保证二极管不被烧坏需要加装限流电阻,我们假定三种二极管的压降均是1.8V,额定电流15mA,通过公式可以算出213.3Ω=(5V-1.8V)/0.015A , 所以我们选用220R的电阻。

发光二极管引脚长的一端为正极与5V电源相联,中间加装220R的电阻。红色的负极与GPIO21连接,黄色的负极与GPIO25连接,绿色的负极与GPIO20连接。

2.编写代码

打开 Visual Studio 2015创建 IoT 项目,将发光二极管的控制功能封装到一个名为LED的类中,该类包含两个主要方法,Open方法点亮二极管,Close方法熄灭二极管。主进程通过LED控制类的红,黄,绿三个实例来操作发光二极管的循环切换,每次切换时使用HttpClient向远程服务器推送消息。

完整代码:

namespace CloudTechIot2
{
//http://www.cnblogs.com/cloudtech
public sealed class StartupTask : IBackgroundTask
{
public void Run(IBackgroundTaskInstance taskInstance)
{
//初始化Pins
var pins = new LED[] { new LED(Colors.Red, 10), new LED(Colors.Yellow, 3), new LED(Colors.Green, 10) };
//循环
while (true)
{
//依次操作LED
foreach (var pin in pins)
{
pin.Open();
//通知远程服务器LED的切换
SendMsg(pin.Color.ToString());
//持续时间(秒)
Task.Delay(TimeSpan.FromSeconds(pin.Interval)).Wait();
pin.Close();
}
}
} //输出结果
private void SendMsg(string res)
{
//打印
Debug.WriteLine(res);
//推送到服务器
HttpClient httpClient = new HttpClient();
//服务器程序地址及端口192.168.1.5:8099
httpClient.GetAsync(new Uri(string.Format("http://192.168.1.5:8099/{0}", res)));
}
}
//LED颜色
public enum Colors : int
{
Red = 21,
Yellow = 25,
Green = 20
} //LED控制类
public sealed class LED
{
//GPIO
private static GpioController _gpio;
private Colors _color;
//颜色
public Colors Color
{
get
{
return _color;
}
}
private GpioPin _pin;
//Pin
public GpioPin Pin
{
get
{
return _pin;
}
}
private ushort _interval;
//持续时间
public ushort Interval
{
get
{
return _interval;
}
}
//创建Pin
public LED(Colors led, ushort interval)
{
_color = led;
_pin = _gpio.OpenPin((int)_color);
_pin.SetDriveMode(GpioPinDriveMode.Output);
_interval = interval;
}
//初始化GPIO
static LED()
{
_gpio = GpioController.GetDefault();
if (null == _gpio)
{
throw new Exception("GPIO initial failed");
}
}
//打开LED
public void Open()
{
_pin.Write(GpioPinValue.Low);
}
//关闭LED
public void Close()
{
_pin.Write(GpioPinValue.High);
}
}
}

3.调试代码

这里我们用Nodejs写了一个模拟服务器的程序,监听8099端口接收IoT设备推送来的消息并打印到Console中,在PC (IP:192.168.1.5) 上启动该程序开始监听。

接通Raspberry电源,等待 Win 10 IoT Core 启动结束后使用Remote Machine部署我们刚才写的程序。

程序运行后发光二极管按照我们的流程开始依次切换,红灯亮起 -> 红灯10秒后熄灭 -> 黄灯亮起 -> 黄灯3秒后熄灭 -> 绿灯亮起 -> 绿灯10秒后熄灭,然后开始下一个循环。

每一次切换的同时,服务器收到了IoT设备推送的切换通知。

到这里通过GPIO控制发光二级管切换及推送通知的过程就完成了,如果对代码有优化的建议,欢迎留言或发邮件给我(librastarwing@hotmail.com)。也可以加我的微信号查看以前的文章。

项目源码 GitHub https://github.com/CloudTechx/CloudTechIot 的 CloudTechIot2 目录下。

Win10 IoT C#开发 4 - UART 串口通信(http://www.cnblogs.com/cloudtech/p/5518306.html)

Win10 IoT C#开发 3 - GPIO Pin 控制发光二极管的更多相关文章

  1. Win10 IoT C#开发 6 - 4x4矩阵键盘扫描

    Windows 10 IoT Core 是微软针对物联网市场的一个重要产品,与以往的Windows版本不同,是为物联网设备专门设计的,硬件也不仅仅限于x86架构,同时可以在ARM架构上运行. 上一章我 ...

  2. Win10 IoT C#开发 5 - 操作 IoT 设备内嵌 SQLite 数据库 CURD

    Windows 10 IoT Core 是微软针对物联网市场的一个重要产品,与以往的Windows版本不同,是为物联网设备专门设计的,硬件也不仅仅限于x86架构,同时可以在ARM架构上运行. 前几章我 ...

  3. Win10 IoT C#开发 2 - 创建基于XAML的UI程序 及 应用的三种部署方法

    Windows 10 IoT Core 是微软针对物联网市场的一个重要产品,与以往的Windows版本不同,是为物联网设备专门设计的,硬件也不仅仅限于x86架构,同时可以在ARM架构上运行. 上一章我 ...

  4. Win10 IoT C#开发 4 - UART 串口通信

    Windows 10 IoT Core 是微软针对物联网市场的一个重要产品,既可以开发设备UI与用户交互式操作,又可以控制GPIO等接口,使得原来嵌入式繁琐的开发变得简单.通过Remote Debug ...

  5. Win10 IoT C#开发 1 - Raspberry安装IoT系统及搭建开发环境

    Windows 10 IoT Core 是微软针对物联网市场的一个重要产品,与以往的Windows版本不同,是为物联网设备专门设计的,硬件也不仅仅限于x86架构,同时可以在ARM架构上运行. The ...

  6. 开源物联网框架ServerSuperIO 3.0正式发布(C#),跨平台:Win&Win10 Iot&Ubuntu&Ubuntu Mate,一套设备驱动跨平台挂载,附:开发套件和教程。

    3.0版本主要更新内容: 1.增加跨平台能力:Win&Win10 Iot&Ubuntu&Ubuntu Mate 2.统一设备驱动接口:可以一套设备驱动,跨平台挂载运行,降低人力 ...

  7. win10 IoT开发 Serial​Device 返回 null

    树莓派3,win10 Iot,串口开发,抄例子,串口获取返回老是null,例子却可以,代码一样,上网查询结果如下: https://stackoverflow.com/questions/341603 ...

  8. 树莓派 Windows10 IoT Core 开发教程

    入门指引 现在让我们把LED连接到安装了Windows10 IoT Core 的硬件设备,并创建一个应用程序来让它们闪烁. 在Visual Studio中加载工程 首先在这里找到例程,这里有C++和C ...

  9. STC8H开发(十一): GPIO单线驱动多个DS18B20数字温度计

    目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...

随机推荐

  1. 浅析SQL Server实现分布式事务的两阶段提交协议2PC

    不久之前团队有个新人问我一个很重要的web服务接口如何保证事务的问题.因为涉及到跨库事务,当时我只是回答目前我们的SOA框架都不支持跨库事务.然后就问到了数据库跨库事务是如何实现的,我只能凭印象含糊回 ...

  2. Office 2016 正式发布——新特性预览

    今天微软又发生了一件大事!Windows Office 2016正式发布,这标志着Windows Office 又达到了一个新的里程碑! 全新的Office 发布为Office 365 用户带来了新的 ...

  3. vi小结1

    我使用xshell,vi里面中文乱码: http://www.cnblogs.com/TianFang/archive/2013/01/21/2870181.html 发现他的问题(gcc编译出错时会 ...

  4. 解决方法of未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序

    在开发的一个报表转换功能涉及到Excel97-2003(.xls)文件的导入.使用oledb来读取excel数据.代码为: public static DataSet LoadDataFromExce ...

  5. 02- Shell脚本学习--运算符

    Shell运算符 Bash 支持很多运算符,包括算数运算符.关系运算符.布尔运算符.字符串运算符和文件测试运算符. 算术运算符 原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 aw ...

  6. 搭建jekyll博客

    使用jekyll将markdown文件生成静态的html文件,并使用主题有序的进行布局,形成最终的博客页面. 特点 基于ruby 使用Markdown书写文章 无需数据库 可以使用GitHub Pag ...

  7. 每天一个linux命令(29):chgrp命令

    在lunix系统里,文件或目录的权限的掌控以拥有者及所诉群组来管理.可以使用chgrp指令取变更文件与目录所属群组,这种方式采用群组名称或群组识别码都可以.Chgrp命令就是change group的 ...

  8. canvas游戏之贪食蛇

    直接上效果图: 这个贪食蛇关键地方在于数组,它的长度增加其实是数组的增长,就是数组的向前追加等操作,核心就是数组的操作. 完整代码: <!DOCTYPE html> <html> ...

  9. iOS $299刀企业证书申请的过程以及细节补充

    最近申请了iOS的 299刀企业证书,相关过程有些问题,分享出来,以便后来人参考. 申请的过程我主要参考了别人以前的文章,链接如下: 1.https://developer.apple.com/cn/ ...

  10. JavaScript内存优化

    JavaScript内存优化 相对C/C++ 而言,我们所用的JavaScript 在内存这一方面的处理已经让我们在开发中更注重业务逻辑的编写.但是随着业务的不断复杂化,单页面应用.移动HTML5 应 ...