Right from the moment you wake up to the moment you sleep, you interact with countless number of embedded system devices without even realising it. Your smart TV, your digital watch, your fridge, your washing machine and even the phone you are holding in your palm are all Embedded Systems. With the advent of IOT and AI, the future looks really exciting for Embedded Systems but it also requires an Embedded Systems engineer to acquire skills in seemingly diverse fields.

What is an Embedded System?

According to Wikipedia,

An Embedded System is a computer system—a combination of a computer processor, computer memory, and input/output peripheral devices—that has a dedicated function within a larger mechanical or electrical system.

A typical embedded system will contain a bunch of sensors or actuators, a power supply/battery and a Microcontroller/Microprocessor ,which serves as the brain of the system. Modern embedded systems also have various networking capabilities like bluetooth, Zigbee, WiFi which enable them to communicate with other devices or to the internet. Some good examples of modern embedded systems are drones, Alexa/Google Home voice assistant speakers, Smart locks, Smart TVs, 3D printers, autonomous navigation systems in cars etc .

Skillsets for an Embedded Systems Engineer

To be a good Embedded Systems Engineer you need combined skills of both hardware and software .

Typical skills include

  • Hardware skills: Ability to read and understand schematics, debug PCBs, experience using oscilloscope and other hardware debugging tools. Knowledge of hardware communication protocols like SPI, UART, I2C, I2S etc.

  • Programming language skills: The most essential programming languages to know are C and C++ . Programming with Python and Rust are also gaining popularity these days .

  • Software skills: understanding of embedded system Operating Systems such as RTOS, Linux.

  • Networking skills: Bluetooth, Wifi, Zigbee, Z-wave, LORA etc.

  • Cloud communication skills: IOT message transmission protocols such as MQTT, AMQP .. also working knowledge of REST APIs to upload and download data from the cloud .

  • AI skills: AI on edge will be the next big revolution in the field of Embedded systems so embedded systems engineers with knowledge about Machine learning, OpenCV, TensorFlow etc are highly sought after.

Learning Embedded Systems development

The best way to learn Embedded Systems is to get your hands dirty by getting some hands on experience using some development boards.

Some of the popular development boards are

  • Arduino: One of the easiest ways to get started with your Embedded Systems journey is to buy an Arduino board, these boards are very popular amongst the maker community and there are huge amounts of resources in the form of tutorials and codes are available online. These boards typically consist of an Atmel 8-bit AVR microcontroller (ATmega8, ATmega168, ATmega328, ATmega1280, or ATmega2560) with varying amounts of flash memory, pins, and features.. Arduino boards are programmed using a special language called Processing, which is very similar to C.

  • Espressif’s ESP32 and ESP8266: If you are looking for a WiFi capable microcontroller for your IOT project then Espressif’s ESP32 and ESP8266 are a good choice. These boards can run on RTOS and can be programmed in C/C++ using ESP’s Integrated Development Framework(IDF), these boards are a good choice if you want to learn and experiment with RTOS. You can also program these modules using Arduino IDE . You can check the development boards here .

  • Raspberry Pi: Another popular board used by hobbyists is Raspberry Pi. It has many peripherals such as USB, HDMI, Ethernet, WiFi and a CPU which can run Linux. It’s an ideal board if you wish to do some rapid prototyping. Raspberry Pi runs on a Linux distribution called Raspbian(now its called Raspberry Pi OS) on top of which you can create various applications suiting your use cases . It’s also possible to build and run your own custom Linux using Yocto/Buildroot.

There lies a large community of developers around the boards mentioned above, you can find tutorials and sample codes online for pretty much anything. In future posts I will be posting getting started guides and tutorials to introduce some of the core concepts in embedded systems so stay tuned and happy tinkering!