Few days ago Microsoft was included in the ranking of the 10 most innovative companies of 2015 as part of the Internet of Things and this result can not be absolutely considered a case. Most likely, the main reasons that have enabled Microsoft to achieve this great result are two :

  • The announcement of an operating system like Windows 10 that is able to run on any kind of device, from embedded systems, smartphones, tablets, gaming consoles and finally to the PC;
  • The wide Microsoft Azure cloud services offer through which you can "accommodate" and analyze in real time the huge amount of data from the "things";

The Microsoft offer for the Internet of Things covers everything from embedded device (the "T") to the Cloud (the "I") failing to provide a solution under one "hat".

 

What are the available technologies ? How can we really "bring" our "things" in the Cloud and make them an integral part of the Internet of "Your" Things as it was renamed by Microsoft ?

 

The "things" ...

 

Today we are all waiting to see Windows 10 running on the Raspberry Pi 2 as it was announced a few weeks ago. We all know that the new operating system will be able to cover numerous embedded devices thanks to partnerships that Microsoft has with the major silicon manufacturers (Intel, Qualcomm, ...).

 

Taking a look at the present ... the immediate future ... what are the current solutions ?

 

IoT Device Taxonomy

 

The "things" that are integral part of the IoT have different dimensions, features and functionalities based on which you can choose what type of operating system or platform to use for their development: from the sensors and actuators up to the ATM and POS, through IoT gateways, the wereables and industrial devices.

 

Windows Embedded Compact 2013

 

The only "real-time" operating system from the Microsoft family and therefore suitable for all applications that require a deterministic response time and almost immediately from the system. His "componentized" nature makes it highly customizable, allowing you to include or exclude specific functionalities and/or driver according to the application that we have to develop and the hardware that we have available, both in terms of processor (ARM or x86 Supported) that of peripherals. Visual Studio 2013 is the tool used for the "building" of the operating system image and application development in native code (C/C++) or managed code (C#/VB.NET) with the support of. .Net Compact Framework 3.9. More information here.

 

Windows Embedded 8.1

 

In this case we are speaking about a whole operating systems family with Industry, Pro and Standard (freeze to version 8) version, which are direct "children" of Windows 8.1 that we use daily on our PC. Also in this case, we have the possibility to customize the system (not at the levels of WEC2013) especially in tying the end user in the available actions, and avoid the typical error screens that in an embedded system doesn’t give any information (to people who use it). To these must added the Handheld version, based on Windows Phone 8.1, for application development LOB (Line of Business). Again, developers can use Visual Studio 2013 and the native languages (C++) or managed (C#/VB.NET) with the full support of WinRT. More information here.

 

.Net Micro Framework

 

This isn’t an operating system but a "light" version of the CLR (Common Language Runtime), the heart of the .Net Framework (in fact we talk about TinyCLR). It isn’t greedy of resources and can be used in those systems equipped with an embedded microcontroller (no MMU) and a few KB of RAM and flash memory. The possibility of using managed code (C#/VB.NET) makes it very useful for prototyping or in all those cases in which the "time to market" is critical. It must be realized that it is not "real time" and is not equipped with a JIT (Just in Time) compiler and all code is interpreted at runtime. Obviously, Visual Studio 2013 IDE is still the reference for developing on this platform. Another good point is its "open source" nature and the availability of all the source code on GitHub. More information here.

 

… and the “Cloud”

 

The main interest of Microsoft as part of the Internet of Things is in the services offered through the Cloud, to which you can connect devices of all types, even if equipped with real-time operating systems (RTOS) or Linux (remember "Microsoft loves Linux") and therefore not using any Microsoft technology including the ones above (eg. Arduino, Tessel, Spark.IO, ...).

 

In this context, before new announcements at Build 2015 abot the future "IoT Suite", what gives us the azure cloud ?

 

Azure IoT

 

Event Hubs

 

One of the biggest IoT problems is the acquisition of huge amounts of data that are produced by the devices. It’s not easy to manage millions of messages per second from billions of devices so they are also processed in real time. The Microsoft solution to this problem is represented by the Event Hubs one of the "ingestion" services of the Azure Service Bus in addition to "queues" and "topics/subscriptions". It provides a highly scalable solution that can accommodate a few messages per minute (eg. connected cars, thermostats, ..) up to millions of messages per second. Usage of this service is possible through the Azure SDK in the case of Windows-based systems but primarily through standard protocols such as HTTP and AMQP (eg. using the Apache Qpid project). Currently, SDKs for other languages (Java, Python, NodeJS and so on) aavailable on Linux do not support Event Hubs but only "queues" and "topics/subscriptions".

 

Stream Analytics

 

Stream Analytics is an engine capable of processing the events received by the input in real time so as to obtain the maximum information content. It has native integration with the Event Hubs and can be easily configured to capture events through it. Data processing is performed by a "SQL-like" language and their management is possible through the Azure Management Portal. In addition to data acquisition, it also allows to produce outgoing messages (can be transmitted for example to the Event Hubs) that may be useful, for example, for the management of alarms on the basis of the data processed.

 

Machine Learning

 

The main advantage that can be gained from the data acquired and processed is the "prediction" of future events. The predictive analysis aims the application of suitable models on the data acquired to be able to derive an information content with which to predict the evolution of the data or specific future events. Microsoft provides the Machine Learning service that allows anyone to become a "data scientists" simply due to the numerous algorithms and predictive analysis models ready for use. In addition, you can develop custom code using the R language (for statistical analysis) or even Python.

 

HDInsight

 

Perhaps not everyone knows Apache Hadoop. It is an open source project that allows distributed computing but especially the processing of large amounts of data in a reliable and scalable way. Through HDInsight, Microsoft provides a distribution of Hadoop in the cloud. One of the major advantages compared to a solution "on-premise" is certainly the possibility of not having to know about hardware and extensibility through major languages, including C# and Java.

 

Connect the dots …

 

One way to "touch" with hand a fraction of these technologies, is to become familiar with the ConnectTheDots project from Microsoft Open Technologies. Some of the major hardware platforms such as Arduino, Intel Galileo, Raspberry Pi and .Net Gadgeteer (FEZ Spider of GHI Electronics) are used for the data transmission (eg. temperature, humidity, ...) to Event Hubs, displayed by a web application and processed through Azure Stream Analytics.

 

The future is the number 10 !

 

As for the "things", the future is called Windows 10 : a single operating system completely "cross platform" and able to run on embedded system for IoT (unless of microcontroller systems), on smartphones, tablets , PC and gaming consoles. It is equipped with a common "core" and provides the possibility of development of the Universal Apps that can run on all supported platforms without any changes from one to another. As for the "Cloud", Microsoft has just announced the launch of "Azure IoT Suite" which will offer everything we need to build a complete and highly customizable IoT solution. There are no information about it and we have to wait for Build 2015.