The Internet of Things (IoT) is being used to build real-world solutions today. As Figure 1 shows, in the last several years interest in IoT has taken off. People doing IoT range from hobbyists to professional developers, and in many cases, they are using the same tools regardless of their level of interest. In this article, I present some of the things Microsoft has been doing to help you in building IoT solutions.
Figure 1: IoT Growth
Microsoft provides tools and solutions across the breadth of IoT. This includes Windows IoT Core to run on an IoT client, tools such as Visual Studio for developing solutions, and a variety of Cloud services for supporting and building the server side of IoT.
On the Client Side: Windows IoT Core
Microsoft has created Windows IoT Core, which is an operating system that will run on IoT devices. This is a pared-down version of the same Windows 10 that is run on desktops, phones, and other devices. This pared-down version is capable of running on some of the tiny IoT devices with as little as 2GB of storage. More specifically, however, to run Windows IoT Core, you will need 256MB of memory with half of this available for the operating system. You then need an addition 2GB of storage, either on the device or on an SD card within the device. Common devices for development of IoT solutions include the Raspberry Pi, DigiBoard, and the Arduino.
Windows 10 IoT Core is only one client-side operating system choice for IoT solutions. Linux and other operating systems also could be used, even if you plan to use Microsoft tools and server-side services for the rest of your IoT solution. One of the reasons people choose Windows 10 IoT is that Windows 10 scales to a huge variety of platforms, including the desktop and mobile devices as well as platforms such as the Xbox and Hololens.
By using Windows 10 IoT Core, you'll be able to tap into the security that is built into the operating system. This includes remote authentication, information protection with device encryption, and secure key storage. You also have access to Trusted Platform Modules (TPMs) for securing identities.
Developing for IoT
Developing for IoT is a bit more complex, especially when you add deployment to the mix. There are several things that you will need to consider when deploying to a device; this starts with making sure you can get the deployed app to run as well as making sure the app works when the device is rebooted.
One of the keys, when using Microsoft tools for targeting IoT, is to be aware of what namespaces are available in Windows IoT. It is likely that you will need to add references to other classes, such as the Windows IoT Extensions for the UWP. By including the IoT extensions, you'll also be able to use Visual Studio in the same way you do for other apps. This includes having Visual Studio download, install, and configure an IoT app on a Windows 10 IoT device, just as it can download and install a mobile app on a phone. The extensions will let you use the same skill set and processes currently used for other types of applications. This will include the ability to do remote debugging.
Figure 2: IoT App icons
The Server-side and Services-side of IoT
The Internet is a part of IoT not only in name but also in execution! As such, there is a server-side aspect to building a complete IoT solution. This server-side component is generally accessed via the Internet.
IoT devices might be simplistic sensors or complex computational IoT devices. To be secure, when you use these IoT devices and have them connect with the Internet, you need to make sure you are using a Cloud service that can identify them. You need to know what devices are connecting to your service, and then you need to make sure that the connection that is made is secure.
One of the services provided by Microsoft is the Azure IoT Hub. This service provides a way to communicate with and identify IoT devices. It can establish bi-directional communications that is secure, and it can do this for millions of intermittently connected devices. The IoT Hub will provide an identifier—a GUID—to help identify devices. Additionally, once a connection to the hub has been established, the hub can accept messages from the IoT device as well as return messages back.
Another service provided by Microsoft is https://www.azureiotsolutions.com/Accelerators, the Azure IoT Suite. The IoT Suite provides a set of accelerators for building several types of solutions, including remote monitoring, connected factory, predictive maintenance, and device simulations. You can use these accelerators as starting points for building your own solutions.
Because of the evolution of IoT, Microsoft has added another service, called Azure IoT Edge. This service will deploy Azure services, custom logic, and artificial intelligence to IoT devices. This allows the workload to be shared and can increase the scalability of an IoT solution. This also can reduce costs by pushing part of the workload of overall IoT solutions on local devices rather than pushing the work all to the Cloud. The IoT Edge services also help to improve operations in those scenarios where connectivity might be intermittent or offline at times.
Microsoft also provides Azure IoT Central, which is a managed service for connecting, managing, and monitoring IoT solutions. This is a software as a solution (SaaS) aimed at simplifying the creation of IoT solutions for those with little to no Cloud experience.
Using the services provided within Azure along with Visual Studio, developers have everything they need to start targeting IoT devices with custom solutions. Although this article didn't dig into coding a solution, hopefully you saw that the gap for those already developing with Microsoft technology is extremely small when it comes to what you need to do to begin your own IoT projects.