We may earn an affiliate commission when you visit our partners.
Kevin Aguilar

General Description & Background Information:

In this course, we'll develop a feature rich WiFi based application using the ESP-IDF (Espressif IoT Development Framework), Integrate an ESP-IDF Components & Sensors Library and configure the ESP32 to connect to AWS IoT and Publish/Subscribe messages via AWS IoT Core using the MQTT protocol.

WiFi is commonly incorporated into many IoT and Industrial IoT solutions and is the basis of the application developed in this course which enables AWS IoT cloud connectivity (or any compatible cloud framework that you choose).

Read more

General Description & Background Information:

In this course, we'll develop a feature rich WiFi based application using the ESP-IDF (Espressif IoT Development Framework), Integrate an ESP-IDF Components & Sensors Library and configure the ESP32 to connect to AWS IoT and Publish/Subscribe messages via AWS IoT Core using the MQTT protocol.

WiFi is commonly incorporated into many IoT and Industrial IoT solutions and is the basis of the application developed in this course which enables AWS IoT cloud connectivity (or any compatible cloud framework that you choose).

The ESP32 is a series of low-cost, low-power, SoC (system on a chip) series of microcontrollers with integrated WiFi and dual-mode Bluetooth. The ESP-IDF is Espressif's official IoT Development Framework for the ESP32. It provides a self-sufficient SDK (software development kit) for any generic application development, using programming languages such as C and C++. ESP-IDF currently powers millions of devices in the field, and enables building a variety of network-connected products, ranging from simple light bulbs and toys, to big appliances and industrial devices.

The ESP-IDF runs FreeRTOS, which is widely used in embedded systems, so the techniques and knowledge you gain while developing IDF-based applications for the ESP32 will translate well should you use other MCUs running FreeRTOS. Additionally, the FreeRTOS kernel of the ESP-IDF is modified for multicore support and we will utilize both cores of the ESP32 in this course.

If you are interested in working with the ESP32 and are serious about improving your embedded software development skills while getting to know this incredible SoC, then harnessing the capabilities of the ESP-IDF directly, is an excellent way to go.

The IDF is well designed, and once you get going, implementing new features becomes a breeze. Further, any new updates, bugfixes, or changes to the ESP-IDF can be immediately available to you in a flexible way without having to wait for the Arduino port to be written.

About the Course:

For many, the best way to learn is to start with a project, which is why in this course, I have created a robust WiFi based application that is able to connect to a cloud framework (AWS IoT in this case), as a learning tool - as opposed to demonstrating tiny examples that you could easily find online.

The intended outcome of this course, is that you become comfortable developing applications using the ESP-IDF, gain insight from the application code, inspiration for your own projects and ultimately, save you time in learning to use various components of the ESP-IDF.

By working through this project, programming step-by-step through each lesson, I'm confident that you will feel comfortable developing an extensible WiFi based application and integrating a cloud framework using the ESP-IDF, or any application using the ESP-IDF, as it will become apparent how to create a plan of action when using Espressif's IoT Development Framework -> utilizing the Espressif documentation, looking up the API reference and relevant functions, and applying what makes sense to accomplish your goals.

Furthermore, in this course we will not focus on theory as this is a practical application programming course where you learn by doing. However, I will briefly present background information about the ESP-IDF application programming interface that applies to each section and a brief overview of the application requirements for each section. These overviews will describe what will be accomplished and how we are going to accomplish it using the ESP-IDF.

Lastly, I have chosen to develop this project utilizing the ESP-IDF Eclipse Plugin (or Espressif IDE), which is available for Windows, MacOS, and Linux, and provides an all-in-one installation that includes the Eclipse IDE, and all prerequisites required for ESP32 development; enabling us to get started with programming, flashing and monitoring the ESP32 directly after installing. The setup process is quite easy and efficient, especially for Windows users... 

Other Noteworthy Highlights:

Modular programming style used.

Utilize both cores of the ESP32 and create tasks using xTaskCreatePinnedToCore.

Use FreeRTOS message queues for inter-task communication.

And, FreeRTOS binary semaphore for signalization from an interrupt service routine (ISR).

State machine in WiFi application allows for future growth and customization.

Use Non-Volatile storage for saving and loading WiFi credentials for connecting the ESP32.

Learn an efficient workflow for developing an HTTP server and web page.

Learn how to implement an OTA (over the air) firmware update over the WLAN by sending the update file via a web page to the ESP32.

Learn how to integrate a cloud framework - we will integrate the

Learn how to publish data (e.g., temperature, humidity and WiFi  RSSI) from the ESP32 to AWS IoT using the MQTT protocol.

Learn how to subscribe & publish data to and from the AWS Dashboard.

Learn how to integrate an ESP-IDF Components & Sensors Library.

Hardware:

- ESP32 DevKit

- RGB LED and Resistors

- DHT22 Sensor or any sensor(s) from the ESP-IDF Components & Sensors Library

- Jumper Wires

- Breadboard

Software:

- ESP-IDF Eclipse (Espressif IDE)

We'll use Google Chrome for testing the web page functionality

Enroll now

What's inside

Learning objectives

  • How to develop wifi based applications on the esp32 using the esp-idf
  • Integrate a components & sensors library, allowing for easy integration of sensors and other components to your projects
  • Configure esp aws iot on the esp32 to enable aws iot cloud connectivity
  • Publish/subscribe aws iot core mqtt messages and test using the mqtt test client
  • Quickly and easily set up esp-idf (espressif iot development framework) projects using the eclipse-based espressif ide
  • Develop extensible, modular applications on the esp32 using the esp-idf
  • Develop an application with wifi, http server, web page, non-volatile storage, ota firmware updates, sntp time synchronization, rgb led, button with interrupt
  • Utilize freertos for task management and intertask communication
  • How to build, flash and monitor the application all within the idf version of eclipse
  • How to develop a simple web page for displaying data, connecting the esp32 to an access point, disconnect the esp32, upload new firmware (ota update) and more
  • You will learn how to utilize freertos primitives, such as message queues, event groups, and semaphores
  • Learn how to develop and extend a web page using .html, javascript and css and develop an http server to support web page functionality
  • By the end of the course, you will feel confident in developing an extensible wifi based application using the esp-idf
  • Show more
  • Show less

Syllabus

Introduction
Detailed Course Introduction
Hardware & Software Requirements
Course Structure
Read more
Espressif Hardware: ESP32 DevKits
ESP32 DevKits
Development Environment Setup, and ESP-IDF Build System & CMake Overview
Eclipse (Espressif IDE) Installation
ESP-IDF Build System & CMake Overview
Eclipse Project Template Setup
Supplemental Lessons
ESP-IDF Example Projects
ESP-IDF FreeRTOS
ESP-IDF Error Handling
Embedded C Coding Style
Components & Sensors Library (Optional)
Components & Sensors Library Overview
Components & Sensors Library Integration and BME 680 Example
Course Source Code
Git Repository
RGB Application Status LED
RGB LED Implementation Overview
RGB LED Programming
We'll set up the WiFi Application in this section
WiFi Implementation Overview
WiFi Application Programming Part I
WiFi Application Programming Part II
WiFi Application Programming Part III
WiFi Application Testing
We'll set up the HTTP server in this section
HTTP Server Implementation Overview
HTTP Server Increasing Partition Sizes (ESP-IDF version 5 & above)
HTTP Server Programming Part I
HTTP Server Programming Part II
HTTP Server Programming Part III
HTTP Server Programming Part IV
OTA Firmware Update
OTA Firmware Update Implementation Overview
OTA Firmware Update Programming Part I
OTA Firmware Update Programming Part II
OTA Firmware Update Testing
DHT22 Sensor
DHT22 Sensor Implementation Overview
DHT22 Sensor Programming Part I
DHT22 Sensor Programming Part II
WiFi Connect Implementation
WiFi Connect Implementation Overview
WiFi Connect Programming Part I
WiFi Connect Programming Part II
WiFi Connect Programming Part III
Displaying WiFi Connection Information on the Web Page
Displaying WiFi Connection Information: Web Page Programming
Displaying WiFi Connection Information: HTTP Server Programming
WiFi Disconnect Button
WiFi Disconnect Button Programming
Non-Volatile Storage (NVS)
Non-Volatile Storage (NVS) Implementation Overview
Non-Volatile Storage (NVS) Programming Part I
Non-Volatile Storage (NVS) Programming Part II
Button with Interrupt & Semaphore
WiFi Reset Button Overview
WiFi Reset Button Programming
SNTP Time Synchronization
SNTP Time Synchronization Overview
SNTP Time Synchronization Programming Part I
SNTP Time Synchronization Programming Part II
SNTP Time Synchronization Programming Part III
Displaying the ESP32's Access Point SSID on the Web Page
Displaying AP SSID Programming
AWS IoT
AWS IoT Implementation Overview
AWS IoT Technical Supplement: MQTT, mTLS, AWS Security & Policies, and JSON
AWS IoT Configuration & MQTT Subscribe/Publish Example
AWS IoT MQTT Publish/Subscribe Example Code Review & Update
AWS IoT Using the Updated SDK MQTT Example

Good to know

Know what's good
, what to watch for
, and possible dealbreakers
Uses the ESP-IDF, which is Espressif's official IoT Development Framework for the ESP32, making it highly relevant for embedded systems development
Covers AWS IoT cloud connectivity using the MQTT protocol, which is a standard for IoT communication and data exchange with cloud services
Employs FreeRTOS, a real-time operating system widely used in embedded systems, ensuring that skills learned are transferable to other microcontroller platforms
Requires specific hardware components like the ESP32 DevKit, RGB LED, DHT22 sensor, and others, which may require additional purchases beyond a standard computer setup
Utilizes the ESP-IDF Eclipse Plugin (Espressif IDE), which provides an all-in-one installation, streamlining the setup process for ESP32 development across different operating systems
Focuses on practical application programming rather than theory, which may not suit learners who prefer a more theoretical or academic approach to learning

Save this course

Save IoT Application Development with the ESP32 Using the ESP-IDF to your list so you can find it easily later:
Save

Activities

Be better prepared before your course. Deepen your understanding during and after it. Supplement your coursework and achieve mastery of the topics covered in IoT Application Development with the ESP32 Using the ESP-IDF with these activities:
Review Embedded C Concepts
Strengthen your understanding of C programming concepts commonly used in embedded systems development, which is essential for working with the ESP-IDF.
Show steps
  • Review pointers, memory management, and data structures.
  • Practice writing C code for resource-constrained environments.
  • Study common embedded C design patterns.
Brush Up on FreeRTOS Fundamentals
Revisit the core concepts of FreeRTOS, including task management, inter-task communication, and synchronization, to prepare for the course's use of FreeRTOS on the ESP32.
Browse courses on FreeRTOS
Show steps
  • Review task creation, scheduling, and deletion.
  • Study message queues, semaphores, and mutexes.
  • Understand real-time operating system principles.
Read 'Designing Embedded Systems with Arduino'
Review the basics of embedded systems using Arduino to solidify your understanding of hardware interaction and programming.
Show steps
  • Read the chapters on basic electronics and microcontroller programming.
  • Experiment with Arduino example code to control LEDs and sensors.
Four other activities
Expand to see all activities and additional details
Show all seven activities
Read 'Mastering the FreeRTOS Real-Time Kernel'
Gain a deeper understanding of FreeRTOS, which is used extensively in the ESP-IDF for task management and inter-task communication.
Show steps
  • Read the chapters related to task management and synchronization.
  • Experiment with the FreeRTOS API using example code.
Blink an LED with ESP-IDF
Familiarize yourself with the ESP-IDF build system and basic hardware control by creating a simple 'Blink LED' project.
Show steps
  • Set up the ESP-IDF development environment.
  • Create a new project and configure the LED pin.
  • Write code to toggle the LED on and off.
  • Build, flash, and monitor the application.
Document Your ESP32 Project
Improve your understanding and retention by documenting your ESP32 project, including code comments, diagrams, and explanations of key concepts.
Show steps
  • Write detailed comments for each function and code block.
  • Create diagrams to illustrate the system architecture and data flow.
  • Explain the purpose and functionality of each component.
  • Organize the documentation in a clear and concise manner.
Contribute to an ESP-IDF Project
Deepen your knowledge and contribute to the ESP32 community by contributing to an open-source ESP-IDF project.
Show steps
  • Find an ESP-IDF project on GitHub or GitLab.
  • Identify a bug or feature to work on.
  • Fork the repository and create a new branch.
  • Implement the fix or feature and submit a pull request.

Career center

Learners who complete IoT Application Development with the ESP32 Using the ESP-IDF will develop knowledge and skills that may be useful to these careers:
Embedded Systems Engineer
An Embedded Systems Engineer designs, develops, and tests software and hardware for embedded systems. This course, with its focus on the ESP32 microcontroller and the ESP-IDF, directly helps one become proficient with practical embedded development and prepares the student for the real-world challenges of embedded systems. The course covers key techniques in inter-task communication with FreeRTOS, utilizing both cores of the ESP32, and integrates sensors, offering hands-on experience for an aspiring embedded systems engineer.
IoT Engineer
An IoT Engineer designs, develops, and implements Internet of Things solutions. This course provides a strong foundation in IoT application development. The course's focus on WiFi, cloud connectivity with AWS IoT, and the MQTT protocol makes it well-suited for a prospective IoT engineer. By learning to send data to the cloud, integrate sensor data, perform over-the-air updates, and work with a real-world project, a student who takes this course is well prepared to design and build IoT devices and systems.
Firmware Engineer
A Firmware Engineer develops low-level code that allows hardware to function, often for embedded systems. The hands on approach to working with the ESP32 microcontroller using the ESP-IDF and FreeRTOS is highly beneficial for this role. The course teaches practical skills such as creating tasks, utilizing message queues, working with sensors and performing over-the-air updates. Skills gained in the course are directly applicable to developing firmware for a variety of devices.
Software Developer
A Software Developer writes code for computer applications or systems. This course may be useful for a software developer looking to gain experience in embedded systems. The course provides an in-depth understanding of the ESP-IDF, FreeRTOS, and how to build and program an application for the ESP32 microcontroller. It also covers practical elements like working with WiFi, HTTP servers, and cloud connectivity that can be useful for software development.
Robotics Engineer
A Robotics Engineer designs and builds robots, working with both hardware and software. This course may be useful for a robotics engineer as it teaches the foundations of embedded systems with the ESP32 microcontroller. The hands-on approach in the course, using the ESP-IDF and FreeRTOS, provides experience with real-world embedded software and hardware, which provides the foundation of robot's control systems. The course provides familiarity with sensors, networking, and control which are important in robotics engineering.
Hardware Engineer
A Hardware Engineer designs and develops physical components of electronic devices. While this role is distinct from software development, understanding how hardware interacts with software is still essential. This course helps a hardware engineer learn how an embedded system comes to life and how software instructions can be used to modify hardware behavior. A deep undertanding of the firmware that drives hardware can help lead to success within a hardware engineering role; this course provides one with practical, hands-on experience.
Research and Development Engineer
A Research and Development Engineer explores new technologies and creates innovative solutions. This course may be helpful to a research and development engineer. The course provides hands-on experience with the ESP32 microcontroller and the ESP-IDF, as well as introducing various sensors and cloud connectivity. By learning how to implement practical applications that include Wifi, HTTP servers, and OTA updates, the research and development engineer will gain skill in practical embedded systems, which may be valuable to their research.
Applications Engineer
An Applications Engineer works with clients to understand their needs, then translates these needs into practical solutions. This course may be valuable to an applications engineer, as it provides the skills to build practical embedded systems and IoT applications. The course teaches how to build a modular application that incorporates a WiFi connection, cloud connectivity, HTTP servers, and over the air updates. A hands-on course like this one helps an engineer better understand the implementation of solutions.
Test Engineer
A Test Engineer is responsible for creating and executing tests to ensure the quality of software or hardware. This course may be valuable for a test engineer who wants a deeper understanding of embedded systems and how to test them. The course provides an in-depth review of the ESP-IDF, FreeRTOS, and how to build and program embedded applications and it focuses on testing the functionality of the ESP32 by flashing new firmware and running diagnostic tests, which is directly applicable to testing embedded systems.
Automation Engineer
An Automation Engineer designs and develops automated systems and processes using various technologies. This course may be helpful for an automation engineer as it provides practical knowledge of embedded systems. The course provides insight into how to use sensors, microcontrollers, and cloud platforms to collect and send data. Understanding how to implement a connected embedded system is an important skill for an automation engineer as automated systems often rely on this technology.
Cloud Engineer
A Cloud Engineer designs and manages cloud computing infrastructure and services. This course may be helpful for a cloud engineer by illustrating how IoT devices connect to and communicate with cloud platforms, specifically AWS IoT. The course develops familiarity with MQTT protocol, data publishing, and subscribing, and provides a useful perspective to any cloud engineer who wishes to understand how endpoint devices interact with their infrastructure. Understanding the perspective of edge devices may provide value to cloud engineers.
Network Engineer
A Network Engineer designs, implements, and manages computer networks. This course may be useful for network engineers because it provides insight into how IoT devices connect to networks through WiFi. This course provides practical, hands-on experience developing a WiFi-based application, while learning how devices connect, manage data and communicate. This practical knowledge may help the network engineer design and manage networks that are robust and can support IoT devices.
Systems Analyst
A Systems Analyst examines and evaluates computer systems, and identifies opportunities for improvement. This course may be useful for a systems analyst because it offers exposure to embedded systems and IoT devices. While the focus is on development, the practical aspects and hands-on experience gained from making real-world projects may provide the systems analyst with a better understanding of how these systems work. This knowledge allows the analyst to make informed decisions and recommendations.
Technical Consultant
A Technical Consultant advises clients on technology-related decisions and solutions. This course may be helpful for a technical consultant who provides expertise in embedded systems or IoT technologies. The course provides practical knowledge of these areas, including the ESP32 microcontroller, FreeRTOS, and cloud connectivity, as well as an understanding of real-world implementation. This helps the technical consultant better understand the applications, possibilities, and limitations of this technology.
Technical Project Manager
A Technical Project Manager oversees and manages technical projects from inception to completion. This course may be useful for a technical project manager because it offers insights into the development processes of embedded systems and IoT products. Technical project managers benefit from an understanding of the practical challenges and opportunities involved in projects, and this course provides just that. The material in the course can enhance project management and decision making.

Reading list

We've selected two books that we think will supplement your learning. Use these to develop background knowledge, enrich your coursework, and gain a deeper understanding of the topics covered in IoT Application Development with the ESP32 Using the ESP-IDF.
Provides a comprehensive guide to FreeRTOS, covering its architecture, features, and usage in embedded systems. It is particularly useful for understanding the FreeRTOS kernel used within the ESP-IDF. This book valuable reference for understanding the underlying operating system and how to effectively utilize its features for task management and inter-process communication. It is commonly used by both hobbyists and industry professionals.
While this course focuses on ESP-IDF, this book provides a gentler introduction to embedded systems concepts using the Arduino platform. It can be helpful for those new to embedded programming to grasp fundamental principles before diving into the more complex ESP-IDF. is more valuable as additional reading to provide background knowledge. It is commonly used as a textbook at academic institutions.

Share

Help others find this course page by sharing it with your friends and followers:

Similar courses

Similar courses are unavailable at this time. Please try again later.
Our mission

OpenCourser helps millions of learners each year. People visit us to learn workspace skills, ace their exams, and nurture their curiosity.

Our extensive catalog contains over 50,000 courses and twice as many books. Browse by search, by topic, or even by career interests. We'll match you to the right resources quickly.

Find this site helpful? Tell a friend about us.

Affiliate disclosure

We're supported by our community of learners. When you purchase or subscribe to courses and programs or purchase books, we may earn a commission from our partners.

Your purchases help us maintain our catalog and keep our servers humming without ads.

Thank you for supporting OpenCourser.

© 2016 - 2025 OpenCourser