The Arduino ecosystem has made embedded software development easily accessible to millions of people who know little to nothing about programming or processor architectures. The platform has become so popular that it is sometimes difficult to get students or even engineering professionals to put down their Arduino and write “real” embedded software. Here, we look at five tips for going beyond the Arduino and moving your embedded software and system development skills to the next level.
Tip #1 – Transition to using mbed
One of the first things one could consider doing is transitioning from the Arduino to the mbed ecosystem. Mbed provides Arduino developers with the opportunity to move from mostly 8-bit or 16-bit parts to a 32-bit Arm architecture. Mbed supports a much wider range of microcontroller development boards and provides a richer ecosystem that a developer can leverage from. In fact, an mbed developer can develop their software directly online in the cloud or develop locally in a more traditional manner. This opens the options for working in several different IDE’s or even directly within a command line. The change in environments will force a developer to learn new skills and expand their current understanding of software development. Most Arduino developers also know C++ and since mbed is also C++ based, there will be a level of familiarity with using mbed.
Tip #2 – Give MicroPython a try
Sometimes a developer may want to push themselves into completely uncharted and new territory. One way to do this is to completely move away from C/C++ and try to develop a system using Python. For microcontroller developers, MicroPython is the tool of choice for writing Python code. MicroPython supports Python 3.4 and provides the Python interpreter ported to C so that it can run on the microcontroller. This allows a developer to then write simple Python scripts and leverage the MicroPython libraries and APIs to quickly and easily develop an application. This option provides a new language to learn, which is very popular, and abstracts out the hardware so that the developer doesn’t have to master the underlying processor architecture.
Tip #3 – Learn real-time C++ techniques
Sometimes an Arduino developer may be perfectly comfortable with the hardware they are using and the language they are using as well. They just want to expand their language skills. In this case, the developer isn’t necessarily going beyond Arduino but learning programming skills that can take them beyond Arduino if they wanted to. A great way to do this is to learn real-time C++ programming techniques. This would require the developer to study the C++ language in more detail and learn techniques like using pure virtual functions, templates, and how to architect their software to be reusable.
Tip #4 – Develop your own driver code
If a developer really wants to learn how the underlying hardware works, trying to write a driver would be a fantastic step out of the Arduino comfort zone. Writing a driver requires learning about the processor architecture, the memory map, and the peripheral that the driver would be written for. Developers could still leverage their Arduino boards but move to just a lower level in the software stack. If this sounds interesting to you, I’d recommend starting with writing a general-purpose input/output driver first followed by a USART driver that can send and receive characters. This can be followed up further with writing a circular buffer to store those characters and if you are really ambitious, you can then write your own serial packet protocol and the code to decode and validate the packets.
Tip #5 – Explore the ESP32 Ecosystem
If an Arduino developer is looking for a major change, they can completely change languages and hardware and try something like the ESP32 ecosystem. The ESP32 is a Wi-Fi/Bluetooth processor module that is being used in more IoT devices with every passing day. The modules themselves are inexpensive and provide open-source libraries that are comparable to the Arduino’s. The difference is that the libraries are written in C, which allows the developer to get deeper into the hardware and provides more flexibility and control. Quite a few of the modules are also multicore which can provide a new level of software complexity for developers to learn and master.
The Arduino provides developers with a great ecosystem to build rapid prototypes and prove out engineering concepts. Sometimes though, the Arduino is either not enough or a developer may need to push the envelope and find new challenges to expand their skillset. We have explored several opportunities to go beyond the Arduino that should hone a developer’s software skills and push them out of their comfort zone and into the world that many professional developers work in.
Jacob Beningo is an embedded software consultant who currently works with clients in more than a dozen countries to dramatically transform their businesses by improving product quality, cost, and time to market. He has published more than 200 articles on embedded software development techniques, is a sought-after speaker and technical trainer, and holds three degrees which include a Master of Engineering from the University of Michigan. Feel free to contact him at [email protected], at his website www.beningo.com, and sign-up for his monthly Embedded Bytes Newsletter.