ESP32-S3 touch HMI with LVGL 9.5 — display bring-up, widgets, motion, and product-ready UI on Waveshare hardware.
Tagline: ESP32-S3 touch HMI with LVGL 9.5 — display bring-up, widgets, motion, and product-ready UI on Waveshare hardware.
| Field |
Value |
| Course code |
ESP-LVGL-A |
| Duration |
16 weeks |
| Credits |
5 |
| Compliance |
NBA-aligned OBE |
| Publication |
published |
| Price |
INR 25000 |
| DB snapshot |
2026-10-08T15:04:30.783Z |
Course objective
Create professional touch HMIs on ESP32-S3 with LVGL: display bring-up, widgets, motion, and product-ready UI systems on Waveshare hardware. Graded Device Bridge labs turn UI ideas into working embedded interfaces you can ship. Prerequisite: C + ESP-IDF familiarity (ESP-IDF-A recommended).
Course outcomes (CO1–CO6)
| CO |
Bloom |
Weight |
Statement |
| CO1 |
understand |
17% |
Bring up Waveshare V2 over USB-CDC, Device Bridge, and UART-proven app_main firmware (READY) with no LCD required. |
| CO2 |
apply |
16% |
Drive the ST7789 panel with SPI DMA blit and UART-proven glass tokens without LVGL. |
| CO3 |
apply |
16% |
Use CST3530 as an I2C coordinate sensor and print XY tokens on press. |
| CO4 |
apply |
17% |
Build official LVGL 8.3 widgets and events with UART event mirrors (label through choice widgets). |
| CO5 |
analyze |
17% |
Structure multi-screen HMI with style, layout engines, and text/table/image widgets under UART contracts. |
| CO6 |
evaluate |
17% |
Explain DMA/tick/lock internals and integrate onboard IMU plus I2S speaker into a UART-verified capstone HMI. |
| CO7 |
analyze |
12% |
Explain port internals, keep the UI responsive (WDT/FPS), and structure multi-file HMI code. |
| CO8 |
evaluate |
12% |
Integrate onboard IMU and I2S speaker with NVS persistence and a UART-verified capstone HMI. |
Activity totals (live from platform)
| Metric |
Count |
| Units / chapters |
28 |
| Topics |
275 |
| Topic quiz activities |
1628 |
| MCQ questions |
1628 |
| Practice / board labs |
2 |
| Evaluated firmware labs |
189 |
| Instructional content blocks |
1498 |
Certificates & earning criteria
| Certificate |
CO scope |
Evaluated lab quota |
CO attainment |
Gate |
| Glass & port |
CO1–CO4 |
≥ 75% |
≥ 75% |
Glass & port summative (Unit 5) |
| Widgets & visual system |
CO1–CO6 |
≥ 75% |
≥ 75% |
Widgets & visual system EOC (Unit 17) |
| Product HMI |
CO1–CO8 |
≥ 75% |
≥ 75% |
Product HMI capstone (Unit 28) |
Unit syllabus (unit → topics → activities)
Unit 1 — Bring-up — Waveshare V2, USB-CDC, Device Bridge, READY
Unit totals: 7 topics · 44 MCQ questions · 1 practice · 1 evaluated labs
| # |
Topic |
MCQs |
Practice |
Evaluated |
Preview |
| 1 |
The core hardware — ESP32-S3 and Waveshare V2 |
6 |
0 |
0 |
— |
| 2 |
Memory map and onboard buses |
6 |
0 |
0 |
— |
| 3 |
The console path — native USB-CDC |
7 |
0 |
0 |
— |
| 4 |
The development pipeline — Build, Bridge, and triage |
6 |
0 |
0 |
— |
| 5 |
Lab — first firmware: print READY |
6 |
0 |
1 |
— |
| 6 |
Practice lab — heartbeat TICK lines |
7 |
1 |
0 |
— |
| 7 |
Unit wrap — HAL gift and LVGL preview |
6 |
0 |
0 |
— |
Unit 2 — Smallest LVGL 9 program
Unit totals: 8 topics · 48 MCQ questions · 1 practice · 1 evaluated labs
| # |
Topic |
MCQs |
Practice |
Evaluated |
Preview |
| 1 |
The four software layers of your HMI |
6 |
0 |
0 |
— |
| 2 |
Project headers and FreeRTOS fundamentals |
6 |
0 |
0 |
— |
| 3 |
The application envelope — start, handle, delay |
6 |
0 |
0 |
— |
| 4 |
Render pipeline and UART verification |
6 |
0 |
0 |
— |
| 5 |
Function walkthrough — APIs before the Hello program |
6 |
0 |
0 |
— |
| 6 |
Lab walkthrough — the first label |
6 |
0 |
0 |
— |
| 7 |
Practice — change label text |
6 |
1 |
0 |
— |
| 8 |
Rebuild the label screen and look ahead |
6 |
0 |
1 |
— |
Unit 3 — Glass: SPI + DMA
Unit totals: 8 topics · 48 MCQ questions · 0 practice · 6 evaluated labs
| # |
Topic |
MCQs |
Practice |
Evaluated |
Preview |
| 1 |
What DMA is and why glass needs it |
6 |
0 |
0 |
— |
| 2 |
Glass stack — ST7789, DC, SPI, wiki vs HAL |
6 |
0 |
0 |
— |
| 3 |
Function walkthrough — jupius_panel APIs |
6 |
0 |
0 |
— |
| 4 |
First glass call — panel init |
6 |
0 |
1 |
— |
| 5 |
Pack → blit — how we use DMA |
6 |
0 |
2 |
— |
| 6 |
DMA hello assemble |
6 |
0 |
1 |
— |
| 7 |
Clear/fill + black-screen triage |
6 |
0 |
1 |
— |
| 8 |
Flush bridge + Unit 4 wrap |
6 |
0 |
1 |
— |
Unit 4 — Touch as a sensor
Unit totals: 8 topics · 48 MCQ questions · 0 practice · 6 evaluated labs
| # |
Topic |
MCQs |
Practice |
Evaluated |
Preview |
| 1 |
What touch is and why HMI needs it |
6 |
0 |
0 |
— |
| 2 |
Touch stack — CST3530 @ 0x58 + pins 1/3/4/2 |
6 |
0 |
0 |
— |
| 3 |
Function walkthrough — jupius_touch APIs |
6 |
0 |
0 |
— |
| 4 |
I²C probe — TOUCH:OK / FAIL |
6 |
0 |
1 |
— |
| 5 |
INT after reset must be input |
6 |
0 |
1 |
— |
| 6 |
Gate peek + XY while down |
6 |
0 |
2 |
— |
| 7 |
Lift line XY:UP |
6 |
0 |
1 |
— |
| 8 |
Paint + rotation + Unit 5 wrap |
6 |
0 |
1 |
— |
Unit 5 — First click
Unit totals: 8 topics · 48 MCQ questions · 0 practice · 4 evaluated labs
| # |
Topic |
MCQs |
Practice |
Evaluated |
Preview |
| 1 |
What first click is and why HMI needs it |
6 |
0 |
0 |
— |
| 2 |
Tap contract — CLICKED vs press + hit box |
6 |
0 |
0 |
— |
| 3 |
Function walkthrough — button / event / UI APIs |
6 |
0 |
0 |
— |
| 4 |
Hello + OK button |
6 |
0 |
1 |
— |
| 5 |
Click counter on the same button |
6 |
0 |
1 |
— |
| 6 |
One UART line per click |
6 |
0 |
1 |
— |
| 7 |
Hit size + early bg_color |
6 |
0 |
0 |
— |
| 8 |
Certificate 1 wrap — Glass & port SUMM |
6 |
0 |
1 |
— |
Unit 6 — Binary widgets
Unit totals: 8 topics · 48 MCQ questions · 0 practice · 3 evaluated labs
| # |
Topic |
MCQs |
Practice |
Evaluated |
Preview |
| 1 |
Binary widgets — sticky CHECKED vs click |
6 |
0 |
0 |
— |
| 2 |
Checkbox vs switch — same event, different tokens |
6 |
0 |
0 |
— |
| 3 |
Function walkthrough — checkbox / switch / state |
6 |
0 |
0 |
— |
| 4 |
Checkbox lab — UI:CB= |
6 |
0 |
1 |
— |
| 5 |
Switch lab — UI:SW= |
6 |
0 |
1 |
— |
| 6 |
Read CHECKED in the callback |
6 |
0 |
0 |
— |
| 7 |
Two controls, two tokens |
6 |
0 |
1 |
— |
| 8 |
Toggle vs button UX + Unit 7 wrap |
6 |
0 |
0 |
— |
Unit 7 — Slider and bar
Unit totals: 8 topics · 48 MCQ questions · 0 practice · 6 evaluated labs
| # |
Topic |
MCQs |
Practice |
Evaluated |
Preview |
| 1 |
Range widgets vs binary — what and why |
6 |
0 |
0 |
— |
| 2 |
Slider vs bar — interactive vs firmware-owned |
6 |
0 |
0 |
— |
| 3 |
Function walkthrough — slider / bar / UI:VAL= |
6 |
0 |
0 |
— |
| 4 |
Slider lab — UI:VAL= |
6 |
0 |
1 |
— |
| 5 |
Slider with live label |
6 |
0 |
1 |
— |
| 6 |
Bar set-value + vertical geometry |
6 |
0 |
2 |
— |
| 7 |
Fill a bar from a loop |
6 |
0 |
1 |
— |
| 8 |
Bar RANGE mode + Unit 8 wrap |
6 |
0 |
1 |
— |
Unit 8 — Arc and spinner
Unit totals: 8 topics · 48 MCQ questions · 0 practice · 6 evaluated labs
| # |
Topic |
MCQs |
Practice |
Evaluated |
Preview |
| 1 |
Arc gauge — circular range vs slider |
6 |
0 |
0 |
— |
| 2 |
Drag gauge vs loader vs spinner |
6 |
0 |
0 |
— |
| 3 |
Function walkthrough — arc / spinner / scale |
6 |
0 |
0 |
— |
| 4 |
Drag arc — UI:GAUGE= |
6 |
0 |
1 |
— |
| 5 |
Non-clickable arc loader |
6 |
0 |
1 |
— |
| 6 |
Spinner busy + anim params |
6 |
0 |
2 |
— |
| 7 |
Scale + arc on 240×320 |
6 |
0 |
1 |
— |
| 8 |
Arc + center label + Unit 9 wrap |
6 |
0 |
1 |
— |
Unit 9 — Choosing from a set
Unit totals: 8 topics · 48 MCQ questions · 0 practice · 5 evaluated labs
| # |
Topic |
MCQs |
Practice |
Evaluated |
Preview |
| 1 |
Discrete choice vs continuous range |
6 |
0 |
0 |
— |
| 2 |
Roller vs dropdown vs buttonmatrix |
6 |
0 |
0 |
— |
| 3 |
Function walkthrough — set pickers |
6 |
0 |
0 |
— |
| 4 |
Roller — UI:VAL= |
6 |
0 |
1 |
— |
| 5 |
Dropdown — UI:VAL= |
6 |
0 |
1 |
— |
| 6 |
Buttonmatrix keypad — UI:KEY= |
6 |
0 |
1 |
— |
| 7 |
Roller + key composition |
6 |
0 |
1 |
— |
| 8 |
Dropdown set_dir + Unit 10 wrap |
6 |
0 |
1 |
— |
Unit 10 — Screens and navigation
Unit totals: 8 topics · 48 MCQ questions · 0 practice · 10 evaluated labs
| # |
Topic |
MCQs |
Practice |
Evaluated |
Preview |
| 1 |
One screen, many layouts |
6 |
0 |
0 |
— |
| 2 |
Idle rebuild + Next/Back jobs |
6 |
0 |
0 |
— |
| 3 |
Function walkthrough — screens/nav |
6 |
0 |
0 |
— |
| 4 |
Home → Settings (Next) |
6 |
0 |
1 |
— |
| 5 |
Back navigation round-trip |
6 |
0 |
1 |
— |
| 6 |
Nav wrap + pass roller |
6 |
0 |
2 |
— |
| 7 |
Switch / slider→bar / arc pass |
6 |
0 |
3 |
— |
| 8 |
Dropdown+Back / CB+SW / checkpoint + U11 wrap |
6 |
0 |
3 |
— |
Unit 11 — Lists, scroll, and chrome
Unit totals: 8 topics · 48 MCQ questions · 0 practice · 6 evaluated labs
| # |
Topic |
MCQs |
Practice |
Evaluated |
Preview |
| 1 |
Lists vs one-screen nav |
6 |
0 |
0 |
— |
| 2 |
Scroll, nest, and chrome jobs |
6 |
0 |
0 |
— |
| 3 |
Function walkthrough — lists and chrome |
6 |
0 |
0 |
— |
| 4 |
List item click — UI:LIST= |
6 |
0 |
1 |
— |
| 5 |
Scroll container — SCR:scroll |
6 |
0 |
1 |
— |
| 6 |
Tabview — SCR:tab0 / SCR:tab1 |
6 |
0 |
1 |
— |
| 7 |
Tileview — SCR:tile |
6 |
0 |
1 |
— |
| 8 |
Menu, window, and list detail |
6 |
0 |
2 |
— |
Unit 12 — Style, theme, fonts
Unit totals: 8 topics · 48 MCQ questions · 0 practice · 7 evaluated labs
| # |
Topic |
MCQs |
Practice |
Evaluated |
Preview |
| 1 |
Parts and states on glass |
6 |
0 |
0 |
— |
| 2 |
Local style vs theme jobs |
6 |
0 |
0 |
— |
| 3 |
Function walkthrough — style and theme |
6 |
0 |
0 |
— |
| 4 |
Local style card — SCR:style |
6 |
0 |
1 |
— |
| 5 |
Font swap — UI:THEME= |
6 |
0 |
1 |
— |
| 6 |
Theme toggle — UI:THEME= |
6 |
0 |
1 |
— |
| 7 |
Spangroup — UI:TEXT= |
6 |
0 |
1 |
— |
| 8 |
Compose style+OK / theme+SW / styled list |
6 |
0 |
3 |
— |
Unit 13 — Style, theme, fonts
Unit totals: 8 topics · 48 MCQ questions · 0 practice · 10 evaluated labs
| # |
Topic |
MCQs |
Practice |
Evaluated |
Preview |
| 1 |
Manual place vs layout engines |
6 |
0 |
0 |
— |
| 2 |
Flex and Grid jobs on 240×320 |
6 |
0 |
0 |
— |
| 3 |
Function walkthrough — Flex and Grid |
6 |
0 |
0 |
— |
| 4 |
Flex COLUMN + grow — SCR:flex / SCR:grow |
6 |
0 |
2 |
— |
| 5 |
Flex ROW + Grid 2×2 — SCR:row / SCR:grid |
6 |
0 |
2 |
— |
| 6 |
Flex fit on V2 — SCR:fit |
6 |
0 |
1 |
— |
| 7 |
Flex + slider / switch |
6 |
0 |
2 |
— |
| 8 |
Grid+OK / Flex+roller / Flex nav |
6 |
0 |
3 |
— |
Unit 14 — Images
Unit totals: 8 topics · 48 MCQ questions · 0 practice · 7 evaluated labs
| # |
Topic |
MCQs |
Practice |
Evaluated |
Preview |
| 1 |
Why PNG/FS stay off in this seed |
6 |
0 |
0 |
— |
| 2 |
Image and imagebutton jobs on 240×320 |
6 |
0 |
0 |
— |
| 3 |
Function walkthrough — image and imagebutton |
6 |
0 |
0 |
— |
| 4 |
RAM image — SCR:image |
6 |
0 |
1 |
— |
| 5 |
Image in Flex — SCR:image |
6 |
0 |
1 |
— |
| 6 |
Imagebutton + states — UI:IBTN= |
6 |
0 |
2 |
— |
| 7 |
Compose: image + OK |
6 |
0 |
1 |
— |
| 8 |
Flex+ibtn / ibtn nav + Unit 15 wrap |
6 |
0 |
2 |
— |
Unit 15 — Motion
Unit totals: 8 topics · 48 MCQ questions · 0 practice · 6 evaluated labs
| # |
Topic |
MCQs |
Practice |
Evaluated |
Preview |
| 1 |
Why motion needs lv_anim_t |
6 |
0 |
0 |
— |
| 2 |
Motion jobs on 240×320 |
6 |
0 |
0 |
— |
| 3 |
Function walkthrough — animation |
6 |
0 |
0 |
— |
| 4 |
Duration + path — SCR:anim |
6 |
0 |
1 |
— |
| 5 |
Fade a label — SCR:anim |
6 |
0 |
1 |
— |
| 6 |
Spinner + SCR:anim stage |
6 |
0 |
2 |
— |
| 7 |
Compose: anim + OK |
6 |
0 |
1 |
— |
| 8 |
Flex + anim wrap → Unit 16 |
6 |
0 |
1 |
— |
Unit 16 — Charts
Unit totals: 8 topics · 48 MCQ questions · 0 practice · 7 evaluated labs
| # |
Topic |
MCQs |
Practice |
Evaluated |
Preview |
| 1 |
Why charts need LV_USE_CHART |
6 |
0 |
0 |
— |
| 2 |
Chart jobs on 240×320 |
6 |
0 |
0 |
— |
| 3 |
Function walkthrough — chart |
6 |
0 |
0 |
— |
| 4 |
LINE chart + point count |
6 |
0 |
2 |
— |
| 5 |
Slider feeds the chart |
6 |
0 |
1 |
— |
| 6 |
Style chart parts (+ vs bar) |
6 |
0 |
1 |
— |
| 7 |
Compose: Flex + chart + OK |
6 |
0 |
2 |
— |
| 8 |
Chart stream wrap → Unit 17 |
6 |
0 |
1 |
— |
Unit 17 — Text, table, keyboard, calendar
Unit totals: 8 topics · 48 MCQ questions · 0 practice · 7 evaluated labs
| # |
Topic |
MCQs |
Practice |
Evaluated |
Preview |
| 1 |
Why text needs LV_USE_KEYBOARD |
6 |
0 |
0 |
— |
| 2 |
Text jobs on 240×320 |
6 |
0 |
0 |
— |
| 3 |
Function walkthrough — text |
6 |
0 |
0 |
— |
| 4 |
Textarea + keyboard link |
6 |
0 |
2 |
— |
| 5 |
Submit reads textarea (OK) |
6 |
0 |
1 |
— |
| 6 |
Table 3×3 + calendar |
6 |
0 |
2 |
— |
| 7 |
Flex + textarea |
6 |
0 |
1 |
— |
| 8 |
Certificate 2 EOC + Unit 18 wrap |
6 |
0 |
1 |
— |
Unit 18 — Port internals: DMA, tick, tasks
Unit totals: 8 topics · 48 MCQ questions · 0 practice · 7 evaluated labs
| # |
Topic |
MCQs |
Practice |
Evaluated |
Preview |
| 1 |
Why the port map matters |
6 |
0 |
0 |
— |
| 2 |
Port jobs on the HAL |
6 |
0 |
0 |
— |
| 3 |
Function walkthrough — port |
6 |
0 |
0 |
— |
| 4 |
Port label + handle-before-PORT |
6 |
0 |
2 |
— |
| 5 |
Lock around label |
6 |
0 |
1 |
— |
| 6 |
Main stack + DMA literacy |
6 |
0 |
1 |
— |
| 7 |
Flex + port + OK |
6 |
0 |
2 |
— |
| 8 |
Port rebuild + Unit 19 wrap |
6 |
0 |
1 |
— |
Unit 19 — Keep the UI alive
Unit totals: 8 topics · 48 MCQ questions · 0 practice · 5 evaluated labs
| # |
Topic |
MCQs |
Practice |
Evaluated |
Preview |
| 1 |
Why return-fast + idle_cb matter |
6 |
0 |
0 |
— |
| 2 |
Alive jobs on the desk |
6 |
0 |
0 |
— |
| 3 |
Function walkthrough — alive |
6 |
0 |
0 |
— |
| 4 |
Idle-safe rebuild (SCR:alive) |
6 |
0 |
1 |
— |
| 5 |
FPS + MEM (+ WDT literacy) |
6 |
0 |
1 |
— |
| 6 |
Fast OK callback (UI:BTN_OK) |
6 |
0 |
1 |
— |
| 7 |
Alive nav (+ main-loop literacy) |
6 |
0 |
1 |
— |
| 8 |
Alive rebuild + Unit 20 wrap |
6 |
0 |
1 |
— |
Unit 20 — Multi-file UI
Unit totals: 8 topics · 48 MCQ questions · 0 practice · 5 evaluated labs
| # |
Topic |
MCQs |
Practice |
Evaluated |
Preview |
| 1 |
Why main vs ui_*.c split |
6 |
0 |
0 |
— |
| 2 |
Multi-file jobs on the desk |
6 |
0 |
0 |
— |
| 3 |
Function walkthrough — multi-file |
6 |
0 |
0 |
— |
| 4 |
Two-file Mod (main + ui.c) |
6 |
0 |
1 |
— |
| 5 |
Home module (ui_home.c) |
6 |
0 |
1 |
— |
| 6 |
Settings module (+ build contract) |
6 |
0 |
1 |
— |
| 7 |
Four-file nav (home → settings) |
6 |
0 |
1 |
— |
| 8 |
Multifile rebuild + Unit 21 wrap |
6 |
0 |
1 |
— |
Unit 21 — IMU talks to widgets
Unit totals: 8 topics · 48 MCQ questions · 0 practice · 5 evaluated labs
| # |
Topic |
MCQs |
Practice |
Evaluated |
Preview |
| 1 |
Why six-axis + configure before glass |
6 |
0 |
0 |
— |
| 2 |
IMU jobs on the desk |
6 |
0 |
0 |
— |
| 3 |
Function walkthrough — IMU register→HAL→glass |
6 |
0 |
0 |
— |
| 4 |
Configure / init → IMU:OK |
6 |
0 |
1 |
— |
| 5 |
Human SHOW on glass (idle label) |
6 |
0 |
1 |
— |
| 6 |
Full tilt UI (+ complementary literacy) |
6 |
0 |
1 |
— |
| 7 |
Map ±45° pitch → bar 0..100 |
6 |
0 |
1 |
— |
| 8 |
IMU rebuild + FAIL literacy → Unit 22 |
6 |
0 |
1 |
— |
Unit 22 — I2S speaker
Unit totals: 8 topics · 48 MCQ questions · 0 practice · 5 evaluated labs
| # |
Topic |
MCQs |
Practice |
Evaluated |
Preview |
| 1 |
Why I2S for the speaker (vs SPI / I2C) |
6 |
0 |
0 |
— |
| 2 |
Audio jobs on the desk |
6 |
0 |
0 |
— |
| 3 |
Function walkthrough — audio HAL → glass |
6 |
0 |
0 |
— |
| 4 |
jupius_audio_init → AUDIO:OK |
6 |
0 |
1 |
— |
| 5 |
Beep tap UI:BEEP (+ tone vs MP3) |
6 |
0 |
1 |
— |
| 6 |
Slider → set_tone + UI:VAL= |
6 |
0 |
1 |
— |
| 7 |
Arc → UI:GAUGE= |
6 |
0 |
1 |
— |
| 8 |
Audio rebuild + Unit 23 NVS wrap |
6 |
0 |
1 |
— |
Unit 23 — Persistence + fail screen
Unit totals: 8 topics · 48 MCQ questions · 0 practice · 5 evaluated labs
| # |
Topic |
MCQs |
Practice |
Evaluated |
Preview |
| 1 |
Why persist last SCR: id (RAM dies on reboot) |
6 |
0 |
0 |
— |
| 2 |
NVS jobs on the desk |
6 |
0 |
0 |
— |
| 3 |
Function walkthrough — NVS |
6 |
0 |
0 |
— |
| 4 |
jupius_nvs_init → NVS:OK + SCR:nvs |
6 |
0 |
1 |
— |
| 5 |
load/seed home → NVS:OK + SCR:home |
6 |
0 |
1 |
— |
| 6 |
SCR:fail (+ RAM vs flash literacy) |
6 |
0 |
1 |
— |
| 7 |
Show error → OK → UI:MSG= + SCR:msg |
6 |
0 |
1 |
— |
| 8 |
NVS rebuild + Unit 24 backlight wrap |
6 |
0 |
1 |
— |
Unit 24 — Board leftovers
Unit totals: 8 topics · 48 MCQ questions · 0 practice · 2 evaluated labs
| # |
Topic |
MCQs |
Practice |
Evaluated |
Preview |
| 1 |
Why PWM brightness vs GPIO on/off |
6 |
0 |
0 |
— |
| 2 |
Board leftover jobs on the desk |
6 |
0 |
0 |
— |
| 3 |
Function walkthrough — backlight |
6 |
0 |
0 |
— |
| 4 |
Slider → set_percent + BL:PWM= |
6 |
0 |
1 |
— |
| 5 |
PCF85063 RTC awareness (not graded) |
6 |
0 |
0 |
— |
| 6 |
microSD / TF awareness (not graded) |
6 |
0 |
0 |
— |
| 7 |
HAL vs vendor demo / when owned C wins |
6 |
0 |
0 |
— |
| 8 |
BL rebuild + Unit 25 wrap |
6 |
0 |
1 |
— |
Unit 25 — Builders vs owned C · take HAL home
Unit totals: 9 topics · 30 MCQ questions · 0 practice · 0 evaluated labs
| # |
Topic |
MCQs |
Practice |
Evaluated |
Preview |
| 1 |
SquareLine as export tool awareness |
6 |
0 |
0 |
— |
| 2 |
XML/UI builder vs owned C |
6 |
0 |
0 |
— |
| 3 |
What we grade (tokens not designer files) |
6 |
0 |
0 |
— |
| 4 |
MCQ: pick owned C path |
6 |
0 |
0 |
— |
| 5 |
MCQ: when builder helps prototyping |
6 |
0 |
0 |
— |
| 6 |
What you take home (HAL pack) |
0 |
0 |
0 |
— |
| 7 |
ESP-IDF drop-in layout |
0 |
0 |
0 |
— |
| 8 |
First desk build offline |
0 |
0 |
0 |
— |
| 9 |
License and before capstone |
0 |
0 |
0 |
— |
Unit 26 — Capstone Project 1
Unit totals: 25 topics · 150 MCQ questions · 0 practice · 19 evaluated labs
| # |
Topic |
MCQs |
Practice |
Evaluated |
Preview |
| 1 |
Pick industry brief |
6 |
0 |
0 |
— |
| 2 |
Line monitor screen map |
6 |
0 |
0 |
— |
| 3 |
Skeleton + splash |
6 |
0 |
1 |
— |
| 4 |
Line home |
6 |
0 |
1 |
— |
| 5 |
Status + KPI |
6 |
0 |
1 |
— |
| 6 |
Alarms list |
6 |
0 |
1 |
— |
| 7 |
Alarm detail |
6 |
0 |
1 |
— |
| 8 |
Trend chart |
6 |
0 |
1 |
— |
| 9 |
I/O + batch |
6 |
0 |
1 |
— |
| 10 |
Maintenance |
6 |
0 |
1 |
— |
| 11 |
Tilt (IMU) |
6 |
0 |
1 |
— |
| 12 |
Horn test |
6 |
0 |
1 |
— |
| 13 |
Config hub |
6 |
0 |
1 |
— |
| 14 |
Operator + about + lock |
6 |
0 |
1 |
— |
| 15 |
Backlight |
6 |
0 |
1 |
— |
| 16 |
Diagnostics |
6 |
0 |
1 |
— |
| 17 |
NVS restore |
6 |
0 |
1 |
— |
| 18 |
Fail + msgbox |
6 |
0 |
1 |
— |
| 19 |
Ops screens in the factory script |
6 |
0 |
0 |
— |
| 20 |
Diagnostics and PORT:OK |
6 |
0 |
0 |
— |
| 21 |
Operator lock and UI:KEY= |
6 |
0 |
0 |
— |
| 22 |
Complete factory script contract |
6 |
0 |
0 |
— |
| 23 |
Cross-nav wiring |
6 |
0 |
1 |
— |
| 24 |
Rebuild checkpoint |
6 |
0 |
1 |
— |
| 25 |
Project 1 factory EOC |
6 |
0 |
1 |
— |
Unit 27 — Capstone Project 2
Unit totals: 25 topics · 150 MCQ questions · 0 practice · 19 evaluated labs
| # |
Topic |
MCQs |
Practice |
Evaluated |
Preview |
| 1 |
Brief confirm (bench SKU) |
6 |
0 |
0 |
— |
| 2 |
Bench screen map + widget mandate |
6 |
0 |
0 |
— |
| 3 |
Skeleton + splash |
6 |
0 |
1 |
— |
| 4 |
Bench home (flex hub) |
6 |
0 |
1 |
— |
| 5 |
Arc level meter |
6 |
0 |
1 |
— |
| 6 |
Meter input range |
6 |
0 |
1 |
— |
| 7 |
Scope trace |
6 |
0 |
1 |
— |
| 8 |
Measure tabview |
6 |
0 |
1 |
— |
| 9 |
Presets scroll list |
6 |
0 |
1 |
— |
| 10 |
Preset filter + detail |
6 |
0 |
1 |
— |
| 11 |
Preset options |
6 |
0 |
1 |
— |
| 12 |
Tone control |
6 |
0 |
1 |
— |
| 13 |
Audio path test |
6 |
0 |
1 |
— |
| 14 |
Audio route + peak |
6 |
0 |
1 |
— |
| 15 |
Bench level (IMU) |
6 |
0 |
1 |
— |
| 16 |
Calibration steps + entry |
6 |
0 |
1 |
— |
| 17 |
Cal confirm + setup tab |
6 |
0 |
1 |
— |
| 18 |
User, service, NVS, fail |
6 |
0 |
1 |
— |
| 19 |
Bench factory script design |
6 |
0 |
0 |
— |
| 20 |
Widget composition acceptance |
6 |
0 |
0 |
— |
| 21 |
Audio + cal in acceptance |
6 |
0 |
0 |
— |
| 22 |
Complete bench EOC contract |
6 |
0 |
0 |
— |
| 23 |
Cross-nav wiring |
6 |
0 |
1 |
— |
| 24 |
Rebuild checkpoint |
6 |
0 |
1 |
— |
| 25 |
Project 2 bench EOC |
6 |
0 |
1 |
— |
Unit 28 — Capstone Project 3
Unit totals: 25 topics · 150 MCQ questions · 0 practice · 19 evaluated labs
| # |
Topic |
MCQs |
Practice |
Evaluated |
Preview |
| 1 |
Brief confirm (appliance SKU) |
6 |
0 |
0 |
— |
| 2 |
Panel screen map + widget mandate |
6 |
0 |
0 |
— |
| 3 |
Skeleton + splash |
6 |
0 |
1 |
— |
| 4 |
Home hub (flex) |
6 |
0 |
1 |
— |
| 5 |
Usage energy bar |
6 |
0 |
1 |
— |
| 6 |
Usage chart |
6 |
0 |
1 |
— |
| 7 |
Schedule calendar |
6 |
0 |
1 |
— |
| 8 |
Usage day/week tabview |
6 |
0 |
1 |
— |
| 9 |
Modes menu + tileview |
6 |
0 |
1 |
— |
| 10 |
Mode detail roller |
6 |
0 |
1 |
— |
| 11 |
Mode options matrix |
6 |
0 |
1 |
— |
| 12 |
Orient IMU init |
6 |
0 |
1 |
— |
| 13 |
Orient tilt readout |
6 |
0 |
1 |
— |
| 14 |
Orient cal + confirm |
6 |
0 |
1 |
— |
| 15 |
Chime audio path |
6 |
0 |
1 |
— |
| 16 |
Chime volume + pick |
6 |
0 |
1 |
— |
| 17 |
Chime test + prefs tab |
6 |
0 |
1 |
— |
| 18 |
User, service, NVS, fail |
6 |
0 |
1 |
— |
| 19 |
Appliance factory script design |
6 |
0 |
0 |
— |
| 20 |
Widget composition acceptance |
6 |
0 |
0 |
— |
| 21 |
Chime + orient in acceptance |
6 |
0 |
0 |
— |
| 22 |
Complete appliance EOC contract |
6 |
0 |
0 |
— |
| 23 |
Cross-nav wiring |
6 |
0 |
1 |
— |
| 24 |
Rebuild checkpoint |
6 |
0 |
1 |
— |
| 25 |
Product HMI capstone EOC |
6 |
0 |
1 |
— |
Counts are from the live course catalog. MCQs = questions in topic checkpoint quizzes. Practice = formative run-only or SQL practice lane. Evaluated = submit-graded labs that count toward progress and certificates.