At a recent SQL Server User Group in Birmingham I presented an end to end IoT solution streaming data from sensors on a Raspberry Pi 3. What followed the talk was a very simple question from an audience member asking basically; how do you get started with doing this? It then occurred to me that I had missed out the vital information for getting the Windows 10 IoT Core operating system (OS) onto the device. In the following article I hope to redeem myself from this error of assumption. This has fallen quiet nicely as well because for the Raspberry Pi 3 the OS only came out of preview a couple of weeks ago. This means you no longer need to be an “insider” to get hold of this.
The SD Card
No assumptions now, lets be explicit. The Raspberry Pi 2 & 3 require micro SD cards, if your ensure which they are, these are approximately the size of your thumb nail. As well as the physical size the other important thing for Windows 10 IoT Core is you’ll need a Class 10 micro SD card. The class indicates the speed at which you can read and write from the storage, anything less than a Class 10 card will not be fast enough for this OS and it fail to boot up on the device.
In terms of capacity, so far I’ve been working with 16Gb SD cards without any issue or limits on storage. As you’ll see below once the card has been imaged is gets partitioned and on a 16Gb card a chunk of that is left unallocated.
Lastly to get the micro SD card available in your Windows desktop machine I use the following adaptors which have served me well for many years. All the micro SD cards I’ve purchased have always come with the standard SD card shell and are only pence to purchase separately if required. The final USB reader is just in case the machine doesn’t already have such a thing. All my laptops have a slot on the side, but not my desktop machines.
Assuming you now have the right size, shape and smell of SD card available in Windows by far the easiest tool I found to flash the card is Microsoft’s IoT Dashboard. This is available to download and install from here: https://developer.microsoft.com/en-us/windows/iot/Docs/GetStarted/rpi3/sdcard/stable/GetStartedStep1.htm. Helpfully the IoT Dashboard is a ClickOnce install and frequently receives updates to it’s options.
On the ‘Set Up A New Device’ panel you have everything you need to install the Windows IoT Core OS image on your card.
After selecting your required combination of board you can even now configure the hostname and admin password for the target device. Something which previously had to be done post install with PowerShell or via the settings web portal. See my previous blog post on controlling your device if you require assistance with this >>>.
Next you just need to accept the usual T&C’s and flash the card. If your chosen OS image hasn’t already been downloaded this will also be done for you as well. Lovely!
Note; elevated permissions will be required when the process comes to partition and write to the card so expect a prompt if you aren’t already a local administrator.
After the process has completed I’d strongly recommend a safe eject of the device via normal Windows methods to avoid any corruption and ultimately needing to repeat the process.
You can now insert the card into your Raspberry Pi and boot it up.
Disk Management & Card Contents
This is just extra information should you be interested in what the IoT Dashboard imaging process did to your SD card. I was certainly concerned to discover that Windows now thought my SD card was only 64Mb in size after the flashing processes!
In Windows Disk Management you will now have something that looks like the following. As mentioned above the card actually gets partitioned with only one of those partitions being a FAT file system that Windows can read and present.
To further confuse things if you boot the device and mount the admin share C$ from a UNC path of the IP address as a mapped network drive it’ll appear like you have accessed the 1.31Gb block of the partitioning. Here your Windows desktop machine will probably report something like 571Mb of the space at the network location has been consumed. So far so good right?
But, if you enter the mapped drive Select All and Right Click > Properties you’ll then find files and folder totally 1.57Gb!
The shortcuts you see in the above screen shot for ‘CrashDump’, ‘Data’ and ‘EFIESP’ report the target as an “Unlabelled Volume” if you view there properties. But you can navigate to them and browse the contents.
In an attempt to work out what folders physically existed where on the SD card I took a random 2Gb ISO file and started copying it into different directories. Sadly this led to even more confusion. The only thing I think we can be sure of is that the ‘Data’ shortcut above represents the 12.86Gb partition seen in Disk Management. But even that I didn’t manage to prove because it contains a nest of other Program Files directories as well.
In conclusion we might have a 16Gb SD card, but finding out what the operating system has used and what we still have available for apps or camera pictures remains a mystery for another day.
Many thanks for reading
If like me you have a several Raspberry Pi’s doing different things and running different operating systems controlling them can sometimes be a bit of a challenge, especially with a wealth of remote control protocols and command line tools to choose from. In this post I’m specifically exploring the different ways to control your Raspberry Pi running Windows 10 IoT Core.
The thing that surprised me about Microsoft’s “core” flavour of operating systems is just how much they appear on the network like a normal workstation, this might sound silly and very obvious but for the longest time when installing servers in Hyper-V I would shy away from the minimalist core install because I very wrongly assumed this meant you only got a black CMD prompt and nothing more. With Windows 10 IoT Core I can assure you that this is certainly not the case. Apart from the lack of a pretty title Start Menu the operating system (OS) is feature rich and very easy to work with.
Lets look at what we can use to control our Pi and Core OS.
The Old Fashioned Physical Method
Just for completeness its probably best to start with the traditional approach of using physical things like a HDMI cable plugged into the back of your monitor plus a keyboard and mouse connected via USB ports. This is obviously very basic and probably not why you’ve been drawn to this blog post. However even via this method you do get a graphical interface on screen with the ability to alter things like the WiFi settings and actually shutdown the device correctly without pulling the plug.
Windows Core Browser Console
Next and by far my favourite feature in Windows 10 IoT Core is the browser based console that can be connected to using the IP address of the device followed by port 8080. Eg: HTTP://192.168.1.2:8080.
If you navigate to the equivalent address of the device on your network you will be prompted for a set of admin credentials and then taken to a lovely bunch of pages which include a wealth of configuration options. When developing this satisfies almost all of my immediate needs for controlling the device and starting up deployed applications.
The browser console even includes a Task Manager style page of running processes with some pretty real time performance graphs for CPU, RAM, I/O and Network usage. See slide 5 of 16 in the GIF above.
Lets move on before I turn this blog post into a page of screen shots!
Windows IoT Remote Client
Next we have the IoT Remote Client app, which as I type is officially still in preview. However this is another really helpful way to control your device. The desktop application available from the Microsoft Store is basically the IoT Core operating system RDP client, so no need for VNC server licencing between Raspbian and Windows to worry about.
To get this running in the browser based console I mentioned above first go to the Remote page and tick the box to Enable Windows IoT Remote Server. AKA Terminal Services. Next install the app on and start it up. If all is well it will detect the IoT device on your network and allow you to connect, or just enter the IP address in the box provided. Post authentication you’ll then have a view of your IoT device matching exactly what the HDMI cable can offer. Plus the ability to interact with the device with a keyboard and mouse through the remote session. When starting apps that include something graphical it’s really useful to see the thing. Another use case might be when performing cloud to device messaging, having the received content on screen is nice to see.
This method of remote control is where I actually pulled the first screen shot above from, rather than taking a picture of the monitor displaying the HDMI output.
Another really useful bit of software in the IoT device toolbox is the IoT Dashboard.
Download link: http://go.microsoft.com/fwlink/?LinkID=708576
This walks you through the setting up a new device SD card plus gives you a My Devices window for easily launching the next 2x features detailed below.
What can’t you do with PowerShell in the Microsoft world?
Before the IoT Dashboard connecting to the IoT Core device required starting the PowerShell remote commands service. Then setting the items address etc etc. Like this:
1 2 3 4 5 6 7
$MyDeviceIP = "192.168.1.2" #Example Net start WinRM Set-Item WSMan:\localhost\Client\TrustedHosts -Value $MyDeviceIP Enter-PSSession -ComputerName $MyDeviceIP -Credential "localhost\Administrator"
Now if using the IoT Dashboard above from My Devices you have the option just to right click on the auto detected device and select Connect using PowerShell. This handles all the above prerequisites for connecting and only prompts for credentials. Lovely!
Note; both PowerShell methods of connection to the device will require elevated permissions.
Admin File Share
Lastly and again really for completeness we have the traditional UNC path. From the IoT Dashboard this is made easily in My Devices this time by selecting Open Network Share. This brings up a file explorer window to the C$ admin share for browsing the file system on the SD Card.
For anybody that is used to seeing the contents of the C drive on a Windows this folder structure will look very familiar. Program File etc.
Sadly despite a few attempts things like Remote Registry access, remote connection to Services using your local snap-in console and Computer Management are not currently supported. The Service to enable Remote Registry simply isn’t there, along with other remote management services on Windows 10 IoT Core. If this changes I’ll be sure to update this post.
Many thanks for reading.