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)

