IoT Firmware Development with ESP32 and ESP-IDF

IoT firmware development with ESP32 and ESP-IDF

Build Real IoT Devices. Master the Toolchain. Get Certified.

Unlock the full potential of the ESP32 by learning how to write production-grade firmware using the ESP-IDF (Espressif IoT Development Framework). Whether you’re an aspiring embedded engineer or a professional looking to deepen your skills, this hands-on course will take you from setup to deployment using the tools and techniques used in real-world IoT systems.

This course is proudly sponsored by DigiKey, the leading global electronic components and automation products distributor. We’re grateful for their support in making this course possible.

DigiKey is also our recommended hardware provider for all components used in the course, making it easy for you to get exactly what you need to build and test your projects.

Why ESP32?

The ESP32 is a powerful, low-cost microcontroller with built-in Wi-Fi and Bluetooth, making it ideal for modern IoT applications. Loved by engineers and hobbyists, it strikes a perfect balance between performance and price. It is capable of handling real-time tasks, network communication, and complex peripherals, all from a single chip. Whether you’re prototyping a smart sensor or building a connected product, the ESP32 is a go-to choice in the embedded world.

Why ESP-IDF?

While many get started with the ESP32 using the Arduino framework, professionals often turn to ESP-IDF, Espressif’s official development framework. ESP-IDF gives you deeper control over the hardware, better performance, and access to production-ready features like secure networking, RTOS integration, and custom partitioning. Learning ESP-IDF is the next step for anyone ready to move beyond Arduino and start developing real-world, scalable IoT firmware.

What You Will Learn

  • Set up the ESP-IDF toolchain and build your first project
  • Use QEMU to emulate hardware when devices aren’t on hand
  • Configure and debug projects with CMake, Kconfig, and GDB
  • Work with I2C, Wi-Fi, and Ethernet peripherals
  • Send data over the network with HTTP, HTTPS, MQTT, and MQTTS
  • Use ThingsBoard and Mosquitto to visualize and manage device data
  • Understand TLS, certificates, and cloud security best practices
  • Build a full project: connect a temperature sensor and stream its data securely to the cloud

What is Included

This self-paced course includes a mix of video lessons, written content, hands-on coding, and a final project. Here is a breakdown of the estimated times for the various content:

Total: about 13 hours

  • Video lessons (6.5 hours): In-depth walkthroughs of concepts, code, and demos
  • Written Articles (2 hours): Supplementary explanations and reference code
  • Hands-on projects (4 hours): Test your knowledge by writing real code
  • Quizzes (30 minutes): Demonstrate your understanding of the concepts

Want a sneak peek at the projects? You can find all of the code demonstrated in the course in this GitHub repository for free! 

Upon completing all parts of the course, you will earn a Certificate of Completion to show off your hard-earned skills.

You will have lifetime access, so you can go at your own pace and revisit material any time.

Prerequisites

Level: Intermediate

This course is designed for learners who already have some experience with embedded systems and basic networking. To get the most out of this course, you should be comfortable with:

  • Writing and uploading code to a microcontroller (e.g., Arduino, ESP32, STM32)
  • Reading data from digital or I2C sensors
  • Basic C or C++ programming
  • Using the command line (Linux, macOS, or WSL on Windows)
  • Understanding what HTTP is and how GET/POST requests work
  • Installing software and troubleshooting basic development environment issues
  • Some familiarity with Docker is suggested but not required

If you have built a few simple embedded projects and are ready to move beyond the Arduino IDE, this course is for you.

Required Hardware

To complete the course, we recommend the following:

  • An ESP32 development board
  • A TMP102 temperature sensor
  • A few accessories (e.g., USB cable, breadboard, jumper wires)

The full hardware list with recommended vendor links will be provided in the course.

Note that real hardware is not required! You can complete the entire course using the QEMU emulator. We demonstrate code on real hardware and QEMU throughout the course.

Community and Support

Have questions or need help along the way? Enrolled students get access to a private course forum, where you can ask questions, get feedback, and connect with others learning IoT with ESP32 and ESP-IDF.

Curious about the course or Learn Embedded Dev in general? You’re welcome to join our public community forum. It is free for anyone to browse, register, and participate.

Satisfaction Guarantee

We stand behind the quality of this course.

If you’re not satisfied for any reason, you can request a full refund within 30 days of purchase as long as you have not received the certificate of completion.

Just send us a message and we’ll take care of it!

Course Content

IoT Firmware Development with ESP32 and ESP-IDF
Welcome
6 Topics
Course Overview
Code of Conduct
Getting Help
Required Hardware
Hardware Setup
Introduce Yourself
Getting Started with ESP-IDF
5 Topics
1 Quiz
Setting Up ESP-IDF with Docker
Creating the Blinky App
Flashing the Blinky App to ESP32 Hardware
Running the Blinky App with QEMU
Written Guide for Setting Up ESP-IDF
Quiz: ESP-IDF Overview
How to Use CMake
2 Topics
1 Quiz
CMake Primer
CMake with ESP-IDF
Quiz: CMake Overview
How to Use Kconfig
5 Topics
1 Quiz
Create the Debug Logging Demo App
How to Use Menuconfig
Using Sdkconfig Defaults
Kconfig Custom Symbols
Using Custom Kconfig Symbol
Quiz: Kconfig Overview
Debugging with GDB
2 Topics
Debugging with GDB and QEMU
Debugging with GDB and OpenOCD
Reading from an I2C Sensor
4 Topics
1 Quiz
Overview of Reading from an I2C TMP102 Temperature Sensor
Reading from a TMP102 Temperature Sensor with ESP-IDF
Flashing App to Hardware and Testing the TMP102
Testing the TMP105 with QEMU
Quiz: Reading from an I2C Sensor
Project: I2C Temperature Sensor
1 Topic
1 Quiz
Project Description
Project Submission: I2C Temperature Sensor
Writing a WiFi Driver
4 Topics
1 Quiz
WiFi Station Driver Interface
WiFi Station Driver Code
Creating an ESP-IDF Component From the WiFi Driver
Demo Application to Test the WiFi Driver
Quiz: Writing a WiFi Driver
QEMU Ethernet Driver
1 Topic
Writing a Virtual Ethernet Driver
Network Wrapper
1 Topic
Writing the Network Wrapper Component
HTTP GET Demo
4 Topics
1 Quiz
Overview of HTTP
HTTP GET Demo Application
Flashing HTTP Demo App to Real Hardware
Testing HTTP Demo App with QEMU
Quiz: HTTP GET Demo
HTTP REST with ThingsBoard
4 Topics
1 Quiz
Overview of ThingsBoard
HTTP REST Demo App with ThingsBoard
Flash and Test HTTP REST Demo App
Test HTTP REST Demo App with QEMU
Quiz: HTTP REST with ThingsBoard
Secure Sockets Layer (SSL) and Transport Layer Security (TLS)
4 Topics
1 Quiz
Purpose and History of SSL/TLS
SSL/TLS Digital Certificates
TLS v1.2 Handshake
TLS v1.3 Handshake
Quiz: SSL and TLS
HTTPS GET Demo with Mbed TLS
5 Topics
1 Quiz
Mbed TLS Initialization
HTTPS GET with Mbed TLS
HTTPS GET Application
Flashing HTTPS GET Demo to Real Hardware
Testing HTTPS GET Demo with QEMU
Quiz: HTTPS GET Demo with Mbed TLS
Message Queuing Telemetry Transport (MQTT)
3 Topics
1 Quiz
MQTT Overview
Retained Messages and Last Will and Testament (LWT)
MQTT 5 Updates
Quiz: Message Queuing Telemetry Transport (MQTT)
MQTT with ThingsBoard
5 Topics
1 Quiz
Overview of ThingsBoard with MQTT
MQTT Event Handler
MQTT with ThingsBoard Main Application
Flashing MQTT with ThingsBoard Demo to Real Hardware
Testing MQTT with ThingsBoard Demo with QEMU
Quiz: MQTT with ThingsBoard
How to Set Up the Mosquitto MQTT Broker
3 Topics
1 Quiz
Install and Configure Mosquitto
Configure Mosquitto with TLS
Test Mosquitto with MQTTX
Quiz: Mosquitto MQTT Broker
MQTTS with Mosquitto
4 Topics
1 Quiz
Configure Mosquitto for MQTTS
Write MQTTS Demo Application
Flashing MQTTS Demo to Real Hardware
Testing MQTTS Demo with QEMU
Quiz: MQTTS with Mosquitto
Project: MQTTS with I2C Temperature Reading
1 Topic
1 Quiz
Project Description
Project Submission: MQTTS with I2C Temperature Reading
Final Test
1 Quiz
Final Test