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)