• Win10 IoT C#开发 3


    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)

  • 相关阅读:
    动态SQL的注意
    关于数据库抛出异常:Incorrect string value: 'xE1x...' for column '字段名' at row 1 问题的解决方法
    让.bashrc文件在终端自动生效
    期中考试题
    RAP、Mock.js、Vue.js、Webpack
    全局变量变为局部变量 & MVC思想
    用 JS + LeanCloud 给网页添加数据库(留言功能)
    闭包的使用
    从发请求到AJAX到同源政策
    从实现HTML页面局部刷新到JSONP
  • 原文地址:https://www.cnblogs.com/cloudtech/p/5617902.html
Copyright © 2020-2023  润新知