博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Win10 IoT C#开发 3 - GPIO Pin 控制发光二极管
阅读量:4939 次
发布时间:2019-06-11

本文共 3862 字,大约阅读时间需要 12 分钟。

原文:

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

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

这次要通过对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 的 CloudTechIot2 目录下。

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

posted on
2017-09-12 11:01 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/lonelyxmas/p/7508998.html

你可能感兴趣的文章
mysql优化——show processlist命令详解
查看>>
Solr服务器搭建
查看>>
画世界怎么用光影_世界绘画经典教程:水彩光影魔法教程
查看>>
win+rsync+php,跨平台的fswatch+rsync同步备份
查看>>
vue2 cdn 加载html,vue项目中使用CDN加载
查看>>
数组转集合踩坑
查看>>
node.js的异步I/O、事件驱动、单线程
查看>>
vue cli3 子目录问题
查看>>
github.com访问慢解决
查看>>
微服务架构最强详解
查看>>
转:哈夫曼树详解
查看>>
.Net Core Identity外面使用Cookie中间件
查看>>
【坐在马桶上看算法】算法1:最快最简单的排序——桶排序
查看>>
C#中泛型之Dictionary
查看>>
强连通分量
查看>>
使用Code First模式开发如何更新数据库(转载)
查看>>
sqoop导出工具
查看>>
Codeforces Round #376 (Div. 2)
查看>>
Codeforces 607D Power Tree 线段树 (看题解)
查看>>
写在人生的路上——2016年上半年总结
查看>>