This week at the BUILD conference in San Francisco Microsoft released the first preview of Windows 10 IoT (Internet of Things) for Raspberry Pi 2 (as well as other lovely devices like the Intel Galileo and MinnowBoard Max).
First, as I mentioned in February the Raspberry Pi 2 runs the Windows 10 IoT version. That means there is no "shell" or Windows Explorer. It's not a tiny desktop PC, but rather the core brain of whatever embedded maker thing you choose to build with it. The core of it is Windows. You've got PowerShell, you can run Windows Universal Apps that you write in C#, and you can talk to peripherals.
Over here at http://microsoft.hackster.io there is a great list of projects you can build with Windows IoT, including a cool robot you can control with an Xbox Controller.
Installing Windows 10 on your Raspberry Pi 2
This is an early build so things will change and get easier I'm sure. To be frank, getting the builds for Raspberry Pi took some confusing on my part to download.
- Go to the Windows Embedded Connect site and sign in.
- Pick the Build you want. I got Windows 10 IoT Core Insider Preview Image for Raspberry Pi 2.
- You'll need to install this older "File Transfer Manager" if you don't have it. If you have Chrome, you'll need to click the ".dlm" file and open it with the File Transfer Manager. You'll also need to accept two EULAs.
- Then you'll get a large ZIP file with the image you want inside. Unzip somewhere.
- Here's a kicker, you'll need a Windows 10 Preview machine to run these commands and install.
- I built one with a laptop I had around. I'm not sure why Windows 10 is needed. However, once it's setup you can use Windows 8.1 to talk to the Pi 2 or Remote PowerShell in.
- You should also get Microsoft Visual Studio 2015 RC.
- After you install 2015, go try to make a Universal App and it will download the Universal Apps SDK.
- Follow the instructions here. Below is my summary along with the gotchas that slowed me down.
Now, plug your micro SD card into your Windows 10 PC (I use a micro to USB adapter) and open an Administrator PowerShell and run:
- wmic diskdrive list brief and make note of the physical disk number of your SD Card.
next run this and change PhysicalDriveN to whatever your SD Card's physical number is.
dism.exe /Apply-Image /ImageFile:flash.ffu /ApplyDrive:\\.\PhysicalDriveN /SkipPlatformCheck
- NOTE: I had some issues and got "Error 50" on one of my micro SD cards. Changing cards worked. Not sure what's up.
Now, just put your micro SD card into your Pi 2 and boot up your Pi 2 while connected to a display and Ethernet. It will initially startup very slow. It could be 2 to 4 minutes before you get to the main screen. Just hang in there until you see this screen. This is the Default app and just shows the IP Address of your Raspberry Pi 2.
Now, from your local admin PowerShell run these commands to remote into your Pi 2. The default name is MINWINPC but you can also use the IP Address.
net start WinRM
Set-Item WSMan:\localhost\Client\TrustedHosts -Value MINWINPC
remove-module psreadline -force
Enter-PsSession -ComputerName MINWINPC -Credential MINWINPC\Administrator
When the credentials dialog opens, make sure you use yourrpi2machinename\Administrator or yourrpi2ipaddress\Administrator for the user name. I was just using Administrator. The default password is p@ssw0rd and you should change it.
See here how the PowerShell prompt changes to include the remote machine's name after I've remoted in?
On your Windows machine install the MSI that was included in the download. It will start a small watcher utility that will scan your network and look for Microsoft IoT devices. It's easy to lose them if their IP address changes. It also has a nice right click menu for getting to its embedded web server.
Included and running on the image is a web server that will let you explore attached devices and running processes.
You can also deploy applications from here although you'll usually do it from Visual Studio.
As of the time of this blog post they didn't have WiFi and Bluetooth ready yet but they are updating it often so I am sure we'll see updates soon. Here is a list of devices that work today via USB.
There's lots of samples. You can make Background (headless) IoT apps or do ones with a UI since the Raspberry Pi has HDMI built in.
Finally, here's turning on an LED from C# (with comments and defensive code).
private void InitGPIO()
var gpio = GpioController.GetDefault();
// Show an error if there is no GPIO controller
if (gpio == null)
pin = null;
GpioStatus.Text = "There is no GPIO controller on this device.";
pin = gpio.OpenPin(LED_PIN);
// Show an error if the pin wasn't initialized properly
if (pin == null)
GpioStatus.Text = "There were problems initializing the GPIO pin.";
GpioStatus.Text = "GPIO pin initialized correctly.";
Deploying from Visual Studio
Make sure the remote debugger is running with schtasks /run /tn StartMsVsmon and connect with no authentication while it's running.
Now you can deploy a Universal App (with UI!) directly from Visual Studio:
And here is my amazing app. Which is basically just a bunch of controls I threw onto the XAML. But still. Fancy!
Windows Remote Arduino and Virtual Arduino Shields
A few other cool maker things worth pointing out are Windows Remote Arduino and Virtual Arduino Shields. Remote Arduino lets you talk to your Arduino from your Windows machine using the Firmata protocol. Then you can reach out to an Arduino device and give it commands from a Windows Universal app. The Virtual Arduino Shields lets you use a Windows Phone as a well, just that, virtual shields. Shields for Arduino can add up and when you're prototyping you may not want to shell out for a Gyro or GPS. A cheap phone like a Lumia 530 has like $200 worth of sensors (gps, touch display, gyro, internet, speech, etc) in it that you can exploit.
It's early days but I'm pretty stoked about all the options that Makers have available. The ASP.NET team is in talks with the IoT folks to see if we can get ASP.NET 5 running on Windows IoT on a Raspberry Pi as well, so stay tuned. Get started here.