環境
Windows10 IoT Core Raspberry Pi 2 Model B
Windows10 IoT Core だけ使える特別なモードがHeadless Mode です。これは、一般的なUWP アプリがディスプレイにUIなどを表示して動いていますが、雑に言ってしまうとディスプレイを接続しなくてもUIがないため動かせます。
とは言っても一般的なUWP アプリと変わらない雰囲気で開発が出来ます。ただ、一般的なアプリのユースケースとは違ってくるのでそこは注意が必要かな、と思います。
手順
Visual Studio にWindows IoT Core Project Templates の拡張機能を入れる
ファイル>新規作成>C#>IoT>BackGroundApplication で作成します
以下のコードが作成されるかと思います。
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 からリモートデバッグすれば完了です。
一応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); } } }