If your business wants to benefit from the advantages of IoT solutions, you need to start with the right technology. In this article, our C++ expert Dmitry Petrachkov explains the Internet of Things concept and the nuances of embedded software development.
The IoT is becoming the norm
First things first, what is the Internet of Things? IoT is a network of physical things that are technologically enabled to interact with each other or their environment, without the need for human involvement. IoT allows managing physical objects as well as enables them to interact with each other and with their hosts, i.e., people.
There are four categories for the Internet of Things:
Smart Things. These are already widely used and include products like fitness bracelets, vacuum cleaners, and alarm clocks capable of adjusting to individual sleep patterns. Smart things take all shapes and sizes and aim to make your daily life easier.
Smart Services. These are services that are part of a bigger system like a smart home.
Smart homes often include sensors for household purposes like tracking energy, light usage, climate control, and even managing security. Smart services are not as common as smart things, yet are rapidly increasing in popularity.
Smart Cities. This level of IoT is only in its early stages but is very promising. A simple example of IoT as a city service would be smart parking. This service would automatically show users where they could find free parking spaces in the neighborhood.
Smart Planet. Smart Planet is more a vision for the future than a practical application at the moment. Before humans can start creating a Smart Planet, they need to first master the previous three categories. It’s potential is exciting, and could theoretically manage different aspects of human life, like security, logistics, and healthcare.
In many cases, the Internet of Things is no longer the future but a reality of our day to day life. Smart Things and Smart Services are becoming the norm, and we’re confident that the advances in IoT will soon lead to Smart Cities, and one day, even a Smart Planet.
The technological nuances in IoT projects
IoT projects can bring many benefits to your business. But, choosing a suitable programming language for an IoT device can be tricky. Here are a few reasons why:
The end product needs to be cheap. IoT needs to be at an accessible price point for end-users. This requires companies to analyze every component of the product carefully. Adding as little as $0.01 to certain components can lead to million-dollar losses on a commercial level. To keep costs low and simplify the processes, IoT devices are usually built with microcontrollers, instead of complex processors.
Programming technologies need to be compatible with microcontrollers. Microcontroller app development is done at a low level, where you have to work with the absence of file systems while handling registers and RAW memory. Add to that, most popular programming languages are not suitable for these goals. Java, Python, JS, and C# are languages for developing apps that are managed by an operating system (high-level development). Embedded development and simple microcontrollers don’t have operating systems, and as a result, you have a very limited choice for your technology stack.
How can development teams overcome the challenges of low-level development?
C++ is one of the few programming languages that are able to address the need to keep costs low and provide a compatible language. It’s flexible and is supported by the majority of compilators, including special use cases. Most importantly, it is one of the few languages that is able to work both with low-level development and abstractions like classes.
C++ is indeed suitable for a variety of IoT projects. A great example of this is an IoT project that Coherent Solutions developed. The goal of the project was to develop a remote control system for rental vehicles called a Vehicle Asset Communicator.
Coherent’s team developed part of the firmware for a device that allowed connecting any vehicle to the customer’s cloud service in a secure way. That device was installed into a vehicle and allowed the user to check its condition, speed, and gas level, among other features.
The project was intended to simplify rental procedures. For example, someone could rent a car just by getting close to it and pushing a button in the app. No bureaucracy and no paperwork.
The project required addressing four main technological requirements, for which C++ served our purposes well. The four requirements included:
Using a special device based on an STM32 microcontroller. For that purpose, we used Keil, an integrated C++ software environment. We also used an EvalBoard (Evaluation Board), which is a special board with in-circuit debugging and programming capabilities for the microcontroller.
Using a light real-time operating system for embedded devices (RTOS). That system serves real-time applications that process data as it comes in, typically, without buffer delays.
Supporting the secure transfer of data (SSL, TLS, DTLS, AES) by means of the WolfSSL library. This SSL library allowed us to use encryption, which is one of the biggest problems when working with the Internet of Things. Small, low-level, devices can be hacked; therefore, it is crucial to implement strong security processes.
Enabling device communication with a cloud service. That was possible with COAP and TCP. TCP is a C++ technology stack that allows communication across networks, while COAP is a simplified protocol for IoT devices.
It’s clear that C++ supported our project through each of the four requirements we needed to meet. It’s no wonder that C++ is so widely used. In fact, a lot of high-level languages like C# and Java can only be used on a device after it was set up with the help of C++.
Would you like to know if C++ is the right programming language for your next IoT project? Reach out to our team, and we can help you analyze the requirements of your project.