This post is designed to give the beginner a good understanding on where software exists in the “Internet of Things”.
I’ve noticed on multiple occasions that people around the internet have been asking the question “What is IoT software?” and so here I will shed some light on the subject.
A question like this can not be explained in a simple sentence because IoT software is such a broad topic.
Software exists in every aspect of IoT hardware and all have it’s own individual purpose.
Here I will cover many common uses of IoT software but remember that this post can not cover every possibility!
Let’s get started!
FREE Download: CIoTP Checklist!
The ‘Certified Internet of Things Practitioner’ Certification provided by CertNexus is an excellent blueprint to begin learning IoT.
To download your CIoTP PDF CheckList file Click Here
1. IoT Hardware Platforms
Before we can talk about software we must first talk about hardware. Why is this..?
For software to exist in technology it must exist on physical hardware such as computers and microcontrollers.
The following bulleted list describes some of the most common IoT hardware platforms:
- Computers such as PC, laptop, netbook (We call this x86 architecture)
- Mobile devices such as tablets and phones (Usually ARM architecture)
- Single board computers such as Raspberry Pi, Orange Pi, Banana Pi, Odroid and BeagleBone (Usually ARM but also x86 architecture)
- Servers (Usually x86 architecture)
- Microcontroller boards such as Arduino, ESP32 (Sometimes ARM Architecture)
- Network nodes such as routers, switches and bridges
- Wireless Communication transmitters/receivers
2. Closed Source VS Open Source Software
Hopefully we all know that it is people who write software code.
But depending on what these people do with this code will determine if it is closed source or open source.
When a developer is happy that his/her new version code is ready to be released, the software is then compiled into executable code.
If only this executable code is offered to the public and not the source code then we call this closed source.
However, if the developer offers his/her code to the public BEFORE it is compiled into executable code then we call this open source.
Anyone can modify a software program if they have access to the source code.
But no one can modify a software program after it has been compiled into executable, binary code.
Some programming languages don’t compile the source code at all and it is interpreted during run-time. We call these scripted languages.
Because scripted languages are always in “open-source” format, businesses who are only creating software to make money won’t write their software products with these languages.
Closed Source Software
Let’s say for example we have a software company who needs to sell their software products to make a profit and stay in business.
This company will do everything in it’s power to keep their software source code under lock and key.
After all, who is going to buy their software if everyone has access to it for free?!
We call this closed source.
Open Source Software
Now let’s imagine an open source scenario. The following bullet points lists reasons why developers may want to release free and open source software:
- Hobby: Some people write code as a hobby and they don’t usually get paid to write this software
- Gain Community Respect: Many developers may have a software project that they would like to release into the world as a similar program doesn’t yet exist for free on the internet
- New Features: Developers may want certain features in software programs that don’t already exist in the commercial, closed source software alternatives
- Collaborate: Developers can (and do) upload their software source code on to the internet where other like-minded developers can view and edit the source code to improve it
Websites such as the following are examples of these development sharing sites:
By sharing this code with others on these online platforms, developers can organize and manage code together in something called a repository.
Teams can be established to collaborate on a piece of work and can carry out tasks such as performance metric tests.
Integrated Development Environment (IDE) Software Applications
An IDE is a software program that can be used to develop another program.
A simple text editor can also be used to write programs if that’s what the developer chooses to use.
Most developers will choose to use an IDE to write their code as IDE’s include helpful features to make the job easier. The following list explains some advantages of using an IDE over a simple text editor:
- Features such as syntax highlighting can be very helpful in finding problems in program source code.
- IDE’s usually incorporate a compiler too. This is what turns the human-readable source code into computer binary code which the computer needs to execute.
- IDE’s can also offer software library files which further makes the developers job easier. These libraries, along with the developers source code is compiled into the complete executable program ready to be ran by a user.
3. Operating Systems And Software Applications
Some IoT devices allow us to run a fully-fledged operating system on them.
These operating systems would manage the basic functionality of our IoT hardware and allow us to install any compatible application that we choose.
Many microcontrollers don’t support an operating system and it’s not always needed.
Using an operating system when a project doesn’t require it can increase unnecessary complexity to an IoT system as well as requiring more power to operate.
However an operating system opens up so many possibilities to allow us to create an IoT device with many features.
The following list of operating systems can be found in many IoT computers and are considered as industry standard:
- Android and iOS
- RTOS, freeRTOS (Real-Time Operating Systems)
- arm mbed OS
- Wind River VxWorks
- Android things
4. IoT Firmware
Firmware is simply software that exists in computer hardware IC’s (Integrated Circuits) or what some people would call a microchip/computer chip.
Firmware is usually written by the manufacturer of the hardware device and is used to operate the hardware that it exists in.
Most firmware’s have the ability to be upgraded and should always be kept up to date whenever possible for security and privacy reasons.
A manufacturer may improve the software to introduce new features or to patch security vulnerabilities which may allow attackers to compromise computer systems.
No matter what electronic device is used in an IoT system, you can almost guarantee that it has firmware in it somewhere.
The following list gives examples of IoT devices that incorporate embedded firmware:
- PC/laptop (My post about a PC BIOS is a good example)
- A single board computer such as a Raspberry Pi, Banana Pi and BeagleBone
- Network Nodes
- Mobile Devices
- Microcontroller Development boards such as Arduino and NodeMCU
5. What Does IoT Software Do?
Edge Computing Software Functionality
An edge computer exists at the very end of an IoT system and this is what we are usually referring to when we talk about “Things“.
Raspberry Pi and Arduino Uno for example can be used as an edge computer.
These edge computers use electronic sensor components to monitor the world around us such as temperature and light.
Some devices or “Things” run an operating system at this stage and most devices here will use microcontrollers.
The Raspberry Pi is an example of a single board computer that would use an operating system and the Arduino Uno is an example of a microcontroller board that does not.
(Note that some Arduino boards do in-fact support an operating system)
Software that runs on these devices are referred to as embedded software as the software needs to be specific to work on the hardware.
The software at this edge stage of the IoT system may perform the following tasks:
- Monitor and record sensor data from the edge device
- Control output components such as motors and lights
- Send data to another IoT device in the system (This is known as M2M or Machine-to-Machine)
Programming languages in edge computing can include:
IoT Software Functionality On Servers/Cloud
The definition of a server indicates that it provides a service of some kind to us.
There are many different IoT software servers on the internet which offer an array of possibilities.
You may have heard of the following terms which can describe this type of service:
- PaaS (Platform As A Service)
- SaaS (Software As A Service)
These can offer us IoT functionality such as:
- Storing Big Data
- Data Analytics
- Networking Devices/Connectivity
- Authenticating Users
- Automating Tasks
Programming languages found in servers can include:
Mobile Device Software
The following bulleted list describes software and functionality that may exist on a mobile platform:
- Android or iOS are common Operating Systems in mobile devices
- Mobile devices can be used to communicate with servers and/or edge devices via networking
- Used to monitor or analyze data from edge devices and/or servers
- Can also be used to control edge devices such as manually changing the temperature on a thermostat for example
The “Internet of Things” couldn’t be possible without networking devices together, weather that’s over the internet or in a small local network.
Much of the software that operates in networking isn’t directly controlled by us, the user.
The following sub-headings describe some of the main areas where software exists in networks:
Devices used to network computers together are often called nodes.
These nodes can exist in the form of routers, gateways, switches and hubs for example and usually have embedded firmware in them.
Sometimes we can usually find an operating system installed in them too.
Nodes also pass data through them which is controlled by network protocols which is another form of software.
The TCP/IP protocol suite is what makes the internet and local networking possible.
This suite is made up of many protocols that have a multitude of functionalities from controlling data transmission to encrypting traffic for security purposes.
There are many messaging protocols that can be utilized by a user to help create an IoT system.
Depending on which of these protocols to use would depend on the users needs and are entirely optional.
The following list introduces you to some of the most common messaging protocols used in IoT today:
6. IoT Software Platforms
Software platform applications can exist in the form of mobile apps or web apps for example.
Some software platforms exits in both mobile and web which work together.
Some of these platforms are kept closed source and remain property of a business and others are entirely free and open source.
The following sections provide a list of example software platforms available as of today:
IoT Online Platforms: Server/Cloud/SaaS(Software As A Service)
Local Platforms For IoT: PC/Laptop/Local Server/Single Board Computers (Commonly Open-Source)
IoT Mobile Apps (Some of these examples may have server-side applications too)
Example apps from Google Play Store:
Proprietary IoT Software & Hardware Products
This aim of this post was to answer the question of: “What is IoT software?” where I gave an overview of where software exists in every major area of the “Internet of Things”.
I hope by now you have a good understanding of how these devices use software to communicate with each other and how us, the human, can use software to interpret data.