Speed development of IoT devices
For decades embedded systems have been built in nearly the exact same way, but the demands of market conditions, budgets, and technological advancements are rapidly transforming the way embedded systems are being built. The complexities and challenges of building an internet connected device, a potentially huge market that developers can no longer ignore, are quite staggering if a developer follows traditional design techniques. Below are a few ideas on how developers can rapidly develop internet connected devices.
Idea #1 – Select an embedded platform
Embedded software engineers have a lot of work to do to get a product connected to the internet: drivers, board support packages, middleware, RTOS integration, web components, and then finally the application code. Starting from scratch or attempting to integrate existing components that weren’t designed to work together is not only time consuming, but costly. There are a couple of platforms that have the potential to alleviate some of the time and cost with these tasks. Two that come immediately to mind are the Renesas Synergy Platform and the Electric Imp. These platforms take very different approaches but both allow developers to focus on application development rather than connecting to the internet or writing low level code.
Idea #2 – Adopt an alternative programming language
The C programming language has been entrenched in embedded systems development since the 1970’s. The problem with C, and even C++, is that universities and schools no longer teach it! Students and most developers learn an object oriented programming language such as Java or Python. The transition to C from an object oriented language can be mind boggling and the intricate details, quirks and problem points often get overlooked.
The lack of new, professionally trained C developers suggests that either large numbers of developers need to be educated on how to develop software using C or the language of choice needs to be changed. (Feel free to audibly gasp at such an audacious suggestion.) For microcontroller based systems the use of a language such a Micro Python might be an interesting choice. Rather than a large work force of C experts, connected systems can be developed by electrical engineers, or even students with very little formal software training, who can easily develop scripts to run an embedded system.
Idea #3 – Leverage development kits
Developers should write a fairly significant amount of application code using development kits that are all connected together with jumpers rather than on the final target hardware. Ridiculous you may say! The fact of the matter is that out of the dozens of projects I work on each year, the ones that are the most successful, perform most of their proof-of-concept development work using development kits.
The use of development kits removes the question of whether the issue to be resolved is hardware or software related. The development kit can help isolate the issue. Using development costs can also help save tens of thousands of dollars early in the development process of spinning boards. I’ve seen development teams that rush the design of a PCB in order to get target hardware, only to find that through rushing they made mistakes that waste valuable software developer time (and money). Don’t forget, failure is a fact of life, but if failure is to occur we want it to be as soon as possible and hopefully even before expensive hardware is purchased.
Idea #4 – Use modules and frameworks
The day of thinking “I can write all this code from scratch myself” is over. Writing quality code is time consuming and time is of the essence when launching a product. Developers need to set the level of quality they can live with and leverage existing technologies to quickly get to market. For example, why roll your own RTOS when there are dozens of commercially available and proven solutions? Sure it’s fun to do but is it practical or necessary in today's market? Select the RTOS that best fits the needs of the application and start writing code immediately!
Idea #5 - Don’t be afraid to push the envelope
Every now and then an engineer will push the envelope, adopt a new technology, and then get burned. Maybe it was the acceptance of a third party software stack, the use of a hardware module, or some other technology. Whatever the source, the result is that the engineer tells themselves that they won’t ever do that again. The problem is that a few years go by, the technology matures, but those who have been burned are still very hesitant to re-examine technology. So engineers continue to develop systems the same way they did before, slow and cost inefficient.
The on-set of the IoT era is proving to be exciting not only because of the creation of new products but also because of the new techniques becoming available to build those systems. The very way in which embedded systems are being built is beginning to change. Before long, the idea of writing a low level driver or middleware will be as foreign as it is to .NET developer.
Jacob Beningo is principal consultant at Beningo Engineering, an embedded software consulting company. Jacob has experience developing, reviewing and critiquing drivers, frameworks and application code for companies requiring robust and scalable firmware. Jacob is actively involved in improving the general understanding of embedded software development through workshops, webinars and blogging. Feel free to contact him at firstname.lastname@example.org, at his website www.beningo.com, and sign-up for his monthly Embedded Bytes Newsletter here.