Revisiting Windows IoT

I was cleaning up my workspace this morning and my Raspberry Pi 3 device caught my eye. I haven’t messed with Windows IoT since the summer when I gave up due to the immaturity of the platform. I decided to check to check up on the state of things–after all, I still have a project in mind. It looks like Microsoft finally made an official release for Windows IoT: Windows 10 Build 10.0.14393.693. I downloaded the image and thought I would give this platform another shot.

Once again I could not get the Raspberry Pi 3 to boot. I had issues with the Raspberry Pi 2 as well. So next I reformatted the SD card, and tried again. No luck with the Raspberry Pi 3. However, the Raspberry Pi 2 was able to come up, and I could ssh into the device as well as control it through IoT Dashboard. I tried again and again with the Raspberry Pi 3 for quite awhile, and just when I was ready to give up, I noticed the LEDs. After applying power, there is some flashing green (ACTIVE) LEDs. After a few seconds though, there was no more green (ACTIVE) LEDs flashing, but the red power LED flashed once every couple of seconds. The Raspberry Pi documentation is not very easy to navigate for technical details, but after some searching it appears that the this happens when the power supply dips too far below 5.0 V.

I tried a few different wall-wart adapters from various phones or adapters, but no luck. Instead of using a wall-wart power supply, I decided to use the USB 3.0 port on the front of my PC as the power supply. And sure enough, within a few seconds, I was able to see the Raspberry Pi 3 in the IoT dashboard. It’s alive~~~~!

With the device working, now it was time to tackle Visual Studio. I probably should not have done so, but I am in the midst of upgrading to Visual Studio 2017. The upgrade is not going well either. I installed, rebooted the system as was requested at the end of the install, then tried to start Visual Studio 2017, but I have had a screen for hours now saying “We’re getting things ready…thanks for your patience.” I am going to have to kill the process and try again. Nothing ever upgrades smoothly in Windows land.

To be determined….as usual. I have read good things about C++ enhancements in Visual Studio 2017. I hope things are better in the Windows IoT world too.

Windows IoT Impressions

I am impressed with the ability to run Windows on the ARM and with how easy it is to use out of the box. But developing and deploying applications? Not such a pretty picture–Microsoft has a LONG way to go still. A RPi device with RaspianOS and python is a much better option at this point in time for my purposes: electronics interfacing and sensors. For reference, I have the following platform: Raspberry Pi 3 with Windows IoT 10.0.14376.0, and a Windows 10 desktop with Visual Studio 2015 Update 2.

The Pros

Being able to ssh into my device…excellent! Powershell is no replacement for Bash, but it is good enough and get the job done. Being able to mount my device’s C:\ and drag and drop files to the device…awesome! Networking functioning straight out of the box after plugging it into my Ethernet switch…check! Web-based control panel for monitoring the device, updating Windows, power-cycling…check! Headless capability…check!

The platform looks good overall, the only thing I am yearning for is Bash, but that is because I’m a Bash power user. For someone familiar with Powershell, I’m sure this is just perfect.

The Cons

My biggest disappointment is that Visual Studio remote debugging and remote deployment of apps does not appear to work. Based on my research, Microsoft removed the binary msvsmon.exe from their Windows IoT distribution, expecting it to be installed on a device by Visual Studio. That would make sense conceptually, but if Visual Studio cannot connect to the device, how do I get started?  I can ping the device, SSH into it, mount its c:\ on my desktop…so this is clearly not a connectivity issue. The issue must be with Visual Studio and Windows 10 IoT not playing nice together.

Capture1

Sorry, Microsoft. None of the settings in that menu are helping with this issue. Further research reveals that this was a problem with Windows IoT 10586 and Visual Studio 2015 Update 1.  Other workarounds provided, such as universal encryption disablement, do not appear to even be an option in VS 2015 Update 2.  Visual Studio has changed yet again from November 2015 when this problem first appeared, and so far I have been unable to figure out exactly what will fix the issue.

My guess is that a fix will be coming down the pipeline at some point, but frankly this platform is still to immature for serious development. I thought of downgrading to an older version of Windows IoT, but Microsoft is not allowing me to download it, I am only able to get the latest version (which I currently have). And after how long it took to get Visual Studio installed…and then updated…snowball’s chance in hell I’m going back to an older version of Visual Studio.

Closing Thoughts

For now I have to build a C++ application on my desktop and then copy the binary over to my Windows IoT device. That will work for now as I am still getting my feet wet, but hopefully that will be addressed in the next Windows IoT build, or next Visual Studio update. Once I start doing more complex things I will definitely want to be able to debug remotely.

I have started to browse some of the C++ samples and I am getting nervous, the code looks atrocious and appears to depend on some Windows RT libraries, COM objects, etc. Hopefully it will just be a small learning curve and be boiler plate code. I am sure it is easier with C#, but I don’t care to learn C# just for this device. Waste of my time. Perhaps if the C++ is too immature then there is hope for python? To be seen…

Trying out Windows IoT

To be brutally honest, Windows as a system is rather boring for a guy who is interested in embedded systems. Don’t take me for a zealot, though I prefer Linux for most things, Windows has its place for sure. Microsoft Excel is the killer application in my book, and there are great CAD tools like Altium and SolidWorks that make it an excellent platform for getting real work done. But for embedded systems??? Sure there was Windows CE, but that was really overkill. PalmOS was much more slick in its time! And iOS and Android are rightly putting Windows Phone in the grave. When I first read about Windows IoT, I did not bother to read any further. It sounded like another half-assed Microsoft attempt at trying to be relevant outside of desktop computing.

Yet I found I was reading an article about I2C/SPI interfaces and the Windows Driver Kit, and that sparked an interest. I can use Windows to control I2C, SPI, and GPIO devices? Please tell me more! Microsoft has created a stripped down version of Windows 10, known as Windows 10 IoT, that is capable of running on x86 and ARM processors. You can develop C++, C#, or Python apps with Microsoft Visual Studio, and then remotely debug and deploy apps to an embedded host. Now that sounded interesting! And there is more! You can download the community edition of Visual Studio for free and obtain Windows 10 IoT for free as well (permitted if you have Windows 10 Desktop). Sign me up.

So I ordered a Raspberry Pi 3 (64-bit ARM) that supposedly came with an SD card loaded with NOOBS directly from the Microsoft Store. I opened the box, pulled the microSD card out of the SD card holder, plugged it into the Pi unit, and then powered it all up. According to Microsoft, I would have the option to install Windows IoT once I booted the device via NOOBS. Imagine my surprise when I boosted the system and I found I was in Raspian! So it looks like NOOBS was *NOT* on the SD card! Annoying…

I downloaded NOOBS from the Raspberry Pi website and reformatted the SD card and decided to try again. This time the NOOBS system came up asking which system to install. I selected Windows IoT, and a browser eventually opened up asking me to login with a Microsoft account. It turns out I could not proceed since my outlook.com user account was not in the Windows Insider program. I returned to my desktop computer and registered my outlook.com account in the program–luckily it is free, unlike MSDN! I was now greeted as an Insider by Microsoft Insider’s website.

Unfortunately things got worse:

  • I returned to NOOBS, tried to login on the Pi, but Microsoft informed me I was not an Insider
  • I confirmed on my desktop that my outlook.com account is indeed part of the Insider program
  • A few more times and I gave up for the night, tired of the circular process and run-around
  • 24 hours later, on the Pi, Microsoft was still telling me I was not an Insider…yet in my Outlook.com inbox I had a welcome message to the program…
  • On my desktop, I managed to get through, and downloaded the Windows IoT ISO image; I got busy so that was it for the day…annoying
  • 48 hours later, on the Pi, Microsoft was still telling me I was not an Insider

I gave up and decided to just do a manual install. Luckily that was not so bad: download the ISO, install it on your Desktop (which extracts a disk image), and install the Windows IoT Core tool and manually flash the image to the SD card.

After that things went smoothly, the Raspberry Pi booted in Windows and grabbed an IP address off of my network switch (as it should) via DHCP with no hitches. I was even able to SSH into the device via my Linux computer. It was a pain in the ass to get this far, but it all looks interesting and I am willing to let bygones be bygones. Hopefully the hard part is over, and it will be a breeze with Visual Studio and loading software onto the Raspberry Pi.

I have to say Microsoft has a lot of work ahead of it. Instead of wasting everyone’s time with their stupid developer’s program accounts and registrations, it would be great if they just put the ISO out there for their target platforms and require tools–we want to get to work, not wait 24 hours for account registrations to be propagated within Microsoft. Also:

  1. Don’t market and sell Raspberry Pi 3’s without clearly stating you don’t yet support it!
  2. Fix the stupid Windows Insider program mess…it was ridiculous…and there was no email to send a help request to either…the guidance was to ask the community for help!
  3. Go for more spartan websites, it is tiring clicking through all of the links

More to come on Windows IoT soon I hope…from the C++ application side and Windows driver side of course!