IoT Insights Part 1: A Story of Embedded Software in the IoT World

In this blog series, you will explore the rise of IoT and how Gorillas are adapting to the trend. In this post, I introduce IoT from an embedded software – or systems – perspective. In the next post, I will show how Gorillas have developed full-fledged serverless solutions using AWS.

About two years ago I paid a visit to my university and some teachers and I were discussing the possibility of opening an embedded software lab for the students. When we got to the point of defining the title of the course, someone mentioned to me that “IoT” (Internet of Things) was the new fancy name for “Embedded Software”.

That got me thinking.

If you are not sure of what embedded software is, we’re going to come up with a definition real soon. On the other hand, if you don’t know what IoT is, then please make a quick search and we’ll wait for you.

Let’s start from the beginning.

An embedded system is anything around us that looks like a computer but isn’t.

Wait, what?

Take as an example the coffee machine I have in front of me. Don’t pay much attention to it, it’s just the closest thing that I found near me that had some electronics built into it.

Coffee Maker

We have a nice LCD display telling us that it’s ready to brew an 8 oz cup. That display is an output. AND, how cool is this, the display is also a touchscreen, so it also acts as an input. That big round shiny button is also an input and would start the brew if I wanted to.

Have you ever wondered who made those old-school pixelated drawings on the screen? How does this machine let you choose the serving size, 6 oz, 8 oz…? And then act different according to your selection?

There must be code in there to do that. By code, I mean, “software”. As simple as this machine is, there must be code in there. And if there’s code, then we need memory to store it (Read-only memory, or ROM). And code needs dynamic memory to do its job (Random-access memory, or RAM). And let’s not forget that code is just 1s and 0s that need to be run by a CPU (Central Processing Unit) to make things happen.

Overall, we have a complete computer system in our innocent coffee machine: we have inputs, outputs, memory, software, and a processing unit.

Take a look around your house and try to come up with some geeky existential questions about your microwave, your fridge, your security camera, your printer, your thermostat, and the BIG etcetera of things you may find at home.

And then also note that these “things” have something in common: they are meant to do one simple task or at least some small set of related tasks. The thermostat will regulate your home temperature. Your coffee machine will help you make coffee. The printer will help you ink your papers and if it’s fancy enough it can also scan pictures. Each of these “things” has a specific purpose in your house.

So this my short definition for an embedded system: a computer system that is made for a specific use case (or a small set of use cases).

Embedded systems are not only found at home, literally, they are found everywhere! Cars, boats, and planes have hundreds of embedded systems (e.g. the anti-lock braking system in your car), plenty of medical devices are embedded systems too (e.g. an endoscope), and we have thousands of examples of embedded systems in the industry (Industrial IoT).

We can define embedded software as the code that is written to control an embedded system, often also referred to as firmware. This type of software is very unique because it’s the closest one to the hardware.

Since embedded systems are task-specific, their hardware resources are designed to be just enough for what is needed, allowing lower price points. They have slower CPUs and way less memory. I’m sure your coffee machine doesn’t need a quad-core processor to operate, right? Well… not yet!

Finally, we can also define what is not an embedded system.

The best example of a non-embedded system is your laptop. Instead of being specific, the laptop (or any PC) is a general purpose computer system. You can do a bunch of stuff with it: you can open up your text editor, buy something online, play games, do your accounting, or run complex scientific programs on it pretty much a lot of whatever-you-need functionalities.

Trivia question: Is your (smart)phone an embedded system?

 

The rise of Embedded Systems, a.k.a The “Internet of Things”

In a few words: things got connected.

With the rise of ubiquitous WiFi and broadband Internet almost everywhere, a simple coffee machine can be really powerful when connected to the internet. Same as your shower, your door lock, your TV, and pretty much ANYTHING around you. And I’m not kidding, anything means that “smart” salt shakers are now in the market.

This is how, for a few years already, connected devices are revolutionizing the world as we know it. The Internet of Things explosion has started to demand a great deal of attention and has reached almost every area of the software industry.

In the embedded field, hardware manufacturers have come up with cost-efficient, energy-saving devices that can use WiFi or Bluetooth to connect securely to the world.

Cloud computing has faced the challenges of scaling to handle millions of interconnected devices. The data coming from these devices is a fertile source for big data and machine learning applications. Security is, of course, one of the biggest topics in IoT. And let’s not forget that agile and secure mobile development is also key to the revolution: we want to control our things remotely from anywhere in the world.

 

Some of the IoT Challenges

A few years back, the IoT trend kind of caught the industry off guard. At least that’s how I felt it. We knew by then how to securely scale servers to tons of users for typical web or mobile applications. But the industry was not sure how to interconnect devices, securely, that were running on such limited hardware resources.

It took a while before we came up with lightweight and secure protocols to connect these devices to the cloud in a reliable way.

How many of us bought a “smart” product in the last few years that were just about impossible to pair and give it your home’s WiFi credentials. So even from the very first step, they were difficult to use.

Another common and dissatisfying experience was trying to reach your device at home when you were away. Infinite spinners in your phone app that resulted in a “We can’t reach your device” after 30 seconds of waiting.

That’s why we want to tell you about our IoT development experience at Gorilla Logic. In my last project, we implemented a whole IoT serverless architecture, and we were able to reach your device at home in 1 second, reliably. Yes, in 1 second! You can read more in the PRO1 case study.

Since we partnered with AWS, we’ve come with an AWS reference architecture that uses AWS IoT to connect to these devices securely, even if their resources are very very limited.

For those of us that lived through how it was done in the past, with custom heartbeat servers and stuff like long polling, (and how hard it was then to support both upscaling and downscaling, setting up load balancers, and a big painful etc…) we are amazed how easily we can come up with a scalable and secure solution for your IoT product by using protocols like MQTT, which implement a much more convenient publish/subscribe alternative to reach your devices, and then let  AWS serverless handle scalability.

This way of handling your IoT architecture should change the landscape one project at a time. Your clients will be happy, and, I’m sure, you’ll reduce your product’s time-to-market.

It’s almost like a miracle.

In the next part of the story, we’ll show you how Gorilla Logic has developed full-fledged serverless solutions to surpass our client’s IoT projects needs.

You’ll be thrilled to learn how we are using AWS services to quickly architect your IoT product from the ground up in no time.

 

Subscribe to our Blog

Jose Carballo
Jose Carballo
Jose has been developing Embedded Software since 2010. He has a background in Electrical Engineering but was determined to avoid writing bad code like most Electrical Engineers do (sorry guys!), so he also earned a Bachelor’s degree in Software Engineering to help the cause. Every now and then he also enjoys doing some app or server-side development, just enough to not feel like the odd gorilla in the band. Feel free to send him a book recommendation if you have any, and he’s always ready for a good craft beer.

Deliver off-the-chart results.