くうと徒然なるままに

モバイルアプリを作りながらバックエンドも作っています。

Windows10 IoT Core (Headless mode) のアプリを作ってみた

環境

Windows10 IoT Core Raspberry Pi 2 Model B

Windows10 IoT Core だけ使える特別なモードがHeadless Mode です。これは、一般的なUWP アプリがディスプレイにUIなどを表示して動いていますが、雑に言ってしまうとディスプレイを接続しなくてもUIがないため動かせます。

とは言っても一般的なUWP アプリと変わらない雰囲気で開発が出来ます。ただ、一般的なアプリのユースケースとは違ってくるのでそこは注意が必要かな、と思います。

手順

Visual StudioWindows IoT Core Project Templates拡張機能を入れる

ファイル>新規作成>C#>IoT>BackGroundApplication で作成します f:id:kuxumarin:20160331130858p:plain

以下のコードが作成されるかと思います。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Http;
using Windows.ApplicationModel.Background;

// The Background Application template is documented at http://go.microsoft.com/fwlink/?LinkID=533884&clcid=0x409

namespace BackgroundApplication
{
    public sealed class StartupTask : IBackgroundTask
    {
        public void Run(IBackgroundTaskInstance taskInstance)
        {
            // 
            // TODO: Insert code to perform background work
            //
            // If you start any asynchronous methods here, prevent the task
            // from closing prematurely by using BackgroundTaskDeferral as
            // described in http://aka.ms/backgroundtaskdeferral
            //
        }
    }
}

ここまで出来たらあとはVisual Stuio からリモートデバッグすれば完了です。

Raspberry Pi3 Model B (Element14)

Raspberry Pi3 Model B ボード&ケースセット (Element14版, Clear) -Physical Computing Lab

ベスト センサーモジュール キット 20種セット for Arduino / raspberry pi 3 モデル B raspberry pi 2 Model B 収納ケース付き(温度センサー/ホール効果センサー/赤外線トラッキングセンサー/タッチセンサー/マイク・サウンドセンサー/デジタル温度&湿度センサー/3色フルカラー SMD LEDモジュール/赤外線リモコン受信モジュール/赤外線送信モジュール/Bluetooth モジュールリレー モジュール/レーザーセンサー/遮光センサー/水銀チルトセンサー/リードスイッチ/火炎検知センサー/赤外線障害物検知センサー/土壌湿度検出モジュール/光センサー/可燃ガス&煙センサー)

これ1冊でできる!ラズベリー・パイ 超入門 改訂第2版 Raspberry Pi Model B/B+/2対応

一応Lチカのコードも置いておきます。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Http;
using Windows.ApplicationModel.Background;
using Windows.Devices.Gpio;
using Windows.System.Threading;

// The Background Application template is documented at http://go.microsoft.com/fwlink/?LinkID=533884&clcid=0x409

namespace BackgroundApplication
{
    public sealed class StartupTask : IBackgroundTask
    {

        private const int LED = 5;
        private GpioPin pin = GpioController.GetDefault().OpenPin(LED);
        private ThreadPoolTimer timer;

        public void Run(IBackgroundTaskInstance taskInstance)
        {
            var task = taskInstance.GetDeferral();
            InitGpio();
            timer = ThreadPoolTimer.CreatePeriodicTimer((poolTimer) => {
                pin.Write(GetGpioPinValue(pin.Read()));
            }, TimeSpan.FromMilliseconds(500));
        }

        public GpioPinValue GetGpioPinValue(GpioPinValue pinValue)
        {
            return pinValue == GpioPinValue.High
                ? GpioPinValue.Low
                : GpioPinValue.High;
        }

        private void InitGpio()
        {
            pin.Write(GpioPinValue.High);
            pin.SetDriveMode(GpioPinDriveMode.Output);
        }
    }
}