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

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

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

posted @ 2016-06-26 18:03  CloudTech  阅读(6405)  评论(3编辑  收藏  举报