The last decade has seen an amazing advancement in embedded system development techniques, tools and technologies. A decade ago, I recall being amazed when a microcontroller had a clock speed above 48 MHz with an unbelievable 128 kilobytes for flash. Today, we now have microcontrollers with clock speeds above 1 GHz with more than 4 megabytes for flash storage that makes even my first personal computer jealous. This dramatic increase in capabilities for microcontrollers and their affordable costs is going to usher in a completely new design paradigm in the decade to come. Let’s examine three trends in embedded systems development that I believe will prove to be game changers in the 2020’s.
Trend #1 – The Rise of Python as a Dominant Language
Python is already the most popular programming language used by software developers outside the embedded systems industry. In fact, a survey conducted this year by IEEE verified that amongst engineers, Python is the number one programming language followed by Java and then C1. The Aspencore 2019 Embedded Markets Study also found that in the last two years, the number of projects programmed in Python in the embedded space has doubled2! (Keep in mind the study also found that there was no change in the number of projects using C). So, what is it about Python that makes me think it will become a dominant language for embedded systems?
First, as I discussed in the introduction, the compute power available in microcontrollers has grown to the point where a stripped-down version of a Python kernel can be ran on a microcontroller that costs only a few dollars. Second, there are already popular open source ports for Python such as MicroPython that are available on more than a dozen architectures including popular ones like the STM32 and the ESP32.
Third, C and C++ aren’t taught in most computer science or engineering programs. It’s now Python and some Java and has been for quite some time. This means that there is and will be a whole generation of engineers taking the lead in the next decade who have a natural inclination to using Python.
Finally, as I attend conferences, talk with prospects and colleagues, I’m already seeing a natural pull to use Python. No one wants to fight with the low-level hardware and software anymore. They want their microcontroller to come running something that they can put their application specific code on quickly and get their product to market. Forget worrying about registers, pointers and all the traditional embedded stuff. Plus, if Python is used, anyone can help develop the product, not just those embedded folks.
Ready or not, here Python comes!
Trend #2 – Machine Learning at the Edge
I really wanted to avoid having machine learning as a game changing trend for the upcoming decade. I feel like the hype around machine learning is enormous. I can’t open a newsletter or read a blog (or apparently write one) without machine learning showing up. The fact though, is that machine learning holds a lot of potential for embedded systems developers as we begin a new decade.
Machine learning for embedded developers, as it currently stands, has the greatest potential at the IoT edge. Up until recently, machine learning was done somewhere “out there” and it had little if anything to do with embedded developers. Remember though in my introduction when I discussed the rapid advancements in hardware technologies for microcontrollers? These advances are making it far easier to run machine learning inferences on a microcontroller.
Running the inference on the embedded controller at the edge opens a whole range of local applications and can save on bandwidth and communication costs with the cloud. One area that seems particularly primed for machine learning at the edge is embedded vision. The ability to perform object detection and recognition at the edge has so many potential opportunities for business applications and for developers to lighten their workload.
The vast amount of data and libraries that are currently available will make it very easy to train new machine learning models. Even as I write this there are teams of specialists working on how to optimize tools and libraries so that the inferences can run on embedded controller. In fact, we are already at the point where you can run an inference on an Arm Cortex-M4 processor. I know that we are getting tired already of talking machine learning, but the industry is just getting started for us embedded systems engineers.
The next decade has the potential to dramatically change the way that products and embedded systems are developed. In this post, we’ve explored the two game changing trends that I believe will have the biggest impact on embedded systems developers. There are certainly many other trends that will see in the 2020’s, but we will have to save those for another time. I think in the next decade will find the majority of applications will not just use Python, but also machine learning.
What do you think, will Python and Machine Learning be the two major game changers in the coming decade?