Setting up Windows 10 for IoT on your Raspberry Pi 2
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.
Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.
Is it fair to assume that a version of Win10 IoT core will be available soon to run on 32-bit processor on Intel Galileo?
Can I use Visual Studio 2015 RC on a Windows 8.1 machine to develop & deploy apps to the Raspberry Pi? I ask because I've been able to successfully build apps on Windows 10, but when I try and add the Windows IoT library to projects on Visual Studio 2015 RC on Windows 8.1, I get a targeting error
"Could not install package 'Windows.IoT 1.0.0-alpha-4'. You are trying to install this package into a project that targets 'Windows, Version=v8.1', but the package does not contain any assembly references or content files that are compatible with that framework. For more information, contact the package author."
The odd thing is that if I load the sample code (Blinky, for example), they execute and deploy and work just fine. I just don't seem to be able to create a new blank project on Windows 8.1
I'm probably missing something simple..
Heh, sometimes, all you need to do is ask for help and inspiration strikes in a blinding flash.
you don't have to use the Download Manager. There's a direct download link on the right!
I'm also a bit disappointed to see only a very rudimentary "webserver" in the sample repos and no Asp.net.
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.
You only need the FTM if you click the '[Download] selected file(s) using FTM' button, if you look to the right of the file in question, there's a 'Download single file' download link, which will download the zip file directly.
You should know better, Scott!
Why are you instructing your readers to open a PowerShell console to run no PowerShell code/script. It's loading the .NET runtime for nothing but burning cycles and making the user wait.
If you really want the user to use PowerShell and WMI, at least, give the PowerShell way of doing it:
Get-CimInstance -ClassName Win32_DiskDrive
I'm not sure why Windows 10 is needed
You only need Windows 10 because of the dism.exe which is available on Windows 10 only. ;)
(BTW: The dism.exe seems to be included in the "Windows SDK for Windows 10". That means, it should also be possible on Windows 8.1. I'll try it soon.)
I am new in IOT scene and was surprised how easy was it to install Windows 10 on Pie 2 and even deploy your own apps from Visual studio. However I still hasn't managed to get my mouse or keyboard or working.
I tried wired and usb wireless mouse (with batteries - just it case power was the issue).I am powering pie using a Nokia 1020 phone micro usb charger from an actual power source.
Am I missing anything ?
Here is another simple example:
you can install Windows 10 as a second operating system as I did. I have Windows 8.1 also Windows 10 with dual boot. As a guidance example, please refer to this url : http://www.howtogeek.com/197647/how-to-dual-boot-windows-10-with-windows-7-or-8/.
Now I could run the DISM command on Windows 7. No need for Windows 10.
Install Windows 10 for IoT using Windows 7
I only have Windows 10 on a VM and used this method successfully to install on my Pi 2. Note the second post tells you exactly the files you need to copy if you would rather not grab the whole sources folder.
Faulting application name: WindowsIoTCoreWatcher.exe, version: 10.0.10103.0, time stamp: 0x553591f8
Faulting module name: KERNELBASE.dll, version: 10.0.10074.0, time stamp: 0x553acf7b
Exception code: 0xe0434352
Fault offset: 0x00000000000218f8
Faulting process ID: 0x14e0
Faulting application start time: 0x01d0886303c5649d
Faulting application path: C:\Program Files (x86)\Microsoft IoT\WindowsIoTCoreWatcher.exe
Faulting module path: C:\WINDOWS\system32\KERNELBASE.dll
Report ID: b393ea71-ee50-46db-bc99-0dceaae2e34a
Faulting package full name:
Faulting package-relative application ID:
Now one thing that sucks, is that there doesn't appear to be any support for wifi dongles, at least not mine, so you end up tethered.
There is a Network & Wi-Fi section in the settings of the default IOT app, so if anyone gets a wifi dongle working, please let us know. Thanks in advance.
I believe it should be schtasks /run /tn StartMsVsmon
Many thanks for the great post!
first of all thx for bringing W10 to IOT!
I started installing all the stuff and tried to get my first project done on R-PI 2.
Now i have 2 problems:
1. I'm not able to open the Python examples (PTVS 2.2 RC VS2015 installed), CPython.targets was not found
2. I'm trying to talk to DHT22 Sensor (C#, Universal App). It is connected via MaxDetect-1-wire bus. I connected it to GPIO but now I'm not able to get the right timings. Is there a way to get into a kind of real time mode or have sth. like a clock? The minimum delay that i have to get is ~10us.
Any ideas? THX
I have been using Windows IoT with a BMP180 and DHT22 sensor, however to get the timing for the DHT22 sensor I have used an MSP430 to act as an I2C -> DHT22 bridge. I couldn't get the timing with just the Raspberry Pi in Windows, I know it's possible in Linux though. You could use an Arduino, a plain AVR, PIC, whatever, I2C (and I assume SPI) are super easy in Windows IoT so I'd recommend them if possible. Probably not the answer you wanted.
this isn't the answer that I wanted to get ;-) Briding with other hardware is not an option for me at the moment (for me it's more about getting things done in a nice way than getting things done in fast ). If it's possible on Linux it should also be possible on Windows 10. Maybe it's an option to create a driver or write some other stuff that runs outside the universal app and gives back the data. If I find a solution I'll share it. And probably in some weeks I'll buy some more hardware to create a bridge ;-)
Could you do some examples with headless apps and sockets / tcp or a WebService.
I had a similar error then I found this blog which got me up and running:
Can you elaborate as to why this doesn't work now? I've had some success running a self-hosted OWIN app on a rasp pi b+ using mono and had thought that it would be a similar (and easier) job to run the same on Windows 10 IoT.
There never was a bluetooth SDK for Windows Phone 7. You had to wait until Windows Phone 8 for that. So if you bought a Windows Phone 7 device you were out of luck if your goal was to develop device integrations.
I ahve tried to alter /config.txt to:
With these settings, Win 10 IoT will not boot at all.
Would you please suggest me how could I go ahead with the same
The other question I'm curious on if anybody has any experience, is driver support. Will any future Win 10 drivers inherently have to be cross-architecture or is this solely down to manufacturer support much in the same was as the very slow move to x64 support?
There is a type in the command to start up the vsmon: has /th but it should be /tn!
Cheers for the article :)
Typo on the command line to start the remote debugger:
schtasks /run /th StartMsVsmon
it should read:
schtasks /run /tn StartMsVsmon
I can ping the IP address, SSH and powershell to it but I do not have the web interface shown (I downloaded the image today).
Anyone having the same issue, the web server has been moved to port 8080 in the most recent builds. I was to eager to get started that I skipped the what's new of the build doc.
Thank you for the many useful articles on here.
do you know if there is a hardware compat list somewhere ? or a recommended USB Wifi ? I have a USB Wifi that came with my board but seems to be ignored.
Comments are closed.