At Logikos, we have two sides of the house. Developers on one side focus primarily on web and desktop applications. Those on the other side work with embedded systems. The lines are somewhat blurred. The “information system” developers often write software that interfaces with devices, and the “embedded system” folks create desktop consoles and test apparatus for hardware. The grass is always greener on the other side of the fence; As an information system engineer, I want to work more with cool electronics and flashing LEDs but am reluctant to give up the excellent tools and frameworks that I’m accustomed to.
Yes, those “cool electronics” can be treated like black boxes. My C# code can get to most devices through .NET or C libraries provided by the hardware manufacturers. Also, there’s no shortage of add-in cards and USB devices that allow a PC to access low-level stuff through General Purpose IO ( GPIO), Inter-Integrated Circuit (I2C), Serial Peripheral Interface (SPI) and Pulse-width modulation (PWM). These, and custom embedded solutions will continue to be used for the most demanding applications, but is this my only choice? I want the following:
- Low-cost deployment.
- Great development tools.
- Excellent software frameworks and libraries.
- The ability to work with GPIO, I2C, SPI and PWM devices.
- Access to USB, the network and the cloud if I need it.
Enter the Windows 10 IoT operating system. It builds on the .NET Micro Framework from the days of old and Windows CE/Embedded/Mobile/RT/Phone.
Check. The OS will be free for devices with screens less than 7 inches. Windows 10 IoT is available now on Raspberry Pi 2 ($42) and MinnowBoard Max ($99). Support for the Dragonboard 410c ($90) has been announced. These platforms deliver serious computing capability in small packages. For example, the Raspberry Pi 2 specs are:
Great development tools?
Check. Visual Studio 2015 community (free) and for-purchase versions have all you need. I suppose it’s possible to use Visual Studio Code and command line tools if you like, but I haven’t looked into that. Visual Studio 2015 gives you IntelliSense, remote debugging and the other features you’ve come to expect from a great IDE.
Excellent frameworks and libraries?
Check. The full capabilities of the Universal Device Family are accessible, as well as plenty of goodies from the IoT device family. The full list of what’s available to the IoT programmer is out of scope for this article but the following inclusions should pique your interest in the platform:
- Fully asynchronous access to devices, GPIO, etc.
- XAML apps. Powerful controls and graphics effects.
- Web service and Azure connectivity. Your scattered devices can phone home.
- Microsoft Store deployment.
GPIO, I2, C, SPI and PWM?
|Check. The devices that support Windows 10 IoT today all have these capabilities build in. Windows has drivers and .NET support for using each of these interfaces. Imagine using C#’s “async” keyword programming and events to access low-level hardware! Check out this example to see how a simple I2C device can be controlled. Real-world applications would certainly be more complex; having access to modern libraries and advanced programming techniques like closures and asynchrony can only help.|
|Check. USB Support is built into Windows 10 IoT and all of the boards released so far have at least one USB port for peripherals. The Raspberry Pi has four USB 2.0 ports. IoT shares its driver model with all other versions of Windows 10 via the Universal Windows Driver, so compatibility will improve over time. WDM and KMDF drivers that work with Windows 8.1 recompile as Universal Windows drivers targeting Windows 10 with no conversion required. HID devices, GPS, WiFi adapters, Z-Wave dongles and most other devices should be accessible.|
Network and Cloud Access?
|Check. Networking is built into Windows 10 IoT. The Raspberry Pi and MinnowBoard have RJ45 Ethernet connectors right on the board. Wi-Fi is provided by a USB device on the Pi and the MinnowBoard Max; Wi-Fi is built in on and DragonBoard 410c. The .NET framework on the platform supports sockets, HTTP, etc. Add in Microsoft’s support for cloud connectivity with Azure IoT Services, and you have a powerful tool for the connected world of devices.|
- Windows.Networking.BackgroundTransfer namespace
- Windows.Security.Authentication namespace
- MobileBroadbandModem class
- Windows.Networking.PushNotifications namespace. PushNotificationChannel class, etc.
- Windows.Networking.Sockets namespace. DatagramSocket, IWebSocket, StreamSocket , etc.
- Windows.Networking.Vpn namespace. VpnChannel , etc.
- Windows.Networking.Cryptography.Certificates. Certificate and others.
The lower price point, hassle-free licensing, cloud connectivity and ability to use a pervasive, well-supported platform (.NET Core) make Windows 10 IoT an excellent choice for all sorts of devices: kiosks, smart medical devices, consumer electronics, et cetera.