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

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

Course 1 · Module 3
Type: Hands-on lab (block-by-block, then short integration)
Suggested time: 2.5–3 hours

Read first: Lesson · API map · ← Table of Contents · ← M02 · M04 →

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

เอกสาร ใช้เมื่อ
TESAIoT Developer Hub ตัวอย่าง GPIO / Sensors / Embedded
Snippet ใน Lesson ชื่อฟังก์ชันจริงของ TESA Firmware SDK
TESAIoT_Hackathon HEX / Flasher หากใช้แพ็กสำเร็จรูป
Bitstream Studio ดู telemetry (เสริม)

  • ควบคุม LED ด้วย led_controller_* (หรือ Cy_GPIO_*)
  • รับเหตุการณ์ปุ่มด้วย cm55_button_*
  • ส่ง log ทาง UART (printf / LOG_INFO / cm55_uart_send)
  • ทำอย่างน้อยหนึ่งอย่างจาก: PWM (bitstream_led_pwm_*) · ADC (cm55_adc_*) · I²C (sensor_sht40_* หรือเซ็นเซอร์อื่นที่มีบนบอร์ดของคุณ)
  • กรอกชื่อ API จริงใน peripheral-api-map.md

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

  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 แล้วสาธิตบนบอร์ด

Pass when: กดปุ่มแล้ว LED เปลี่ยนสถานะอย่างเสถียร

/* แนวทางสั้น — ดูรายละเอียดใน Lesson §2 */
(void)led_controller_init();
(void)cm55_button_init();
(void)cm55_button_on_pressed(BUTTON_ID_0, on_btn_pressed);

  1. ใน callback ปุ่ม (หรือ loop) พิมพ์ข้อความ เช่น btn toggled
  2. เปิด terminal บนพอร์ต KitProg3 ตาม baud ของโปรเจกต์
  3. ยืนยันว่าข้อความตรงกับเหตุการณ์ปุ่ม
printf("btn toggled\r\n");
/* หรือ */ LOG_INFO("LAB", "btn toggled");

Pass when: เห็นข้อความตรงกับเหตุการณ์ปุ่ม


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

Pass when: เห็นความสว่างต่างกันชัดเจนอย่างน้อย 2 ระดับ

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

Pass when: ค่าเปลี่ยนเมื่อหมุน POT และพิมพ์ทาง UART ได้

(void)sensor_sht40_startup();
sht40_sample_t s;
if (sensor_sht40_read(&s)) {
printf("T=%.2f RH=%.2f\r\n", (double)s.temperature, (double)s.humidity);
}

(หรือเซ็นเซอร์อื่นที่มีบนบอร์ดของคุณ — sensor_bmi270_* ฯลฯ)

Pass when: อ่านค่าได้และพิมพ์ทาง UART


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

หน่วงใน task:

vTaskDelay(pdMS_TO_TICKS(50));

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


  1. ชื่อ BSP / บอร์ด
  2. ตารางงาน → ชื่อ API จริง (จาก API map)
  3. ผล Lab A/B/C

อาการ แนวทางแก้
LED ไม่ติด led_id_t ผิด · active level · ยังไม่ init BSP
ปุ่มไม่มี event ยังไม่ cm55_button_init / ผูก callback · ใช้ผิด BUTTON_ID_*
UART เงียบ พอร์ต COM / baud · retarget ยังไม่พร้อม · ล็อก cm55_uart_out_* ค้าง
I²C fail เซ็นเซอร์ไม่พร้อม · ลืม lock บัสเมื่อเขียนไดรเวอร์ต่ำ · ที่อยู่ผิด
ADC = 0 ตลอด คิตไม่มี POT · ยังไม่ cm55_adc_init
PWM ไม่เปลี่ยน ยังไม่ bitstream_led_pwm_init · led_id ผิดช่วง

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

Lesson · API map · Table of Contents · M04 →

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

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

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

ข้อความอ้างอิงภาษาอังกฤษ: "Lab: GPIO and Peripherals on Real Hardware" 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/m03-gpio-peripherals/l02-lab/

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