The Internet of Things (IoT) is spread across various layers, with different types of software being used across these. This article presents a list of open source software packages that can be used in each of the layers.
You might have read Gartner and many other business forecasts on connected devices and the Internet of Things (IoT) growth in the coming years. Billions of connected devices around us, as well as open hardware and software solutions, would play a key role in enabling a smarter life in the near future. Before proceeding to the list of open source software in this field, let us take a look at a few layers of the IoT architecture.
Layer 1 consists of end devices talking to the environment, which are also known as sensor nodes, typically powered by microcontroller based targets, wearables and, sometimes, Linux boards.
Layer 2 consists of gateway devices, typically Linux-powered target boards or handheld gadgets, for interfacing end devices with Cloud platforms and bridging protocols with their middleware support. High-end microcontrollers with suitable frameworks can also be a choice here.
Layer 3 consists of servers, typically deployed on Cloud platforms. These provide services like authentication, data collection, data processing, analysis, storage, visualisation, Web integration, mobile app connectivity and more. This may be further divided into various sub-layers or components.
Let us examine some open source choices for development in each layer.
GNU ARM embedded toolchain provides pre-built toolchains as well as source codes for Cortex-M and Cortex-R processors, especially for bare metal code for microcontrollers. It has consistent releases in every quarter. The latest stable release is 2017 Q1, which ships with gcc v6.3.1 and is migrated to 64-bit Linux hosts, whereas the previous release of 2016 Q3 ships with gcc 5.4 and is available for 32-bit Linux.
The GNU ARM Eclipse project provides Eclipse CDT extensions and support for popular targets like STM32 F series boards, and FRDM Kinetis KL series boards with C/C++ templates, using this toolchain as the backend. Most of these elements are licensed under GPL.
URL: developer.arm.com/open-source/gnu-toolchain/gnu-rm, gnuarmeclipse.github.io
This is specifically designed for IoT needs with common C++ APIs for Cortex-M architecture from various families, and is licensed under Apache 2.0. It comes with an online IDE as well as offline components for development with support for various toolchains, IDEs (like Keil uVision, Eclipse, ARM GCC and IAR) and rich libraries. It accelerates IoT development with good connectivity solutions for Ethernet, Wi-Fi, Bluetooth LE, Thread, 6LowPAN, LoRaWAN, Cellular, NFC and so on.
This Linux Foundation Project is aimed at being a small, scalable, real-time operating system (OS) for connected and resource-constrained devices, licensed under Apache 2.0. The recent release of version 1.7.0 comes with a unified kernel, discarding the dual kernel (micro, nano) approach from previous releases. It can be a perfect choice for developers who are fond of Linux with its programming model for drivers, device interfaces and highly-configurable services, all in a single address space.
This next-generation IDE, with an ecosystem for IoT development, is based on the popular Atom editor with a cross-platform build system and library manager, licensed under Apache 2.0. It wraps popular frameworks like CMSIS, Arduino, mbed, Energia, ST Standard Peripheral Library and WiringPi, and supports native applications on Linux and Windows.
Arduino IDE, forks and add-ons.
This open source physical computing platform has a simple IDE and coding style. Its power is rapidly getting enhanced by available add-ons for other families of boards, like ESP8266, ESP32 and NRF5x series.
TI Enregia, a fork of Arduino, is available for popular TI launchpads like CC3200, MSP series and Tiva series, with rich support for board peripherals and IoT connectivity. Most of these elements are licensed under GPL 2.
URL: arduino.cc, energia.nu
This is a visual tool for wiring hardware peripherals and online services, licensed under Apache 2.0. It has a rich collection of nodes for sensor interfacing, local connectivity (serial, Wi-Fi, Bluetooth, etc), Cloud connectivity (HTTP, mqtt, etc) and social media services. It can run on any OS with Node.js runtime or in a Docker container.
The latest Raspbian for Raspberry Pi and Debian for BeagleBone Black ships with NodeRED, by default. It is also available from Cloud-hosted instances like IBM Bluemix and Sensetecnic FRED. It can even communicate to Arduino-like targets using Firmata protocol. Custom nodes can be built with ease using Node.js backend and HTML frontend. It is a perfect choice for kickstarting IoT prototyping with zero or little programming effort.
URL: nodered.org, flows.nodered.org