บทเรียน 3.2 — แล็บ: GPIO และอุปกรณ์ต่อพ่วงบนฮาร์ดแวร์จริง

ลงมือทีละบล็อก: LED + ปุ่ม, UART log, แล้วเลือก PWM / ADC / I²C อย่างน้อยหนึ่งอย่าง ก่อนรวมเป็นมินิวงจร

หลักสูตร TESA Firmware SDK สำหรับ Edge AI — โมดูล 3 · แล็บ

TESA Open Knowledge · © 2026 สมาคมสมองกลฝังตัวไทย (TESA) · ดัดแปลงจากงานของ ผศ.ดร.สันติ นุราช (KMUTT) · CC BY-NC 4.0

เป้าหมาย

เมื่อทำครบ คุณจะ

  1. ทำให้ปุ่มสลับ LED บนบอร์ดจริงได้ (Lab A)
  2. ส่ง log ทาง UART ที่อ่านได้บน terminal (Lab B)
  3. ทำอุปกรณ์ต่อพ่วงเพิ่มอย่างน้อยหนึ่งชนิดจาก PWM, ADC หรือ I²C และจดชื่อฟังก์ชันจริงที่เรียก (Lab C)
TESA Open Knowledge · © 2026 สมาคมสมองกลฝังตัวไทย (TESA) · ดัดแปลงจากงานของ ผศ.ดร.สันติ นุราช (KMUTT) · CC BY-NC 4.0

ก่อนเริ่ม

  • [ ] ผ่านเกณฑ์ โมดูล 2
  • [ ] โปรเจกต์ตัวอย่างที่ลิงก์ TESA Firmware SDK แล้ว
  • [ ] สาย USB + serial terminal
  • [ ] รู้คิตในมือ (AI vs Eval — มีผลต่อปุ่มที่สองและ POT)

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

TESA Open Knowledge · © 2026 สมาคมสมองกลฝังตัวไทย (TESA) · ดัดแปลงจากงานของ ผศ.ดร.สันติ นุราช (KMUTT) · CC BY-NC 4.0

ดูของจริงก่อน — เกณฑ์ผ่านของแต่ละบล็อก

บล็อก เกณฑ์ผ่าน
Lab A (GPIO, required) กดปุ่มแล้ว LED เปลี่ยนสถานะอย่างเสถียร
Lab B (UART, required) เห็นข้อความตรงกับเหตุการณ์ปุ่ม
Lab C (เลือก ≥ 1, required) ตามชนิดที่เลือก — ดูสไลด์ถัดไป
Lab D (มินิรวม, แนะนำ) รวมผลจาก A+B กับ C เข้าด้วยกัน
TESA Open Knowledge · © 2026 สมาคมสมองกลฝังตัวไทย (TESA) · ดัดแปลงจากงานของ ผศ.ดร.สันติ นุราช (KMUTT) · CC BY-NC 4.0

ฝึกเติม/แล็บ (1) — Lab A: GPIO LED + Button

  1. เรียก led_controller_init (ถ้าโปรเจกต์ยังไม่ init) และทดลอง led_controller_set / led_controller_toggle
  2. เรียก cm55_button_init แล้วผูก cm55_button_on_pressed(BUTTON_ID_0, …) ให้สลับ LED
  3. Flash แล้วสาธิตบนบอร์ด
/* แนวทางสั้น — ดูรายละเอียดใน บทเรียน 3.1 หัวข้อ 2 */
(void)led_controller_init();
(void)cm55_button_init();
(void)cm55_button_on_pressed(BUTTON_ID_0, on_btn_pressed);
TESA Open Knowledge · © 2026 สมาคมสมองกลฝังตัวไทย (TESA) · ดัดแปลงจากงานของ ผศ.ดร.สันติ นุราช (KMUTT) · CC BY-NC 4.0

ฝึกเติม/แล็บ (2) — Lab B: UART log

  1. ในตัวจัดการปุ่ม (หรือ loop) พิมพ์ข้อความ เช่น btn toggled
  2. เปิด terminal บนพอร์ต KitProg3 ตาม baud ของโปรเจกต์
  3. ยืนยันว่าข้อความตรงกับเหตุการณ์ปุ่ม
printf("btn toggled\r\n");
/* หรือ */ LOG_INFO("LAB", "btn toggled");
TESA Open Knowledge · © 2026 สมาคมสมองกลฝังตัวไทย (TESA) · ดัดแปลงจากงานของ ผศ.ดร.สันติ นุราช (KMUTT) · CC BY-NC 4.0

ฝึกเติม/แล็บ (3) — Lab C: เลือกอย่างน้อยหนึ่งอย่าง

C1 PWM

(void)bitstream_led_pwm_init();
(void)bitstream_led_pwm_set_brightness(0, 20);
(void)bitstream_led_pwm_set_brightness(0, 80);

C2 ADC (Eval kit with POT)

(void)cm55_adc_init();
int16_t mv = cm55_adc_read_pot_mv();
printf("POT mV=%d\r\n", (int)mv);

C3 I²C sensor — sensor_sht40_startup() / sensor_sht40_read(&s) (หรือเซ็นเซอร์อื่นบนบอร์ดของคุณ เช่น sensor_bmi270_*)

TESA Open Knowledge · © 2026 สมาคมสมองกลฝังตัวไทย (TESA) · ดัดแปลงจากงานของ ผศ.ดร.สันติ นุราช (KMUTT) · CC BY-NC 4.0

ฝึกเติม/แล็บ (4) — Lab D: Mini Integration (แนะนำ)

รวม A+B กับผลจาก C เช่น ADC → PWM duty หรือปุ่ม → สลับโหมด + UART log

หน่วงใน task:

vTaskDelay(pdMS_TO_TICKS(50));

Optional: เปิด Bitstream Studio ถ้าเฟิร์มแวร์ส่ง telemetry

Short report (5–10 บรรทัด): ชื่อ BSP/บอร์ด · ตารางงาน → ชื่อ API จริง (จาก API map) · ผล Lab A/B/C

TESA Open Knowledge · © 2026 สมาคมสมองกลฝังตัวไทย (TESA) · ดัดแปลงจากงานของ ผศ.ดร.สันติ นุราช (KMUTT) · CC BY-NC 4.0

เช็กความเข้าใจ — ตรวจอาการก่อนขอความช่วยเหลือ

ถ้าติดปัญหา ให้ตอบตัวเองก่อนว่าน่าจะตรงแถวไหน:

  1. LED ไม่ติด — อะไรที่ควรตรวจก่อน (id, active level, การ init)
  2. ปุ่มไม่มี event — อะไรที่มักลืมทำ
  3. UART เงียบ — อะไรที่มักเป็นสาเหตุ
  4. I²C fail — อะไรที่มักลืมทำเมื่อเขียนไดรเวอร์ระดับต่ำเอง
  5. ADC อ่านได้ 0 ตลอด — สาเหตุที่เป็นไปได้คืออะไร
TESA Open Knowledge · © 2026 สมาคมสมองกลฝังตัวไทย (TESA) · ดัดแปลงจากงานของ ผศ.ดร.สันติ นุราช (KMUTT) · CC BY-NC 4.0

ไปต่อ

ก่อนส่งงาน ตรวจกับตัวเองว่า:

  • [ ] Lab A ผ่าน
  • [ ] Lab B ผ่าน
  • [ ] Lab C ≥ 1 ข้อผ่าน
  • [ ] กรอก peripheral-api-map.md
  • [ ] (แนะนำ) Lab D

พร้อมแล้ว ไปต่อ โมดูล 4 — การเขียนเฟิร์มแวร์แบบ RTOS

บทเรียนโมดูล 4 →

TESA Open Knowledge · © 2026 สมาคมสมองกลฝังตัวไทย (TESA) · ดัดแปลงจากงานของ ผศ.ดร.สันติ นุราช (KMUTT) · CC BY-NC 4.0

แหล่งที่มา

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

เนื้อหาต้นฉบับโดย ผศ.ดร.สันติ นุราช ภาควิชาวิศวกรรมระบบควบคุมและเครื่องมือวัด คณะวิศวกรรมศาสตร์
มหาวิทยาลัยเทคโนโลยีพระจอมเกล้าธนบุรี (KMUTT) (https://github.com/drsanti) ภายใต้การสนับสนุนของสมาคมสมองกลฝังตัวไทย (TESA)
นำเข้าจาก drsanti/TESAIoT-Courses — C1 (commit 287c218) ภายใต้สัญญาอนุญาต CC BY 4.0

ไม่มีภาพจากบุคคลที่สามในสไลด์ชุดนี้

TESA Open Knowledge · © 2026 สมาคมสมองกลฝังตัวไทย (TESA) · ดัดแปลงจากงานของ ผศ.ดร.สันติ นุราช (KMUTT) · CC BY-NC 4.0