RaspberryPi（Windows IoT）を使ってUWPアプリでLチカ！

#はじめに
今回は，RaspberryPiにWindows 10 IoT Coreを導入したのでLチカをして遊んでみる．


#環境
- Raspberry Pi 3 Model B（OS：Windows 10 IoT core ver10.0.17134.1）
- VisualStudio2017

#手順
まず，RaspberryPi3のPinMappingを確認しておく．
![PinOut.png](https://qiita-image-store.s3.amazonaws.com/0/257442/84c83ea1-5191-8bde-7b65-e483af6d90b3.png)

今回は，

- GPIO 17（赤色LED用）
- GPIO 27（青色LED用）
- GPIO 22（緑色LED用）

の３つのPINを使って回路を設計する．
そして以下のように回路を設計した．
![3LED.png](https://qiita-image-store.s3.amazonaws.com/0/257442/31c7e4d3-5ab7-562a-a849-53e76212088b.png)




#コーディング
※まず初めに，VisualStudioから参照設定で【Windows IoT Extension SDK】を必ず追加してください．
csのみでxamlは省略します．

```UsingModule.cs
using Windows.Devices.Gpio;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;

namespace UsingModule
{
    public sealed partial class MainPage : Page
    {
        private const int RED_LED_PIN = 17; // 接続してるGIOPピン番号
        private const int BLUE_LED_PIN = 27; // 接続してるGPIOピン番号
        private const int GREEN_LED_PIN = 22; // 接続してるGPIOピン番号
        private GpioPin pin_RED; //定義するGPIOピン
        private GpioPin pin_BLUE;　//定義するGPIOピン
        private GpioPin pin_GREEN; //定義するGPIOピン
        private bool RED_bool = false;
        private bool BLUE_bool = false;
        private bool GREEN_bool = false;

        public MainPage()
        {
            this.InitializeComponent();

            /* 各GPIOピンをセットアップする */
            setupGPIO(ref pin_RED, RED_LED_PIN);
            setupGPIO(ref pin_GREEN, GREEN_LED_PIN);
            setupGPIO(ref pin_BLUE, BLUE_LED_PIN);

        }

        /// <summary>
        /// GPIOピンをセットアップするメソッド
        /// </summary>
        /// <param name="pin"></param>
        /// <param name="PIN"></param>
        private void setupGPIO(ref GpioPin pin, int PIN)
        {
            var gpio = GpioController.GetDefault();

            if (gpio == null)
            {
                pin = null;
                return;
            }

            pin = gpio.OpenPin(PIN); // GPIOをオープン
            pin.Write(GpioPinValue.Low); // 最初消しておく
            pin.SetDriveMode(GpioPinDriveMode.Output); //LEDをアウトプットモードに設定
        }

        private void onClick_RED(object sender, RoutedEventArgs e)
        {
            if (RED_bool == false)
            {
                pin_RED.Write(GpioPinValue.High); // LEDオン
                RED_bool = true;
            }
            else if(RED_bool == true)
            {
                pin_RED.Write(GpioPinValue.Low); // LEDオフ
                RED_bool = false;
            }
        }

        private void onClick_BLUE(object sender, RoutedEventArgs e)
        {
            if (BLUE_bool == false)
            {
                pin_BLUE.Write(GpioPinValue.High);
                BLUE_bool = true;
            }
            else if (BLUE_bool == true)
            {
                pin_BLUE.Write(GpioPinValue.Low);
                BLUE_bool = false;
            }
        }

        private void onClick_GREEN(object sender, RoutedEventArgs e)
        {
            if (GREEN_bool == false)
            {
                pin_GREEN.Write(GpioPinValue.High);
                GREEN_bool = true;
            }
            else if (GREEN_bool == true)
            {
                pin_GREEN.Write(GpioPinValue.Low);
                GREEN_bool = false;
            }
        }
    }
}

```

#実行結果
Raspberry Pi側での出力画面
ボタンを押すと，そのLEDが光ります．
![Screenshot_2018-10-05_11-21-30.jpg](https://qiita-image-store.s3.amazonaws.com/0/257442/f49a7c2f-cb31-2cb3-2084-193a68bf21ea.jpeg)

UWPアプリでRaspBerryPiを動かすのにも少し慣れ的ました．