Your guide to IoT and embedded systems
This post will take you through the relationship between embedded systems, embedded software, and the Internet of Things (IoT). Plus we’ll examine some key software considerations for developing IoT products.
Coming up:
- IoT and embedded systems
- What is an embedded system?
- What is an embedded system in IoT?
- The significance of embedded systems in IoT
- How business is embracing IoT
- Business benefits of IoT
- Challenges of IoT embedded software
- Tips for embedded software development for IoT
- Embedded software development for IoT
IoT and embedded systems
Internet of Things devices, and the embedded systems that enable them, are everywhere. Ten years ago hardly anyone had smartphones; advancements and adoption of IoT products have allowed millions of devices to connect to the internet and cloud services, all contributing to a global “smart” revolution.
Connectivity gained through IoT technology has helped evolve everyday devices making us and the world around us ever more connected. Whether it’s personal fitness devices, home heating systems, or medical devices, there has been an explosion of new products embracing IoT solutions.
What is an embedded system?
Traditionally, an embedded system is a small computer system that sits within a mechanical or electrical system. An embedded computer system will have a dedicated purpose, like a heart monitor, home internet router, washing machine or electric bike. These computer systems will have one or more microprocessors that act as the “brain” of the device. Something like a smartphone is composed of numerous embedded systems that work together.
Importantly, unlike a personal computer, embedded systems are responding to feedback and events happening in the real world.
Having a dedicated purpose is what distinguishes embedded systems from personal computers.
When Bluefruit Software talks about embedded software development for embedded systems, we mean the whole gamut of software that works with them. From firmware and bootloaders to drivers and embedded operating systems, to user interfaces and beyond.
Historically, embedded systems have had limited to no connectivity to wider networks or the internet. Legacy systems still in operation today connect to other embedded systems through archaic connection standards, like the RS-232 standard, which was initially designed back in the 1960s and has limited speed and bandwidth.
Today’s embedded devices benefit from far faster connectivity protocol standards that also have larger bandwidth and can also use wireless connectivity. Embedded systems are also far more complex.
It’s oft-repeated, but the embedded systems and embedded software that put humans on the moon in 1969 were far less complicated than the systems you will find on the smartphone in your pocket today. Whereas the Apollo computer had approximately 145,000 lines of code, the average Android smartphone operating system runs to 12-15 million lines of code. (Meanwhile, the average high-end car with all the bells and whistles has 100 million lines of code.)
And not all IoT enabled embedded systems are as complex as a car. It could be as simple as a GPS enabled tag that you can attach to your bike to help you find it with your phone, should your bike become lost.
What’s an embedded system in IoT?
An embedded system in IoT is still an embedded system. What makes it different is that it happens to also connect to the internet, or another network like home network, in order to perform functions that go beyond what’s happening on the system itself. This expands the range of functions that otherwise wouldn’t have been possible without being connected.
Take a smart refrigerator.It may have sensors inside the fridge that can detect levels of produce. Through its connection to the internet (and likely a smartphone and/or web application), it can order produce from a store when levels of a certain item fall by a certain amount.
ARM, whose designs are behind many of the microprocessors running IoT devices, define embedded systems in IoT like this:
“IoT devices are pieces of hardware, such as sensors, actuators, gadgets, appliances, or machines, that are programmed for certain applications and can transmit data over the internet or other networks. They can be embedded into other mobile devices, industrial equipment, environmental sensors, medical devices, and more.”
(Source: ARM)
When combined with the ability to transmit data over the internet, it’s all these sensors, basically making them an IoT device. An embedded system in IoT is an embedded device that has that IoT functionality added to it. (Note that an Industrial Internet of Things (IIoT) device doesn’t necessarily use the internet to transmit data.)
In transmitting data, these devices can be connected to one another and potentially make “smart” decisions themselves or help end-users make smart decisions.
Consider a personal fitness tracker that connects with an application on a smartphone. The tracker records activity while an app on the smartphone may track this against calories consumed, so the user can decide whether they can treat themselves to a doughnut.
Or it could be a “smart” insulin pump (technically, an Internet of Medical Things (IoMT) device) that keeps track of a user’s sugar levels and helps them monitor their sugar and insulin levels through a phone app, and deliver insulin as needed.
What’s important to remember is that:
All IoT devices have embedded systems, but not all embedded systems are part of the IoT.
The significance of embedded systems in IoT
Embedded systems are a vital part of the foundations behind the IoT ecosystem. The significance of an embedded system in IoT is that much of the IoT wouldn’t exist as we know it without the embedded systems that help devices function.
While the internet is essential in transmitting data to and from IoT devices to online (cloud) services, it’s embedded systems that will enable this data to be sent and often interpreted at a local level.
The data that embedded systems are interpreting can come from applications on smartphones, cloud services and other nearby computers. Still, the critical source of information is the host of sensors that input real-world data in real-time. Embedded systems will then decide whether this data is significant enough to be transmitted through whatever connectivity means an IoT device has.
Sensors in embedded systems and IoT
Before the advent of smartphones, sensors were a mainstay in embedded systems, helping them record and respond to events happening in the physical world. Sensors continue to be a considerable part of embedded systems, assisting many to function as intended.
The kind of events in the physical world that sensors can monitor include:
- Chemical
- Electromagnetic (visible light, radio waves, ultraviolet, infrared, and so on)
- Temperature
- Humidity
- Motion or acceleration
- Force or pressure
- Electric
- Sound waves
Sensors are not intelligent in themselves; they need to be connected to an embedded system for action to be taken on the data that comes from them.
For instance, a personal fitness band may communicate with a smartphone app over Bluetooth, and then that app will communicate with a cloud service through the internet. It might work something like this:
- Accelerometer sensors in the band monitor footsteps taken by the wearer.
- The band (which is an embedded system) is programmed to communicate with a smartphone app on a regular basis, and tell it how many steps have been taken by its wearer.
- Once the phone app has been sent this data over Bluetooth, it then sends it over the internet to a cloud service (an online application with a database) where the wearer’s fitness data is stored and tracked.
- Depending on the cloud service’s data, personal recommendations are made every so often based on that data and transmitted back to the band wearer over the internet and back to the app.
None of this would happen without the band’s sensors and the embedded system able to interpret and transmit that data beyond the band in the first place.
No embedded systems, no IoT
The significance of embedded systems in IoT is that you wouldn’t have the Internet of Things that we have today or in the future without them.
Software is behind everything in this diagram, whether it’s controlling a part of it or helping it to communicate with the broader whole.
Embedded software plays a role in the embedded system, enabling it to function and communicate beyond the system itself.
How business is embracing IoT
The following are just some ways business is embracing IoT:
Industrial Internet of Things (IIoT)
While IoT is more widely known for its impact on personal devices, there have been tremendous advancements within the industrial space, to the point that it could be considered a new industrial revolution: Industry 4.0. Looking at the advantages, an increased amount of networking and connectivity can bring, Industry 4.0 further realises what IoT solutions can mean on an industrial scale. IIoT, when combined with emerging technology like AI, the potential impact on global manufacturing and industrial systems is immense.
Internet of Medical Things (IoMT)
At Bluefruit Software, we’ve also increasingly seen the continued adoption of IoT based thinking within the Medical Sector, as more companies look to bring everything from diagnostic devices to hospital equipment online. IoMT is starting to change how we think about medical devices and healthcare delivery. The impact of COVID and a need for remote and real-time solutions has only added to the already rapidly expanding connected medical device market. Often referred to as IoMT, the medical sector has its own opportunities and risks for bringing healthcare solutions online and connecting to the cloud.
Making IoT a reality
While all of these IoT based advances are exciting, it’s important to remember you can’t just wake up one day and plug a device into the cloud. A considerable amount of work goes into determining the right connectivity solution and understanding its impact on an existing product or the requirements for a new one. Here is where embedded systems and our team of embedded software developers get to work.
Business benefits of IoT
Now that we understand what IoT and embedded systems are, why should product teams care about the hype around IoT? Sure, there are some fantastic features that end-users can benefit from when using an IoT product, especially from a monitoring and reporting perspective.
But there are also business benefits for product developers when creating a product with connectivity in mind:
- Remote firmware updates that don’t need user interaction. Over-the-air updates need far less user interaction than found in non-connected products, which have far more complex update procedures or may not be able to be updated at all.
- Administering licenses so that you can protect your intellectual property. With this, an end-user can’t easily reverse engineer the software to extract the software that makes your product unique, and then pirate it.
- Collection of usage data for further product development and research. Before IoT devices were a thing, usability testing for embedded systems would need to be done entirely in person. Now, collecting usage data happens remotely to find out what features are being used and often how. With these insights, driving updates and future product versions happens because of genuine use cases and user needs.
And these are just a few of the business benefits for building an IoT device in the first place.
Developing an IoT device, however, isn’t without its difficulties.
Challenges of IoT embedded software
Developing embedded software in IoT faces many similar challenges to developing software for embedded systems that are not connected to the internet. Similarly, some software development difficulties here become an even greater focus when the software is for an IoT product.
Here are three top challenges facing IoT embedded software development:
1. Security
The device’s security is possibly the biggest and most important challenge faced in coding for an IoT product. While much of the challenge here comes from the hardware decisions that enable devices to connect, the software is also responsible for mitigating security risk.
Connected devices have a larger attack surface area than a device that isn’t connected to a wider network. How big is this issue? In 2020, Nokia found that IoT devices accounted for 32.72% of malware infections observed by its endpoint security software (source). And that’s just what Nokia saw. Other security software partners have recorded similar infection rates in IoT.
An unsecured device presents a threat to the privacy of any data transmitted by the device. The device could also become part of a botnet, used to launch other cyberattacks.
But the worst-case scenario? An IoT enabled device could become compromised and lead to loss of life. For IoT in automotive, IoMT and IIoT, the risk here is immense when security isn’t accounted for. Still, even a consumer-level IoT product such as a smart fridge, kettle, or television is a safety risk with inadequate security.
2. Limited memory
Embedded systems generally do not have the same vast amounts of memory and processing speeds that a personal computer does (for various reasons, including cost). Due to these hardware limitations, embedded software needs to be as efficient and lean as possible.
Every line of code must have a reason to be there; every feature must have a purpose. An embedded system won’t have gigabytes of memory directly available to it. It likely won’t even have megabytes.
Our fitness band example—that wearable IoT device?
The embedded system within would likely only have 256 kilobytes (kB) of flash memory (along with 32kB SRAM and 8kB EEPROM). A floppy disk from the 1990s would have around 1.41 megabytes (MB) of memory—that’s almost six times more memory than the fitness band.
But unlike that floppy disk, the band needs to be able to monitor its sensors, record data and communicate with its paired smartphone through a Bluetooth beacon. The Bluetooth controller stack, the software that will enable Bluetooth to function, could take up around 192 kB in flash memory (and 24 kB of RAM). And that’s just to get the Bluetooth to work.
3. Updates
An IoT device’s significant advantage is its connectivity, which means embedded software in an IoT product can benefit from over-the-air updates as can the applications on any connecting smartphones or cloud services.
Updates to software can fix flaws that weren’t previously uncovered in testing or fixing security holes found in software libraries used in coding the device software. Device updates can also add new features or enhance existing ones for end-users and extend the product’s marketability and relevancy.
But to keep up with the pace of development needed—embedded software development teams need to be coding and testing to support this and have processes that synch up with application developers and other specialists in a product team. These processes need to be capable of:
- Understanding when updates are needed.
- Developing timely updates efficiently and effectively.
- Fully testing the updates to make sure nothing breaks on the device and its application.
- Carrying out usability testing before rolling out.
- Making any needed changes found through software testing and usability testing.
- Securing updates and validating they’re coming from a trusted source.
- Figuring out when it’s best to push out updates.
- Providing rollbacks or suspension of updates if issues are found after deployment.
- Working with the limitations of device hardware and connectivity.
It’s a tricky balance to maintain and update software for an IoT device.
Don’t let these software challenges put you off, though.
Tips for embedded software development for IoT
The challenges identified in this post are not insurmountable. With the right processes and practices in place, developing IoT embedded software is a manageable experience.
1. Have a security by design mindset
In our post on security in IoT and embedded software we talked about the steps teams can take to support security by design. The significant steps you can take to enable this are:
- Enable security by design from the outset because adding it in retroactively is tough to near impossible. That means security needs to be thought about from the start of a project.
- Minimise the attack surface by limiting superficial and/or redundant features, including connectivity features. If your usage data finds that a feature is only used by a small number of users or none—consider discontinuing that feature. Plus, it would help if you accounted for all behaviour on the device, by gating it behind authentication that uses a transparent permissions system.
- Understand the trade-off between in-house and third-party code. There are positive and negative aspects for both, including cost, but from a security point of view, in-house is less exposed to malicious actors but is often less secure. At the same time, third-party (especially something open-source) undergoes a lot more scrutiny.
- Check your supply chain from end-to-end and for the whole lifecycle of the product. It’s not just your software team or teams who need to be concerned about security. It’s essential for all involved to understand that security in the chain is an ongoing process.
- Build a security culture by not focusing on the compliance side. For software engineers, the angles that interest them may be more around the challenge posed by security, so consider ways you can bring that in.
Some products need to be more secure than others, but as our security in IoT post details: the responsibility for security when things go badly wrong is a growing legal and corporate risk issue.
2. Invest in conceptual integrity to counter hardware limitations
Here at Bluefruit Software, we are advocates for conceptual integrity to ensure high quality embedded software. Conceptual integrity is about paying attention to the software elements that an end-user will never see—at its most basic level that means caring about the literal quality of the code developed and how it’s produced.
The core elements of conceptual integrity ask that software is:
- Scalable—software should be scalable and structurally sound, enabling new features and product evolution.
- Maintainable—code should be written clearly and have a robust test framework so that any developer can understand and work in it.
- Habitable—a codebase should be easy to work in and have a clear structure so that changes can be made with confidence.
All three should be in place to have high-quality software. The practices involved in getting there means that it blends well with the real-world limitations placed on embedded software development by the hardware available. As you saw in our earlier fitness band versus floppy disk example, embedded computing works at the extreme end of hardware limitations, even in IoT.
Two coding practices that help support scalable and habitable software are code reviews and refactoring. These practices help teams trim and clean up software enough to handle the limitations of the hardware used.
3. Use practices that support collaboration and clarity to make updates easier
Being a Lean-Agile embedded software company means that Bluefruit follows processes that help us to collaborate and provide clarity on projects, regardless of whether it’s for an IoT device or not. Key to this is the marriage of Lean and Agile principles and practices that help us reduce waste while ensuring quality.
In one of our biggest client projects (a now FDA approved diagnostic device), our Lean-Agile practices helped us coordinate numerous product and software teams across multiple businesses in different countries.
Lean-Agile supported practices and processes that will make IoT device updates easier include:
- Putting users first with User-Centred Design.
- Having effective planning sessions.
- Embracing Test-Driven Development and Behaviour-Driven Development.
- Assessing the business value of features during planning.
- Running frequent retrospectives.
And that’s just some of what can help. Our Lean-Agile series of blogs has more information on being a Lean-Agile software development team or product team.
Embedded software developments for IoT
Advances in IoT are happening all the time. The technology is moving beyond the consumer level as more and more sectors see where connected devices could bring profound positive change to how they do business.
Whether it’s supply chain management through IIoT enabled tech with RFID supporting Industry 4.0 transformations. Or it’s a personalised healthcare device using IoMT to manage a patient’s co-morbidities: IoT has a tremendous amount of potential across a variety of business cases.
Embedded software development for IoT will remain an essential part of these advances. If you’re looking for a team of software engineers and test engineers to help you get started on your IoT journey, get in touch with Bluefruit Software.
Why is psychological safety critical to managing software risk?
Are you wondering what it really takes to prevent hazards and harms from embedded devices and systems? The tool many organisations are missing from their software development and product teams’ toolboxes:
Psychological safety.
You can download your copy of Why is psychological safety critical to managing software risk today. It doesn’t matter if you’re new to the concept or need a refresher; in our new ebook, you’ll learn about:
- What is psychological safety?
- The four stages vital to building psychological safety within teams.
- How psychological safety diminishes project risk.
- Project management practices that work well in organisations with psychological safety.
- How two businesses squandered psychological safety and paid the price for it.
Further reading
Did you know that we have a monthly newsletter?
If you’d like insights into software development, Lean-Agile practices, advances in technology and more to your inbox once a month—sign up today!
Find out more