Even if you may not be an Embedded Systems Engineer or want to be one, I think it's great for all developers to learn a little bit. I'll cover why I think you should learn a bit as well as how to get started.
Why Embedded?
There's so much new technology, and our computers are very complex and fast. There's so much that you can do that it often makes us unsure of what we should do. We can feel "choice overload". Embedded systems is a broad field. But a Microcontroller like the Arduino, STM32, PIC, or ESP32 are far more limited than a modern computer. The type of code you can run is limited. The peripherals are limited. The speed is limited. There is a lot less choice. It takes you back to an earlier time when developers had to work with the limited memory and CPU speed that they had. Constraints are seen as bad, but sometimes those constraints are what allow creative solutions to arise. You begin to master that environment and write creative solutions to accommodate it. You no longer think to throw more compute power at the problem. You begin to write more efficient code.
Another reason to learn it is to understand how computers work under the hood. When I learned about how a DMA controller can move data between two memory locations (disk and RAM, or Network Interface Card and RAM) I understood how a computer could load a file from disk into memory without freezing your CPU on that task. Or when I created a recording device and a speaker I understood how computers can process digital signals and turn them into analog signals to be played on a speaker. Or how they can process incoming data from the microphone and and then transfer that data to an SD card. It's quite amazing how simple a lot of devices are. Devices or peripherals do two things: take in data (input) and give back data (output). They can also be called I/O devices. Embedded systems allows you to learn about these and understand and appreciate the abstraction provided by your operating system that makes it easy for you to interact with them.
How to learn?
Embedded can seem intimidating since it's not entirely software but there's actual hardware involved. The circuitry you'll need to learn isn't too complicated. If you understand Ohm's law, and know how to use basic components like resistors and capacitors you should be good. Over time you can start to learn more, but for now that'll do. It does make it much easier if you have a multimeter and oscilloscope (but again for a beginner you can get away with not using them).
Pick an easy microcontroller to start out with like the Arduino. You can make really basic projects, and what you want to do is use the on chip peripherals as well as external devices with the goal of making usable projects. For example you can use the in-built ADC peripheral (analog to digital converter) to take in data from an external temperature sensor. The temperature sensor will have an analog voltage value (from 0 to 3.3v) and your chip can read that on a specific pin and then convert it to a digital value you can read. Then you can connect a tiny external OLED screen like the SSD1306 and display the value on the screen. You've just created a thermometer!
You can use motors to make the MCU move, and maybe create a remote control with a RF (radio frequency) transmitter and receiver. The transmitter can be used to send data and the receiver will be attached to the microcontroller and read any incoming commands.
As you do these kinds of projects you'll begin to understand how hardware and software can work together and even begin to move on to other microcontrollers. The STM32 is more difficult to use but if you are very interested in diving deeper under the hood then you can explore that next. The ESP32 is a bit simpler and also great because of its in built wifi capabilities. So that's also something you can explore after the Arduino.
Thanks for reading!
Check out my free site coderacer to improve your code typing speed in 10 different languages! No sign up required to play!

Top comments (0)