แล็บ: I/O ครบวงจรแบบ co-simulation
Course 2 · Module 4
Type: Hands-on (bring-up + input path + output path + latency)
Suggested time: ~2.5–3 ชั่วโมง
Read first: Lesson · Checklist · ← Table of Contents · ← M03 · M05 →
Useful references during the lab
หัวข้อที่มีชื่อว่า “Useful references during the lab”| เอกสาร | ใช้เมื่อ |
|---|---|
| M02 lab | Studio / Simulator / COM |
| M03 lab | event script / Virtual Device |
| Hackathon | HEX · web-app/ evidence |
| Course 1 M04 | task timing |
Lab Goals
หัวข้อที่มีชื่อว่า “Lab Goals”- รันเฟิร์มแวร์คู่ Twin/โฮสต์ได้เสถียร
- พิสูจน์ input: กระตุ้น → เฟิร์มแวร์รับรู้
- พิสูจน์ output: เฟิร์มแวร์สั่ง → โฮสต์/ Twin สะท้อน
- จด latency คร่าว ๆ อย่างน้อย 1 จุด
- กรอก cosim-checklist.md
Prerequisites
หัวข้อที่มีชื่อว่า “Prerequisites”- M02 เซสชันแรกผ่าน
- M03 มี device model + event script (หรือ timeline)
- เลือก path: Simulator และ/หรือ Board + HEX
- โฟลเดอร์
lab-notes/สำหรับหลักฐาน
Lab A — Bring-up co-sim (required)
หัวข้อที่มีชื่อว่า “Lab A — Bring-up co-sim (required)”- เปิด Bitstream Studio
- เลือก Simulator หรือ Bitstream (อย่างใดอย่างหนึ่ง)
- Link จนมีสตรีม/heartbeat
- รอ ≥ 30 วินาทีโดยไม่หลุด
- แคปหน้าจอสถานะ Link + กราฟ/ค่า
Pass when: ทั้งโฮสต์และแหล่งเฟิร์มแวร์ (sim หรือบอร์ด) มีสัญญาณชีวิตชัด
Lab B — Input path (required)
หัวข้อที่มีชื่อว่า “Lab B — Input path (required)”- ใช้สคริปต์/ไทม์ไลน์จาก M03 หรือกระตุ้นด้วย scene/UI/ปุ่ม
- ให้เฟิร์มแวร์แสดงว่าอ่านค่าได้ (UART log, การเปลี่ยนโหมด, หรือค่าที่ echo บนโฮสต์อย่างชัดว่ามาจาก logic อ่าน)
- บันทึก: สิ่งที่กระตุ้น → สิ่งที่เฟิร์มแวร์รายงาน
Pass when: คนในทีมอธิบายลูกศร Twin/stimulus → firmware ได้พร้อมหลักฐาน
Lab C — Output path (required)
หัวข้อที่มีชื่อว่า “Lab C — Output path (required)”- ให้เฟิร์มแวร์เปลี่ยนเอาต์พุตอย่างน้อยหนึ่งอย่าง (LED, flag, publish, log marker)
- ยืนยันว่า Bitstream Studio (หรือ
web-app/) สะท้อนผล - เทียบกับ behavior WHEN/THEN จาก M03
Pass when: มีหลักฐานคู่ (firmware side + host side)
Lab D — Latency note (recommended)
หัวข้อที่มีชื่อว่า “Lab D — Latency note (recommended)”- เลือกจุดวัดหนึ่งจุด (เช่น stimulus → first log line)
- ทำ 3 รอบ จดค่าโดยประมาณ
- เดาสาเหตุหน่วง 1 ข้อ (task period / scene rate / UI)
- กรอกใน checklist
Pass when: มีตัวเลขช่วงและสมมติฐานแหล่งหน่วง — ไม่ต้องสวยที่สุด
Lab E — Optional extras
หัวข้อที่มีชื่อว่า “Lab E — Optional extras”- เปรียบเทียบ Path A (Simulator) กับ Path B (Board) บนสคริปต์เดียวกัน
- ถ้ามี GLB จาก M03 — โหลดประกอบฉากแล้วจดว่าภาพช่วยสาธิตอะไร (ไม่แทน sensor truth)
Lab E1 — Hackathon web-app ex05 (recommended)
หัวข้อที่มีชื่อว่า “Lab E1 — Hackathon web-app ex05 (recommended)”อ่าน walkthrough ใน README §4 ก่อน
- Serve โฟลเดอร์ Hackathon
web-app/แล้วเปิดex05_bmi270_orientation.html - ยืนยัน badge เป็น
connectedและมีroute: - ใน sensor settings เปิด BMI270 Euler และ/หรือ Quaternion ใน publish mask
- เอียงบอร์ด หรือสลับ scene Motion — horizon + ° ต้องขยับ
- แคปหน้าจอ คู่กับ แผง BMI270 ใน Studio; จด
source:และmask 0x…
Pass when: อธิบายได้ว่า ex05 พิสูจน์ output path ชั้นนอก และถ้าค้างที่ waiting for orientation แปลว่า mask ไม่ครบ (ไม่ใช่แค่ “หน้าเว็บเสีย”)
Deliverables checklist
หัวข้อที่มีชื่อว่า “Deliverables checklist”- Lab A–C ผ่าน
- cosim-checklist.md กรอกครบ
- หลักฐาน input + output (สกรีนช็อต/คลิป/log)
- (แนะนำ) Lab D latency
- (แนะนำ) Lab E / E1 (
ex05)
Troubleshooting
หัวข้อที่มีชื่อว่า “Troubleshooting”| อาการ | แนวทาง |
|---|---|
| Link ไม่ขึ้น | Shutdown backends · ตรวจพอร์ต · M02 |
| มีกราฟแต่กระตุ้นแล้วเงียบ | ตรวจ scene/cfg · สคริปต์ M03 · log เฟิร์มแวร์ |
| Log ถูกแต่ UI ไม่ขยับ | เปิดผิดแผง · consumer ไม่ได้ connect |
| ค่า latency สุ่มมาก | ใช้ timestamp ใน log · อย่าจับเวลาด้วยตาอย่างเดียว |
| สลับ Simulator/Bitstream แล้วงง | เคลียร์ข้อมูล · Link ใหม่ทีละโหมด |
| ex05 ค้าง waiting for orientation | เปิด Euler/Quaternion ใน BMI270 mask — ไม่ใช่แค่ accel/gyro |
| ex05 disconnected | Serve ถูกโฟลเดอร์ web-app/ · Studio/bridge เปิดอยู่ |
Lesson · Checklist · Table of Contents · M05 →
อ้างอิงบทเรียนนี้
ถ้านำบทเรียนนี้ไปสอน ทำสไลด์ หรือทำเอกสารต่อ ให้อ้างอิงด้วยข้อความนี้ ถ้าดัดแปลงเนื้อหา ให้เติม (ดัดแปลง)ต่อท้ายชื่อบทเรียน
"แล็บ: I/O ครบวงจรแบบ co-simulation" จาก TESA Open Knowledge โดยสมาคมสมองกลฝังตัวไทย (Thai Embedded Systems Association: TESA) https://github.com/tesaiot/tesa-qualification-program สัญญาอนุญาต CC BY-NC 4.0
ข้อความอ้างอิงภาษาอังกฤษ: "Lab: Co-simulation End-to-End I/O" 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
ลิงก์บทเรียน: https://tesaiot.github.io/tesa-qualification-program/courses/digital-twin/m04-cosimulation/l02-lab/
บทเรียนนี้ดัดแปลงจากต้นฉบับด้านล่าง เมื่ออ้างอิงให้คงเครดิตต้นฉบับไว้ด้วย
https://github.com/drsanti/TESAIoT-Courses/blob/287c21814ba8c75f693136616dcd270349a15966/C2/M04/lab.md · Original content by Asst. Prof. Dr. Santi Nuratch (ผศ.ดร.สันติ นุราช), KMUTT. Course 2 (C2/) 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
เนื้อหาเผยแพร่ภายใต้ CC BY-NC 4.0 นำไปใช้ต่อในงานที่ไม่ใช่เพื่อการค้าได้ โปรดอ้างอิงสมาคมสมองกลฝังตัวไทย (TESA) ทุกครั้ง · วิธีอ้างอิง TESA