ข้ามไปยังเนื้อหา

แล็บ: สตรีมเซ็นเซอร์และหน้าต่างข้อมูลพร้อม AI

Course 1 · Module 5
Type: Hands-on lab (read sensors → filter/window → optional host view)
Suggested time: 2.5–3.5 hours

Read first: Lesson · Cheatsheet · ← Table of Contents · ← M04 · M06 →

หมายเหตุ: snippet ในแล็บนี้ใช้ API ของเฟิร์มแวร์ TESAIoT Bitstream ซึ่งยังไม่เปิดซอร์ส ดูรายละเอียดและตัวอย่างเทียบใน SDK สาธารณะได้ที่หมายเหตุต้นบทเรียน สตรีมเซ็นเซอร์ที่พร้อมสำหรับ Edge AI

เอกสาร ใช้เมื่อ
Lesson sensor_*, fusion, SENSOR_CFG
TESAIoT Developer Hub Domain Sensors
Hackathon web-app ex01–ex06 ดูค่าบนโฮสต์
Bitstream Studio Sensor Telemetry deck

  • เรียก sensor_*_startup / read อย่างน้อย สองชนิด (เช่น SHT40 + BMI270)
  • สร้าง task อ่านคาบคงที่ ด้วย FreeRTOS
  • ทำ filter หรือ normalize อย่างน้อยหนึ่งแบบในโค้ดแล็บ
  • สร้าง หน้าต่างข้อมูล (window) จาก IMU หรืออุณหภูมิ
  • (แนะนำ) ดูสตรีมบน Bitstream Studio หรือ Hackathon web-app
  • (แนะนำ) อ่านผล fusion หรือยิง event เมื่อเข้าเงื่อนไข

  • ผ่าน M03 (UART) และ M04 (สร้าง task ได้)
  • บอร์ดมีเซ็นเซอร์ตามคิตที่ใช้
  • รู้ว่าเซ็นเซอร์ใดถูก enable ในเฟิร์มแวร์/โปรเจกต์ของคุณ

  1. sensor_sht40_startup แล้วอ่าน temperature / humidity พิมพ์ UART
  2. sensor_bmi270_startup (ถ้ายังไม่ถูก start จาก boot) แล้วอ่าน acc_*
  3. ตรวจ sensor_*_is_ready ก่อนอ่าน

Pass when: ได้ค่าที่สมเหตุสมผลทั้งสองชนิดบน terminal


  1. สร้าง task อ่านเซ็นเซอร์ด้วย vTaskDelayUntil (เช่น SHT40 ทุก 500–1000 ms หรือ BMI270 ทุก 40 ms)
  2. บันทึกว่าเลือกคาบเท่าไรและทำไม
TickType_t last = xTaskGetTickCount();
const TickType_t period = pdMS_TO_TICKS(40);
for (;;) {
(void)sensor_bmi270_read(&imu);
vTaskDelayUntil(&last, period);
}

Pass when: คาบอ่านสม่ำเสมอโดยไม่ busy-wait


  1. ทำ EMA (หรือ median หน้าต่างสั้น) บนอุณหภูมิหรือแกน accel
  2. Normalize ค่าอย่างน้อยหนึ่งช่องไปช่วงที่กำหนด (เช่นประมาณ [-1, 1] หรือ 0..1)
  3. พิมพ์ทั้งค่าดิบและค่าหลังประมวลผล

Pass when: อธิบายได้ว่า filter ลด noise อย่างไรจากการสังเกตบน terminal


  1. สร้าง ring buffer / window อย่างน้อย 16–32 ตัวอย่างจาก BMI270 หรือ อนุกรมอุณหภูมิ
  2. เมื่อหน้าต่างเต็ม ให้คำนวณอย่างน้อยหนึ่งฟีเจอร์ (เช่น mean, variance, max−min)
  3. พิมพ์ฟีเจอร์ทาง UART เป็นคาบ

Pass when: ได้เวกเตอร์สรุปจากหน้าต่างเต็มอย่างน้อยหนึ่งครั้งต่อวินาที (หรือตามคาบที่สมเหตุสมผล)


  • cm55_imu_fusion_bridge_push_raw_components + get_latest_result
  • พิมพ์ pitch/roll หรือ orientation
  • Flash/เชื่อมตามชุดที่ใช้ → เปิด Bitstream Studio หรือ Hackathon web-app
  • ยืนยันว่าค่าเซ็นเซอร์บนโฮสต์ขยับตรงกับบอร์ด
  • เมื่อฟีเจอร์หรือ EMA เกินเกณฑ์ → เปิด LED + ข้อความ EVENT ...

Pass when: ทำครบหนึ่งตัวเลือกและมีหลักฐาน (terminal / UI / LED)


  1. เซ็นเซอร์ที่ใช้ + คาบ sampling
  2. วิธี filter / normalize
  3. ขนาดหน้าต่าง + ฟีเจอร์ที่คำนวณ
  4. (ถ้ามี) ผล fusion หรือภาพหน้าจอโฮสต์
  5. สิ่งที่จะส่งต่อไป cloud ใน M06 (payload แนวคิด)

อาการ แนวทาง
is_ready เป็น false ยังไม่ startup · เซ็นเซอร์ไม่ถูก build เข้าโปรเจกต์ · บัสมีปัญหา
อ่านได้เป็นครั้งคราว คาบถี่เกิน · บัสแย่งกับ task อื่น · ลอง try_read / ลดอัตรา
Mag อ่านไม่ได้ผ่าน I2C lock BMM350 เป็น I3C — ใช้ sensor_bmm350_* ตาม SDK
Fusion ไม่อัปเดต ยังไม่ push raw · CM33 fusion ยังไม่รันในคอนฟิกที่ใช้
โฮสต์ไม่มีค่า ยังไม่ Link Bitstream · HEX/VSIX คนละเวอร์ชัน · SENSOR_CFG disabled

  • Lab A–D ผ่าน
  • Lab E อย่างน้อย 1 ข้อ
  • กรอกตารางใน sensor-ai-prep.md
  • รายงานสั้นครบ

Lesson · Cheatsheet · Table of Contents · M06 →

อ้างอิงบทเรียนนี้

ถ้านำบทเรียนนี้ไปสอน ทำสไลด์ หรือทำเอกสารต่อ ให้อ้างอิงด้วยข้อความนี้ ถ้าดัดแปลงเนื้อหา ให้เติม (ดัดแปลง)ต่อท้ายชื่อบทเรียน

"แล็บ: สตรีมเซ็นเซอร์และหน้าต่างข้อมูลพร้อม AI" จาก TESA Open Knowledge โดยสมาคมสมองกลฝังตัวไทย (Thai Embedded Systems Association: TESA) https://github.com/tesaiot/tesa-qualification-program สัญญาอนุญาต CC BY-NC 4.0

ข้อความอ้างอิงภาษาอังกฤษ: "Lab: Sensor Streams and AI-Ready Windows" 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/firmware-sdk-edge-ai/m05-sensor-data/l02-lab/

บทเรียนนี้ดัดแปลงจากต้นฉบับด้านล่าง เมื่ออ้างอิงให้คงเครดิตต้นฉบับไว้ด้วย
https://github.com/drsanti/TESAIoT-Courses/blob/287c21814ba8c75f693136616dcd270349a15966/C1/M05/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 ฉบับเต็ม

TESA Open Knowledge · © 2026 สมาคมสมองกลฝังตัวไทย (TESA) · CC BY-NC 4.0

เนื้อหาเผยแพร่ภายใต้ CC BY-NC 4.0 นำไปใช้ต่อในงานที่ไม่ใช่เพื่อการค้าได้ โปรดอ้างอิงสมาคมสมองกลฝังตัวไทย (TESA) ทุกครั้ง · วิธีอ้างอิง TESA