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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM