標籤:
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])。也可以加我的號查看以前的文章。
Win10 IoT C#開發 3 - UART 串口通訊(http://www.cnblogs.com/cloudtech/p/5518306.html)
Win10 IoT C#開發 2 - GPIO Pin 控制發光二極體