Windows 10 IoT Edition, Raspberry Pi 2 and some .NET Core.

“This, Jen, (indicating a small, plain, black box with a single flashing light on top), is the internet.”  – Maurice Moss (The IT Crowd).

Great episode that one.

I’ve been spending a bit of time lately with the Windows 10 IoT edition, running on a Raspberry Pi 2. The primary purpose of this has been to enable a migration from Mono/Linux to .NetCore/Windows for my IoT sensors. I have several raspberry pi devices around the house, with a Jabra USB conference microphone/speaker attached. These sensors then act as voice recognition hubs for my home automation system – so that I can talk to our house.

I’ve been using Mono/Linux quite successfully in the past, with a Linux daemon that captures audio, and transmits it back to the central home automation server for processing using the Microsoft Speech Platform. However, the Microsoft Speech Platform is from 2011 and I’ve been looking for a more modern engine.

It was very exciting when I discovered that the Windows 10 IoT edition would include support for the new Universal Windows speech engine. I was hoping for a significant improvement in recognition quality with a speech platform that’s fairly new, as opposed to one that is now 5 years old.

I’ll be writing additional posts about the many, many challenges that I’ve found with the Windows 10 IoT approach. I have it all working now, but with many workarounds and caveats that I hope will be mitigated in future Windows 10 IoT builds.

On the whole, I’ve not been as pleased as I was hoping to be. Whilst I understand this is simply the first attempt at an IoT operating system – I’ve found it too geared towards the consumer crowd, rather than the maker crowd. Based on the research that I’ve been doing – this seems to be common feedback. The OS seems to be heavily dumbed down – which makes sense of course – however given few end users are going to be installing and configuring this themselves, a few more options/tweaks would have been useful to support the maker crowd. However, in Microsoft’s defence – each new build has come with more options. The need to use develop applications using the ‘Universal’ application type – applications that work across a windows phone, xbox, or IoT device – adds many un unhelpful restrictions. I’m hoping at some point some of those restrictions are lifted. I suspect that, like many others, I’m not trying to write an application that is portable to my xbox and phone – but rather an application dedicated to a sensor function on an IoT like device.

As I’m trying to use these devices as a headless sensor (no keyboard/mouse/video), I am essentially trying to run a background service – like the Linux daemons I’d been using previously. With the IoT build – this is done by creating a ‘background task’ application. Getting a basic application going isn’t overly complex, made much easier with a very recent patched version of Visual Studio 2015 that is capable of creating the appropriate project types, and deploying to the raspberry pi 2.

Basically, you create a Windows 10 IoT Core Background Application. You then configure the application package manifest to inform the device which capabilities you require (e.g. microphone access), and then you can deploy to the device. A few commands in power shell later, and the device should be capable of starting your background service application automatically on boot.

In future posts, I’ll be covering examples on logging, acting as a WCF client, using the speech recognition framework, launching your application on startup, and a few others.

A tip to remember though – start with the most recent service pack for Visual Studio 2015 – as new builds of Windows 10 IoT are created, it’s good to keep your VS instance in sync.

~ Mike

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s