原文:Win10 IoT C#开发 3 - GPIO Pin 控制发光二极管
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控制发光二级管切换及推送通知的过程就完成了,如果对代码有优化的建议,欢迎留言或发邮件给我([email protected])。也可以加我的微信号查看以前的文章。
项目源码 GitHub https://github.com/CloudTechx/CloudTechIot 的 CloudTechIot2 目录下。
Win10 IoT C#开发 4 - UART 串口通信(http://www.cnblogs.com/cloudtech/p/5518306.html)