3 min read
Introduction to Embedded Systems
A practical starting point for embedded systems: setting up the environment, choosing hardware, and learning by building.

Introduction

Embedded systems are everywhere. This post documents my experience getting started with them through personal projects. Nothing professional, just hands-on exploration.

Setting up the environment

Working with embedded systems requires both hardware and software. Here is what I use.

Software

There are many options. These are the ones I prefer.

Arduino IDE

The simplest and most complete option is the Arduino IDE. It comes with built-in access to the Arduino Library Repository, which makes installing libraries straightforward.

It also includes a Serial Monitor, which lets you read the board’s output or send inputs to it. You need to set the correct baud rate to match what the sketch uses, or the output will be garbled.

CLI setup

For terminal users, Arduino provides the Arduino CLI, which covers most of what the IDE does.

The team also maintains the Arduino Language Server for Neovim, installable via Mason.

For a serial monitor in this setup, PuTTY works well. It has a GUI, but also supports CLI usage. The official documentation covers the command-line options.

Hardware

If software options are many, hardware options are far more. A few items show up in almost every project.

Common materials

  • Cables
  • Breadboards
  • Sensors
  • Microcontrollers

Microcontrollers

Several microcontrollers pack a lot of features at low cost:

  • ESP32
  • Arduino (Uno, Nano, Mega)
  • STM32
  • Raspberry Pi Zero

Each has different strengths. The right choice depends on the project requirements: connectivity, processing power, power consumption, and available pins all vary significantly.

Learning by building

As with most programming areas, the fastest way to learn is by building things. IoT projects work well for this: you get immediate, physical feedback. Some directions worth exploring:

  • LoRa modules for long-range, low-power communication
  • MQTT or CoAP for lightweight messaging between devices
  • RTOS (Real-Time Operating System) concepts, useful for projects that need precise timing or concurrent tasks, and require no extra hardware to get started

Resources

A few resources that I found genuinely useful when starting out:

Related Content

esc close

Keyboard Shortcuts

Global Shortcuts

Open command palette
⌘K or Ctrl+K
Go to Projects
g then p
Go to Work
g then w
Go to Blog
g then b
Go to Home
g then h
Show keyboard shortcuts ?

Navigation Shortcuts

Scroll down j
Scroll up k
Jump to top gg
Jump to bottom G
Go back h
Go forward l
Jump to prev section [
Jump to next section ]

Palette Shortcuts

Quick select result 1-9
Navigate results ↑↓
Select result
Close palette Esc

Tips

  • Global shortcuts work from anywhere on the site
  • Press g twice quickly for chord shortcuts
  • Number shortcuts (1-9) only appear for the first 9 results
  • Chord shortcuts show a visual indicator in the bottom right
  • Navigation shortcuts (j/k/[/]) don't work when typing in input fields