A Brief History in IoTime
A brief look at the development of IoT from the content of of a a bolted on Microsoft (Embedded) Developer.
I hope Stephen Hawking can excuse my pun, from up there, or from whatever multiverse or blackhole he is in.
Several years ago I developed an Azure hosted IoT solution for a local Azure Dev Days presentation. The solution used an Arduino device for collecting environmental data which it sent over REST to an Azure Mobile Services (now replaced by Azure App Services). AMS was useful because it did not require https (not possible from an Arduino device) and that the table structure in AMS is adhoc; its table fields were created on the fly as data is submitted. I wrote a json parser from the ground up including two Codeplex projects ardjson repository and CEJSON repository. I also also blogged extensively on them ardjson on embedded101.com and CEJSON on embedded101.com
Going back even further, in 2005, a team of my final year students at RMIT University won the Microsoft World Windows Embedded Student ChallengE in Seattle ( a forerunner to Image Cup) with their EverGreen project - Their report is here.. The hardware was a Windows CE box ran an algorithm that could control the watering to plants based upon soil type, plant type, weather history and weather predictions. It connected to the internet to get the required data, upload locally collected data and to be remotely controlled.
Originally IoT devices were envisaged as being quite simple with a focus upon hosting sensors and actuators with minimal data processing. They even might not have internet connectivity and so needed a gateway to stream data to and from the cloud. The cloud took care of rudimentary data storage, processing for high level analysis and for determining actions to be sent back to the actuators; for example, alarm upon conditions being determined. We saw the advent of some simple IO devices, such as the Particle Photon, with internet connectivity that could support IoT.
Things have moved on significantly since the early days of IoT with Microsoft seeing it as an important cog in the Azure data platform. Microsoft’s activities have headed in a number of directions. Some leading to fruition, some not. Some all-encompassing, others low level. Early in in this walk, Windows CE (Windows Embedded Compact) was reaching its sunset. Many of us would have liked to see Microsoft IoT embrace CE but that was not to be. Whilst there were some third-party attempts at a reconciliation, it was ultimately left on the shelf. Its proponents preached its real-time capabilities, but were told the new OS from Microsoft was fast enough for that not to be a issue.
Windows 10 Iot_Core was initially envisaged as a stripped-down version of Windows able to do GPIO and also interact with the internet. This is supported on Intel x86/x64 and ARM32 (eg Raspberry Pi) platforms. There is now a public preview NXP ARM64 version now available as well. Its focus was upon interacting with Azure, for which Azure IoT Hub was developed as a portal. This portal is then able to seamless interact with a number of Azure services such as:
- Event Hub
- Az Machine Learning
- Stream Analytics
- Function Apps
- Logic Apps
- Power BI
IoT Hub SDKs For a device to interact with the Az IoT as standalone device, Hub there is are IoT Hub SDKs on GitHub for various languages. There is a list of the OS platforms the various SDKs have been tested against in the Azure Certified for IoT device catalog. Other third party platforms may separately support the SDKs. Various transport conduits between IoT devices and the Hub are available:
Note that the Hub .Net SDK uses .Net Core, that is it builds on the development machine using it. .Net Core is not available per se on IoT-Core but can it can be deployed to it from such builds.
IoT Edge Slowly but surely more intelligence is being placed out on the edge. An Az Edge device will communicate upstream with Az IoT Hub or a higher level Edge device. It will collect a communicate data from sensors etc that it hosts and/or communicate downstream with other edge devices of IoT endpoints. There was an earlier SDK for IoT Edge, Azure/iot-edge-v1 . This is now for non-container scenarios, which is required for some non-container hosting platforms (eg Iot-Core x86 and ARM32). The second version of the Edge SDK can be found here: Azure/azure-iotedge. This uses containers to host apps. It is supported on Linux, x64 Windows including x64 IoT-Core. It does run on a RPI running Raspian, but not with IoT-Core. IoT-Core uses the Moby implementation of Containers. There is now are a couple of simple Quickstarts using VMs for Az Edge of Microsoft Docs. I got Az Edge to run on the RPI and IoT-Core x64 (MinnowBoardMax). I’ll document these on this blog site soon.
Device Management is another big issue with IoT. You may a large number of devices out in the field in various locations. The devices may be homogenous or varied. Devices may always be connected or only occassionally. As previously suggested, they might not be directly connected to the internet. Such devices require automated remote management for such things as deployment and updates. Give Az Edge movement into Containers, this can be simplified as the one container image may run on a number of disparate devices. Microsoft has the Azure IoT Device Agent for Windows. A Linux version is in the wind.
Security I once stated that IoT Security is an OxyMoron. Things were so wide open for exploitation. TPM (Trusted Platform Model) is part of the Iot-Core Azure landscape. It provides an unfakeable identity in hardware for IoT devices that Azure IoT Hub can enforce. It is available in the SOC of some processors or as an additional chip that can be added to the IOT devices circuitry. The Raspberry Pi doesn’t have it, but IOT-Core supports a software simulation that at least can help with development, if not deployment. The Dragonboard 410C has it as does the NXP i.MX. Microsoft has developed the Azure Sphere from the ground up to support TPM.
IoT as a Software as a Service To this end Microsoft has developed a number of high level packages that allow you to roll out a running IoT system. All of the components are generated for you. There was an initial foray in this area called Intelligent Systems Service but that was killed before it became fully public. See the NZ Tech Ed 2014 post. (There was an earlier Saas..checking it out). There is now Azure IoT Central. “Azure IoT Central is a fully managed SaaS (software-as-a-service) solution that makes it easy to connect, monitor and manage your IoT assets at scale. Azure IoT Central simplifies the initial setup of your IoT solution and reduces the management burden, operational costs, and overhead of a typical IoT project. Learn how to create, customize, manage, and use an Azure IoT Central application with our quickstarts and tutorials.”
Az IoT Central is for off the shelf stock standard IoT solutions. For more customisable complex scenarios, there is also the Azure IoT solution accelerators. “A cloud-based IoT solution typically uses custom code and cloud services to manage device connectivity, data processing and analytics, and presentation. The IoT solution accelerators are complete, ready-to-deploy IoT solutions that implement common IoT scenarios. The scenarios include remote monitoring, connected factory, predictive maintenance, and device simulation. When you deploy a solution accelerator, the deployment includes all the required cloud-based services along with any required application code.”
Microsoft’s current overview of Azure IoT can be seen here
|Next: >||UWP Sockets Library|
|< Prev:||Azure Sphere Samples|
|This Category:||Az IoT Hub + Edge|
|Next: >||And now for something completely different|
|< Prev:||Azure Sphere Samples|