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.
Layer 1
Toolchains.
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
mbed OS.
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.
URL: developer.mbed.org
Zephyr OS.
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.
URL: www.zephyrproject.org
Platform.io.
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.
URL: platformio.org
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
Layer 2
NodeRED.
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
Eclipse Kura.
This is an OSGi based container providing various gateway services addressing M2M and IoT needs, licensed under Eclipse public licence 1.0. Kura components are highly configurable through a Web console, which can be done dynamically. Kura supports good connectivity like CANbus, Serial Bus, Bluetooth LE, Cloud services via MQTT, etc, and even for hardware access using OpenJDK Device I/O library. It aims at reducing the barrier between enterprise and embedded systems with a rich set of Java APIs.
URL: eclipse.org/kura/
Macchina.io.
This is a toolkit for building embedded applications for IoT on top of POCO C++ libraries and V8 JavaScript engine, licensed under Apache 2.0. The core is implemented in C++ for maximum efficiency and JavaScript is used for application development with its ease of programming. The foundation for macchina.io is Open Service Platform (OSP), which enables dynamically extensible, modular applications based on the powerful plug-in and services model similar to OSGi in Java.
URL: macchina.io
Eclipse SmartHome and OpenHAB.
Eclipse SmartHome is an OSGi based framework for smart home solutions. It provides a rich set of OSGi bundles for various services and a high degree of modularity.
OpenHAB is a usable product design based on SmartHome framework. It is vendor neutral and hardware/technology agnostic with automation software for rapid development of smart home solutions. Both are licensed under Eclipse public licence 1.0.
URL: eclipse.org/smarthome, openhab.org
Iotivity.
This Linux Foundation project is initiated by Open Connectivity Foundation (OCF), formerly known as Open Interconenct Consortium (OIC), which comprises a group of companies including Samsung and Intel. OCF aims at seamless device connectivity and standardisation of communications for billions of devices.
A reference implementation of this standard is released with features like powerful device management, resource management, services and security, as well as communication based on CoAP, and has been released under Apache 2.0 licence. This project also provides a few modules for building cloud services for interconnecting Iotivity clients.
URL: iotivity.org
Contiki OS and RIOT OS.
These operating systems are designed for devices with constrained network and memory resources. These come with full IPv4- and IPv6-capable stacks and support low-power wireless standards such as 6LowPAN and RPL, and protocol connectivity like CoAP. Contiki is licensed under BSD 3-Clause and RIOT under GPL 2.1.
Cooja simulator provided by Contiki allows testing of application developments for large wireless networks with emulation of various hardware targets.
RIOT is a user-friendly OS similar to Contiki and comes with additional offerings like a minimal footprint, C++ APIs, threading and real-time capabilities with minimal low overheads.
URL: contiki-os.org, riot-os.org
Note.
Even though some level of classification is done based on design goals and primary usage, certain elements are used across layers. For example, Contiki and RIOT can also be used in Layer1, and mbed.org and Zephyr OS can be used in Layer 2, and so on.
Layer 3
Kaa IoT.
Kaa is a multipurpose middleware platform for connected things and enabling end-to-end IoT solutions. It can be deployed on Amazon Web Services or your own server. A rich set of SDKs can be generated from a Kaa server with APIs in different languages for seamless device connectivity. It can integrate with many databases, data processing elements like Mongodb, Apache Spark and Cassandra with support for structured and unstructured data and messaging frameworks like Apache Kafka. It enables highly-available servers with clustering support, thus reducing downtime and precluding single points of failure using Zookeeper support.
URL: kaaproject.org
SiteWhere.
This is an open platform for the IoT with good protocol support and powerful device and asset management services, and is licensed under common public attribution licence 1.0 (CPAL-1.0). It is designed as a multi-tenant system to host multiple applications in a single instance of deployment. Popular open source solutions like Apache Spark, OpenHAB and InfluDb/Grafana can be integrated by SiteWhere. It can be deployed on public Clouds such as Azure and Amazon EC2, service providers based on Ubuntu Juju and Docker, or your own server.
URL: sitewhere.org
InfluxData TICK stack.
InfluxData provides TICK stack with four powerful components for time series data management. It is written in Go language and licensed under MIT terms. The components are:
1. Telegraf, used for data collection and publishing metrics with a rich set of input, output and service plugins.
2. InfluxDb, a time series data-base with high availability and high performance without any external dependencies (unlike other open source time series models like OpenTSDB based on Hbase or KairosDB based on Cassandra). It has good support for down-sampling high-precision data and data-retention policies.
3. Chronograf, a visualisation tool for exploring data.
4. Kapacitor, which is used for data processing with alert management and ETL jobs.
URL: influxdata.com
Mosquitto.
This is an Eclipse IoT project implementing MQTT broker with version 3.1.1 and 3.1 support for backward compatibility. It is licensed under Eclipse public licence 1.0 and EDL 1.0. It also provides client libraries and powerful reference clients. Popular Cloud services like CloudMQTT are built on top of Mosquitto.
URL: mosquitto.org
CloudFoundry.
This open source PaaS platform is a Linux Foundation collaborative project, and has been released under Apache 2.0 licence. It is available as a service from a few commercial providers like Bluemix or as an open source product to be deployed on one’s own servers. It supports the full life cycle of application development in various languages for IoT needs, and comes with good service support like data storage, messaging, application development and APIs for mobile apps.
URL: cloudfoundry.org
Connectivity
Paho.
This is an Eclipse IoT project offering MQTT clients, licensed under EPL 1.0 and EDL 1.0. It offers synchronous and asynchronous API modes in various languages like C, C++, Java, Python, Go, JavaScript and .Net (C#). It also provides Android service for building mobile apps and reference apps, which can be customised according to an application’s needs.
URL: eclipse.org/paho
Eclipse Californium.
This is divided into a few sub-projects. The core comes with Java API model for CoAP client and server design, and a few reference apps. It can be built as a Maven project and can be embedded in other Java applications. The Scandium sub-project implements DTLS 1.2 for secure CoAP. It also provides a proxy library and reference app for CoAP-HTTP bridging. These are dual licensed under EPL 1.0 and EDL 1.0.
URL: eclipse.org/californium
Bluez and bindings.
This is an official Linux Bluetooth protocol stack that comes with a user space library and tools. It supports various classical protocols like L2CAP, RFCOMM and SDP, as well as LE protocols and profiles like GATT and GAP. It has Python bindings via PyBluez and Node.js packages. Bleno and noble via npm are available for BLE advertising in peripheral mode and discovery in central mode. These node packages are built on top of Bluez.
URL: bluez.org, karulis.github.io/pybluez/, github.com/sandeepmistry
CETIC 6LBR and Linux WPAN.
6LowPAN/RPL Border Router (6LBR) can interconnect end devices running on 6LowPAN with the Internet by bridging 802.15.4 network with IPv6 on the gateway side. It supports various 15.4-capable targets like OpenMote, TI CC25xx/26xx platforms and Linux hosts like Raspberry Pi, and can run in Bridge or Router modes. It is based on Contiki project and licensed under similar terms.
Linux WPAN enables 802.15.4 stack at the kernel level and user space tools for 6LowPAN based development on Linux.
URL: http://cetic.github.io/6lbr/, github.com/linux-wpan
Wireshark filters. Wireshark, a well-known network protocol analyser and packet generator, is licensed under GNU GPL. It has rich filter supports for Internet protocols like MQTT, CoAP, HTTP and Websockets. It can also analyse Bluetooth (classic, LE) packets and IEEE 802.15.4 traffic.
This is a reprint of the article published in February issue of Open Source For You magazine.