แล็บ: การเชื่อมต่อ BLE
Course 1 · Module 7
Type: Hands-on lab (status → advertising → host link; optional scan)
Suggested time: ~2–2.5 hours on hardware
Read first: Lesson · Cheatsheet · ← Table of Contents · ← M06 · M08 →
หมายเหตุ: snippet ในแล็บนี้ใช้ API ของเฟิร์มแวร์ TESAIoT Bitstream ซึ่งยังไม่เปิดซอร์ส ดูรายละเอียดและตัวอย่างเทียบใน SDK สาธารณะได้ที่หมายเหตุต้นบทเรียน BLE สำหรับผลิตภัณฑ์ Edge
โฮสต์
ble-fletยังไม่เผยแพร่ — README ของ TESAIoT_Hackathon (commitf5f09a6) ระบุว่าpython-app/,ble-react/และble-flet/เป็นของผู้ดูแลและไม่อยู่ใน repo สาธารณะ ให้ใช้เส้นทางสำรองที่บทเรียนเสนอไว้แล้ว คือ GATT explorer ทั่วไป เช่น nRF Connect, LightBlue หรือ AIROC™ Bluetooth® Connect
Useful references during the lab
หัวข้อที่มีชื่อว่า “Useful references during the lab”| เอกสาร | ใช้เมื่อ |
|---|---|
| Hackathon ble-flet | desktop central + stream |
| Infineon Find Me CE | mobile app workflow (ผู้ผลิต) |
| M06 lab | เปรียบเทียบ cloud path |
| M04 lab | task + delay |
Lab Goals
หัวข้อที่มีชื่อว่า “Lab Goals”- อ่าน BLE peripheral status จาก CM55
- สั่ง ADV start/stop/restart และยืนยันว่าโฮสต์เห็นชื่อ
TESAIoT-*(หรือชื่อที่ตั้งไว้) - เชื่อมโฮสต์อย่างน้อยหนึ่งตัว (
ble-fletหรือ GATT explorer) - (ทางเลือก) รัน scan สั้น ๆ และบันทึกผลจาก IPC event
Prerequisites
หัวข้อที่มีชื่อว่า “Prerequisites”- บอร์ด + HEX/เฟิร์มแวร์ที่ เปิด BLE profile
- PC หรือโทรศัพท์เปิด Bluetooth
- (แนะนำ) clone TESAIoT_Hackathon และเตรียม
ble-flet - ปิด Central อื่นที่อาจแย่งลิงก์ (nRF Connect ค้างอยู่ ฯลฯ)
Part A — Peripheral status
หัวข้อที่มีชื่อว่า “Part A — Peripheral status”- Flash เฟิร์มแวร์ตัวอย่าง (หรือ build ของคุณที่มี BLE)
- จาก task บน CM55 เรียก:
ipc_ble_periph_status_t st;bool ok = cm55_ble_periph_status_get_sync(&st, 5000U);- บันทึกค่า:
profile_ble_active,stack_ready,connection_id,last_error
Pass when: sync สำเร็จ และ stack_ready (หรือเทียบเท่าตามบิลด์) แสดงว่าสแต็กพร้อม
Part B — Advertising + host discover
หัวข้อที่มีชื่อว่า “Part B — Advertising + host discover”- สั่ง start ADV:
uint8_t result = 0xFF;(void)cm55_ble_periph_adv_ctrl_sync(1U, &result, 5000U);-
บนโฮสต์:
- เส้นทางหลัก: รัน
ble-flet→ ให้มัน huntTESAIoT-* - เส้นทางสำรอง: เปิด nRF Connect / แอปสแกน → หาชื่ออุปกรณ์ที่ตั้งไว้
- เส้นทางหลัก: รัน
-
เมื่อเชื่อมแล้ว อ่าน status อีกครั้ง — คาดหวัง
connection_id != 0และ/หรือtx_notify_enabledตามสถานะโฮสต์
Pass when: โฮสต์เห็นและเชื่อมอุปกรณ์ได้ อย่างน้อยหนึ่งครั้ง พร้อมหลักฐาน (สกรีนช็อต)
Part C — Link behaviour (short soak)
หัวข้อที่มีชื่อว่า “Part C — Link behaviour (short soak)”- สตรีมหรืออ่านค่าสั้น ๆ บนโฮสต์ (~30–60 วินาที)
- กด disconnect บนโฮสต์ แล้วสั่ง ADV start/restart ถ้าจำเป็น
- เชื่อมใหม่ให้สำเร็จ
Pass when: ทำ reconnect ได้โดยไม่ต้อง reflash (ยกเว้นกรณี ADV timeout ที่เอกสาร Hackathon ระบุ — แล้ว reboot ตามคู่มือ)
Part D — Optional scan observer
หัวข้อที่มีชื่อว่า “Part D — Optional scan observer”- ลงทะเบียน
cm55_ble_ipc_set_event_handler - เรียก
cm55_ble_request_scan_all()(หรือscan_name) สั้น ๆ - บันทึกอย่างน้อย 1 รายการ adv (addr / rssi / name) จากล็อก
Pass when (optional): มีล็อกผลสแกนที่อ่านได้
Deliverables checklist
หัวข้อที่มีชื่อว่า “Deliverables checklist”- ตาราง status ก่อน/หลัง connect
- สกรีนช็อตโฮสต์ที่เห็น
TESAIoT-*(หรือชื่อที่ตั้งไว้) - โน้ตสั้น: BLE ต่างจาก MQTT อย่างไรในโปรเจกต์ของคุณ
- (ถ้าทำ Part D) ตัวอย่างล็อกสแกน
Troubleshooting
หัวข้อที่มีชื่อว่า “Troubleshooting”| อาการ | แนวทาง |
|---|---|
| Status timeout | ตรวจว่า HEX เปิด BLE · รอหลังบูตนานขึ้น · ตรวจ IPC |
| สแกนไม่เจอ | ADV start · เข้าใกล้ · ปิด Central อื่น · reboot บอร์ด |
| Connect แล้วหลุดทันที | อย่าเปิดสองแอป Central พร้อมกัน |
ble-flet ไม่เจอหลัง 60s |
ADV timeout — reboot หรือ HEX ที่แก้ auto-restart (ดู Hackathon README) |
| สับสนกับ Wi‑Fi lab | M07 ไม่ต้องมี broker; โฟกัสวิทยุ BLE |
Lesson · Cheatsheet · Table of Contents · M08 →
อ้างอิงบทเรียนนี้
ถ้านำบทเรียนนี้ไปสอน ทำสไลด์ หรือทำเอกสารต่อ ให้อ้างอิงด้วยข้อความนี้ ถ้าดัดแปลงเนื้อหา ให้เติม (ดัดแปลง)ต่อท้ายชื่อบทเรียน
"แล็บ: การเชื่อมต่อ BLE" จาก TESA Open Knowledge โดยสมาคมสมองกลฝังตัวไทย (Thai Embedded Systems Association: TESA) https://github.com/tesaiot/tesa-qualification-program สัญญาอนุญาต CC BY-NC 4.0
ข้อความอ้างอิงภาษาอังกฤษ: "Lab: BLE Connectivity" 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/m07-ble/l02-lab/
บทเรียนนี้ดัดแปลงจากต้นฉบับด้านล่าง เมื่ออ้างอิงให้คงเครดิตต้นฉบับไว้ด้วย
https://github.com/drsanti/TESAIoT-Courses/blob/287c21814ba8c75f693136616dcd270349a15966/C1/M07/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
เนื้อหาเผยแพร่ภายใต้ CC BY-NC 4.0 นำไปใช้ต่อในงานที่ไม่ใช่เพื่อการค้าได้ โปรดอ้างอิงสมาคมสมองกลฝังตัวไทย (TESA) ทุกครั้ง · วิธีอ้างอิง TESA