Lab: Capstone Mini Project
Course 1 · Module 8 Type: Capstone (integrate M02–M07 on real hardware) Suggested time: 2–4 hours (+ optional extra time)
Read first: Lesson · Capstone brief · Course package · ← Table of Contents · ← M07
Note: the snippets in this lab use the API of the TESAIoT Bitstream firmware, which is not yet open source. See detail and equivalent examples in the public SDK in the note at the top of the lesson Plan the Capstone and Use the Resource Map
The
ble-flethost is not yet published — the TESAIoT_Hackathon README (commitf5f09a6) states thatpython-app/,ble-react/andble-flet/belong to the maintainers and are not in the public repo. Use the backup path the lesson already suggests: a general GATT explorer such as nRF Connect, LightBlue, or AIROC™ Bluetooth® Connect
Useful references during the lab
Section titled “Useful references during the lab”| Document | Use when |
|---|---|
| M05 lab | sensor / window |
| M06 lab | Wi‑Fi / MQTT |
| M07 lab | A BLE peripheral / host |
| M04 lab | Tasks / queue |
| Hackathon web-app / ble-flet | Live dashboard evidence |
| Bitstream Studio | Host / broker tools |
Lab Goals
Section titled “Lab Goals”Deliver a mini-project running on real hardware, covering:
- A sensor path + indication
- ≥ 2 FreeRTOS tasks
- Connectivity: MQTT and/or BLE (at least one path, with a command received or a link confirmed)
- A README others can reproduce
- Demo evidence (a photo / clip / dashboard)
Prerequisites
Section titled “Prerequisites”- The main labs M02–M07 meet their minimum bar (at least the path you’ll use in the Capstone)
- The combined project builds on your machine
- A broker + Wi‑Fi or a BLE host of your choice
- capstone-brief.md open, ready to fill in
Recommended build order
Section titled “Recommended build order”- Architecture (30–45 minutes) — fill in the Task / Topic / BLE table in the capstone brief
- Sensor + indication — a fixed-period read + LED/UART
- RTOS wiring — split into tasks, add a queue if there’s a producer/consumer
- Connectivity — choose MQTT and/or BLE and get the link and commands working
- Hardening — don’t hardcode secrets; test triggering the sensor / sending a command / briefly disconnecting the cable
- Evidence — a README + screenshots/a clip + (recommended) the Hackathon
web-app/ble-flet, or Bitstream Studio
Minimum pass criteria
Section titled “Minimum pass criteria”| Criterion | Required |
|---|---|
| Builds + flashes from your README | Yes |
| ≥ 2 tasks genuinely running | Yes |
| A sensor path + status on LED/UART | Yes |
| MQTT or BLE works + a command received/a link confirmed | Yes |
| No password embedded in files submitted publicly | Yes |
Stretch goals (optional)
Section titled “Stretch goals (optional)”- Use both MQTT and BLE
- A threshold → an
alertpublish / notify - A correct mutex on a shared bus
- A separate
to_twinqueue or topic - Demonstrate on Bitstream Studio or Hackathon
Demo scenarios (test all three)
Section titled “Demo scenarios (test all three)”- Normal — sensor values flow, LED/UART behave normally, telemetry reaches the host (an MQTT subscriber and/or a BLE dashboard)
- Stimulus — change the temperature/move the board/turn the POT → see the value or an event change
- Command — from a PC/phone, send a command (an MQTT topic or a BLE write) → the device responds
Deliverables checklist
Section titled “Deliverables checklist”- The project folder/link
- A README: how to build, flash, the Wi‑Fi/broker or BLE host without exposing a password, and the topic/UUID used
- capstone-brief.md filled in completely
- A diagram or table of Tasks
- Demo evidence for all 3 scenarios
- Confirmation there are no secrets in public files
Troubleshooting
Section titled “Troubleshooting”| Symptom | Approach |
|---|---|
| Combining code breaks the build | Combine one layer at a time from a stable M02 project |
| MQTT never comes up | Check Wi‑Fi first (M06 Lab A) |
| BLE not seen in a scan | Is the BLE profile on? · reboot · an ADV timeout (M07) |
| Tasks collide on the bus | Add cm55_i2c_manager_i2c_lock / a mutex |
| The host demo shows no value | The HEX/VSIX version, the MAC topic, the Studio Link, or the ble-flet connection |
Lesson · Capstone brief · Table of Contents
Cite this lesson
If you teach from this lesson or reuse it in slides or documents, credit it with the text below. If you changed it, add (adapted) after the title.
"Lab: Capstone Mini Project" from TESA Open Knowledge by the Thai Embedded Systems Association (TESA), https://github.com/tesaiot/tesa-qualification-program, licensed under CC BY-NC 4.0
Thai attribution: "แล็บ Capstone: มินิโปรเจกต์" จาก TESA Open Knowledge โดยสมาคมสมองกลฝังตัวไทย (Thai Embedded Systems Association: TESA) https://github.com/tesaiot/tesa-qualification-program สัญญาอนุญาต CC BY-NC 4.0
Lesson link: https://tesaiot.github.io/tesa-qualification-program/en/courses/firmware-sdk-edge-ai/m08-capstone/l02-lab/
This lesson adapts the source below; keep its credit too.
https://github.com/drsanti/TESAIoT-Courses/blob/287c21814ba8c75f693136616dcd270349a15966/C1/M08/lab.md · Original content by Asst. Prof. Dr. Santi Nuratch (ผศ.ดร.สันติ นุราช), KMUTT. Course 1 (C1/) of drsanti/TESAIoT-Courses. TESA funded the work and holds the rights; published here under CC BY-NC 4.0. The upstream repository carries no licence file. Text kept faithful; structure, front matter, quizzes and notes added by TESA Open Knowledge.
TESA Open Knowledge · © 2026 สมาคมสมองกลฝังตัวไทย (TESA) · CC BY-NC 4.0
Content is licensed CC BY-NC 4.0. Reuse it non-commercially and credit the Thai Embedded Systems Association (TESA) every time. · How to cite TESA