5 steps to Starting a career in IoT as a developer in 2021
Last year (2020), I was able to transfer some knowledge of conventional software engineering into firmware engineering. This means basically applying advanced DSA (Data Structure and Algorithms) and design patterns in the firmware design of a complex embedded system solution and yes, it turned out great.
So, if you’ve been considering starting a career in IoT, more specifically ES (Embedded Software design) aka firmware engineering, and you have experience with conventional software engineering, it is a pleasure to help you understand that it is not as difficult as you may have thought, this article will guide you on what to do and the steps to take to accomplish this.
Before diving in, it is important to note that, this article was written specifically for Embedded Software Engineering, which makes up one part of the embedded system field. The other part, which is embedded hardware engineering, which involves the understanding of digital and analog circuits as well as the design and fabrication of PCB, is beyond the scope of this article and will require far more effort and training to be proficient at.
To keep this article as short as possible I won’t be explaining concepts, terms, or keywords, apologies for that, you should probably look up terms you are not familiar with.
Here’s the roadmap, Let’s cut to the chase…
1. Learn c and c++ for embedded systems
Although technically c and c++ are two different programming languages, once you can program in c then you can also use c++ for firmware design. You will most likely not need most of the additional c++ stdlib that aren’t available in native c, so for this reason I will advise starting with c.
Also, do not just learn “how to program microcontrollers in c/c++”, study a c/c++ coding standard, this would help in designing a reliable microcontroller firmware and reduce the chances of having bugs in your code. Coding to standard also helps in writing a code that can easily be debugged. An example of such coding standard is the “Barr group’s embedded c coding standard”.
Here’s a course on Coursera that would help while taking this step: Embedded systems software and development environment
This course would take approximately 9 hours to complete
2. Learn embedded software architecture
Check out this course from the University of Colorado on Coursera, Embedded software and hardware architecture, this will teach the concept of memory maps, DSA, and pointers and how they are used in ES. According to the course info, “You will gain experience writing low-level firmware to directly interface hardware with highly efficient, readable and portable design practices.”
This course would take approximately 4 hours to complete
3. Learn RTOS — Real Time Operating System:
Not how to design an RTOS though, just how to use one. Concepts like, semaphores, mutexes, tasks, and events are what you are probably familiar with as a developer, so all you have to learn is how to use them in embedded systems. The most widely used RTOS is freeRTOS, you can look up how to use it on any platform of choice, say for example “how to use freertos stm32”.
4. Learn Microcontroller interfaces and communication protocols
keywords — GPIO, UART, SPI, i2C, CAN, Bluetooth, WIFI, GPRS etc.
At this point, what you want to learn is how to have your microcontroller interact with its environment via sensors and other systems, like your smartphone, a wifi router, other microcontrollers, or a cloud server
This Coursera course may be useful here: Interfacing with the Arduino
Be aware that for you to complete this step appropriately, you may need to purchase a hardware development kit, and play around with sensors and modules, you can try Adafruit’s ESP32-S2 Kaluga Dev Kit, I have not used it before though, I just think it looks cool :)
5. Get an IoT Development board and start carrying out projects
At this point, you most likely have all you need to design a system that can communicate with a cloud server or local server. Start with the esp32 Dev board. From the previous step, you most likely have a breadboard and a few sensors to capture data. Interface these sensors with your esp32 dev board then have it transmit the data to your smartphone via Bluetooth and wifi, then to a cloud server via a wifi router.
To write your code, search for the official espressif standard development kit written in c. You can also try using Arduino IDE, if you want it easy.
Bonus Nuggets:
Here are some tips that I think you may find helpful along your journey. Although, some of these points may not be comprehensible at the moment until you start carrying out the steps listed in the main article.
- If you have to use c++, reduce your dependency on dynamic variables, and stdlib as much as possible. You can use c++ strings sparingly to reduce stress with c strings if you are just starting out in c/c++, but others like maps, vectors, lists, templates, boost etc. use with caution or stay away from them.
- In embedded systems, try to detach yourself from the framework mindset and reduce your dependency on libraries. Learn to work on projects with low-level abstraction, what this does is it gives you the ability to make some really cool tradeoffs and maximize the use of the limited resources available on a microcontroller. And also, you get to easily transfer the knowledge and experience gotten from programming one platform to another.
- Make eclipse your buddy if you haven’t: eclipse is one of the most used IDE among intermediate and senior firmware engineers.
- After taking the courses in the main roadmap and you feel like going a bit deeper, try out this course on Edx, Embedded Systems — Shape The World: Microcontroller Input/Output. Although it also teaches the basics of embedded systems and IoT, it goes a bit deeper, teaches assembly language, how logic gates are built, adders, latches, flip flops, and so on. With 8–10 hours a week, you can complete this course in 8 weeks
Finally, to be able to build reliable embedded software, you need to be able to understand the concepts listed in this article fundamentally. And remember, patience and determination are necessities.