|
| 1 | +--- |
| 2 | +title: "ESP-IDF Advanced Workshop" |
| 3 | +date: "2025-08-05" |
| 4 | +series: ["WS00B"] |
| 5 | +series_order: 1 |
| 6 | +showAuthor: false |
| 7 | +summary: "This workshop is about advanced features of ESP-IDF and focuses on modular development, event loops, core dumps, size analysis and flash encryption." |
| 8 | + |
| 9 | +--- |
| 10 | + |
| 11 | +Welcome to Espressif's Advanced ESP-IDF Workshop! |
| 12 | + |
| 13 | +## Introduction |
| 14 | + |
| 15 | +In this hands-on workshop, you'll develop a solid understanding of the ESP-IDF framework, included modular development via components, event loops, core dumps, and security features. |
| 16 | + |
| 17 | +{{< alert icon="circle-info" cardColor="#b3e0f2" iconColor="#04a5e5">}} |
| 18 | +Estimated time: 3 hours. |
| 19 | +{{< /alert >}} |
| 20 | + |
| 21 | +## Agenda |
| 22 | + |
| 23 | +The workshop is structured into four parts. Here's the outline: |
| 24 | + |
| 25 | +* Part 1: **Components** |
| 26 | + |
| 27 | + * Lecture 1 -- What is a component, how to create it, and how to support multiple hardware versions via BSPs and multi-config |
| 28 | + * Assignment 1.1 -- Refactor the code creating the alarm component |
| 29 | + * Assignment 1.2 -- Refactor the code creating the `cloud_manager` component |
| 30 | + * Assignment 1.3 -- Multiple configuration using `sdkconfig` |
| 31 | + |
| 32 | +* Part 2: **Event Loops** |
| 33 | + |
| 34 | + * Lecture 2 -- Event loop basics in ESP-IDF, using timer events, and separation of concerns |
| 35 | + * Assignment 2.1 -- Refactor the code to use the event loop mechanism |
| 36 | + * Assignment 2.2 -- Add a gpio event to the event loop |
| 37 | + |
| 38 | +* **Break** (15 minutes) |
| 39 | + |
| 40 | +* Part 3: **Performance and crash analysis** |
| 41 | + |
| 42 | + * Lecture 3 -- Application size analysis and core dumps |
| 43 | + * Assignment 3.1 -- Analyze application size and suggest optimizations |
| 44 | + * Assignment 3.2 -- Analyze a crash using core dumps (guided) |
| 45 | + * Assignment 3.3 -- Analyze a crash using core dumps (optional) |
| 46 | + |
| 47 | +* Part 4: **OTA and Security Features** |
| 48 | + |
| 49 | + * Lecture 4 -- OTA fundamentals, partition table configuration, secure bootloader, flash encryption |
| 50 | + * Assignment 4.1 -- Modify the partition table to support OTA |
| 51 | + * Assignment 4.2 -- Use a custom partition table |
| 52 | + * Assignment 4.3 -- Enable flash encryption |
| 53 | + <!-- * Assignment 4.4 -- Secure bootloader (optional - TBD) --> |
| 54 | + |
| 55 | +## Prerequisites |
| 56 | + |
| 57 | +To follow this workshop, make sure you meet the prerequisites listed below. |
| 58 | + |
| 59 | +* Good knowledge of: |
| 60 | + |
| 61 | + * C programming and its linker |
| 62 | + * Call back functions and function pointers |
| 63 | + * MQTT protocol and usage |
| 64 | + |
| 65 | +* Embedded programming |
| 66 | + |
| 67 | + * Flashing / Programming, linking |
| 68 | + * Familiarity with MCU peripherals such as GPIO and I2C |
| 69 | + * Basic experience with ESP-IDF |
| 70 | +* Tools installation (VSCode + ESP-IDF extension) |
| 71 | + |
| 72 | +> We strongly recommend installing VSCode and the ESP-IDF plugin before the workshop begins. If you run into any issues, there will be some time during the first assignment to complete the installation. |
| 73 | +
|
| 74 | + |
| 75 | +## Reference Table |
| 76 | + |
| 77 | +| Prerequisite | Description | Reference | |
| 78 | +| ---------------------- | --------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | |
| 79 | +| MCU memory types | Difference between Flash, RAM and EEPROM | [L. Harvie (Medium)](https://medium.com/@lanceharvieruntime/embedded-systems-memory-types-flash-vs-sram-vs-eeprom-93d0eed09086) | |
| 80 | +| PSRAM | What is PSRAM | [M. Hawthorne (Technipages)](https://www.technipages.com/what-is-psdram-pseudo-static-ram/) | |
| 81 | +| MCU serial peripherals | Difference between SPI, I2C, UART | [nextpcb.com](https://www.nextpcb.com/blog/spi-i2c-uart) | |
| 82 | +| ESP-IDF VSCode Plugin | Espressif official VSCode Extension | [vscode-esp-idf-extension installation](https://github.com/espressif/vscode-esp-idf-extension?tab=readme-ov-file#how-to-use) | |
| 83 | +| Partition table | What is partition table and why it's useful| [Wikipedia disk partitioning article](https://en.wikipedia.org/wiki/Disk_partitioning) |
| 84 | + |
| 85 | +<!-- | YAML | Human-readable data serialization format used for dependency management through `idf_component.yml` | [Wikipedia](https://en.wikipedia.org/wiki/YAML), [datacamp.com](https://www.datacamp.com/blog/what-is-yaml) | --> |
| 86 | + |
| 87 | + |
| 88 | +## Workshop |
| 89 | + |
| 90 | +Without further delay, let’s get started! You’ll find links to each part of the workshop below. |
| 91 | + |
| 92 | +The first lecture builds on the code in [`assignment_1_1_base`](https://github.com/FBEZ-docs-and-templates/devrel-advanced-workshop-code/tree/main/assignment_1_1_base). |
| 93 | + |
| 94 | +If you’re unable to complete a particular assignment, please download its prerequisite as shown in the diagram below. |
| 95 | + |
| 96 | +```goat |
| 97 | +assignment_1_1_base ---> assignment_1_1 ---> assignment_1_2 -+-> assignment_1_3 |
| 98 | + | |
| 99 | + +-> assignment_2_1 ---> assignment_2_2 ---> assignment_3_1 |
| 100 | +
|
| 101 | +assignment_3_2_base --------------------------------> assignment 3_2 ---> assignment 4_1 ---> assignment 4_2 |
| 102 | +``` |
| 103 | +<br> |
| 104 | + |
| 105 | + |
| 106 | +{{< alert icon="circle-info" cardColor="#b3e0f2" iconColor="#04a5e5">}} |
| 107 | +Even if you complete all assignments successfully, you’ll still need to download at least `assignment_1_1_base` and `assignment_3_2_base`. |
| 108 | +{{< /alert >}} |
| 109 | + |
| 110 | + |
| 111 | +> Your next step is __[Lecture 1](lecture-1/)__. |
| 112 | +
|
| 113 | +* __Part 1__ |
| 114 | + * [Lecture 1](lecture-1/) |
| 115 | + * [assignment 1.1](assignment-1-1/) |
| 116 | + * [assignment 1.2](assignment-1-2/) |
| 117 | + * [assignment 1.3](assignment-1-3/) |
| 118 | +* __Part 2__ |
| 119 | + * [Lecture 2](lecture-2/) |
| 120 | + * [assignment 2.1](assignment-2-1/) |
| 121 | + * [assignment 2.2](assignment-2-2/) |
| 122 | +* __Part 3__ |
| 123 | + * [Lecture 3](lecture-3/) |
| 124 | + * [assignment 3.1](assignment-3-1/) |
| 125 | + * [assignment 3.2](assignment-3-2/) |
| 126 | + * [assignment 3.3](assignment-3-3/) |
| 127 | +* __Part 4__ |
| 128 | + * [Lecture 4](lecture-4/) |
| 129 | + * [assignment 4.1](assignment-4-1/) |
| 130 | + * [assignment 4.2](assignment-4-2/) |
| 131 | + * [assignment 4.3](assignment-4-3/) |
| 132 | + <!-- * [assignment 4.4](assignment-4-4/) --> |
| 133 | + |
| 134 | + |
| 135 | +## Conclusion |
| 136 | + |
| 137 | +You just arrived at the end of this workshop, congratulation! We hope it was a fruitful experience and the start of a longer journey. Thank you for following the advanced ESP-IDF workshop. |
0 commit comments