แล็บ: Wi-Fi, MQTT connect, publish และ subscribe
Course 1 · Module 6
Type: Hands-on lab (network + broker + device)
Suggested time: 2.5–3.5 hours
Read first: Lesson · Cheatsheet · ← Table of Contents · ← M05 · M07 BLE →
หมายเหตุ: snippet ในแล็บนี้ใช้ API ของเฟิร์มแวร์ TESAIoT Bitstream ซึ่งยังไม่เปิดซอร์ส ดูรายละเอียดและตัวอย่างเทียบใน SDK สาธารณะได้ที่หมายเหตุต้นบทเรียน MQTT และ MQTTs บนอุปกรณ์ Edge
Useful references during the lab
หัวข้อที่มีชื่อว่า “Useful references during the lab”| เอกสาร | ใช้เมื่อ |
|---|---|
| Lesson | cm55_trigger_mqtt_*, CONFIG, topics |
| Hackathon MQTT pages | web-app/ex09–ex15 |
| Bitstream Studio | Start broker / MQTT tools |
| HiveMQ MQTT Essentials | ทบทวน QoS / retain |
Lab Goals
หัวข้อที่มีชื่อว่า “Lab Goals”- Join Wi‑Fi จนสถานะ CONNECTED
- Connect MQTT ไปยัง broker ที่เลือกใช้
- Publish ข้อความหรือ telemetry อย่างน้อยหนึ่งครั้ง
- Subscribe (จากโฮสต์หรืออุปกรณ์) แล้วเห็นข้อความ
- อธิบายความต่าง MQTT vs MQTTs และบันทึกค่าคอนฟิกที่ใช้
- (แนะนำ) ดู JSON telemetry จากเซ็นเซอร์ (ต่อจาก M05)
Prerequisites
หัวข้อที่มีชื่อว่า “Prerequisites”- ผ่าน M05 อย่างน้อยอ่านเซ็นเซอร์ได้ (สำหรับ telemetry)
- SSID / รหัส Wi‑Fi ของห้อง (ไม่บันทึกลง Git)
- Broker host/port ที่เลือกใช้
- เครื่องมือ subscribe บน PC (MQTTX, mosquitto_sub, หรือ Hackathon web-app)
อย่า publish รหัสผ่านหรือใบรับรองจริงลงรายงานสาธารณะ
Lab A — Wi‑Fi link (required)
หัวข้อที่มีชื่อว่า “Lab A — Wi‑Fi link (required)”- เรียก
cm55_trigger_connectหรือexample_wifi_ui_connectตามโปรเจกต์ - อ่าน
cm55_get_wifi_statusจนIPC_WIFI_LINK_CONNECTED - บันทึก SSID (ไม่ต้องบันทึกรหัสผ่าน)
Pass when: ลิงก์ Wi‑Fi พร้อมก่อนแตะ MQTT
Lab B — MQTT connect + status (required)
หัวข้อที่มีชื่อว่า “Lab B — MQTT connect + status (required)”- ตั้ง policy ให้ MQTT ใช้งานได้ (เช่น factory default)
cm55_trigger_mqtt_connect- อ่าน
cm55_get_mqtt_statusจนstate == CONNECTED (2) - จด
broker_host,port,tls,effective_client_id
(void)cm55_trigger_mqtt_connect();/* poll cm55_get_mqtt_status until connected or timeout */Pass when: สถานะ CONNECTED และมี client id ให้จด
Lab C — Publish and observe (required)
หัวข้อที่มีชื่อว่า “Lab C — Publish and observe (required)”เลือกอย่างน้อยหนึ่งทาง:
C1 Telemetry path
หัวข้อที่มีชื่อว่า “C1 Telemetry path”- เปิดเซ็นเซอร์ + policy
TELEMETRY_PUBLISH - Subscribe บนโฮสต์ที่ topic
bitstream/<MAC12>/sensors(หรือ topic ที่คุณตั้งไว้) - ยืนยันว่ามี JSON เข้ามา
C2 Explicit publish
หัวข้อที่มีชื่อว่า “C2 Explicit publish”- ใช้เส้นทางใดเส้นทางหนึ่ง (
cm33_mqtt_stack_publishหรือแผง Studio) ส่ง{"hello":1} - เห็นข้อความบน subscriber
Pass when: เห็น payload บนเครื่องมือโฮสต์อย่างน้อยหนึ่งครั้ง
Lab D — Subscribe / command path (required)
หัวข้อที่มีชื่อว่า “Lab D — Subscribe / command path (required)”- Subscribe ฝั่งอุปกรณ์ที่ topic actuators (หรือใช้คอนฟิก topic table ที่มีอยู่)
- จากโฮสต์ publish คำสั่งทดสอบไปยัง topic นั้น
- บันทึกว่าอุปกรณ์ได้รับอย่างไร (log / LED / เหตุการณ์ตามที่เฟิร์มแวร์รองรับ)
Pass when: มีหลักฐานว่าข้อความจาก cloud/โฮสต์ถึงอุปกรณ์ (หรือถึง log ของสแต็ก)
Lab E — Choose one (recommended)
หัวข้อที่มีชื่อว่า “Lab E — Choose one (recommended)”E1 MQTT vs MQTTs table
หัวข้อที่มีชื่อว่า “E1 MQTT vs MQTTs table”กรอกตารางเปรียบเทียบจากการทดลองหรือจากเอกสารของชุดที่ใช้: พอร์ต, tls, CA
E2 Hackathon web MQTT
หัวข้อที่มีชื่อว่า “E2 Hackathon web MQTT”รัน ex09–ex14 ตาม Hackathon README (broker ใน Studio ถ้าจำเป็น)
E3 Payload design
หัวข้อที่มีชื่อว่า “E3 Payload design”ออกแบบ JSON สำหรับ event จาก M05 (เกณฑ์อุณหภูมิ/ฟีเจอร์) แล้วลอง publish หนึ่งครั้ง
Pass when: ส่งตาราง/สกรีนช็อต/ไฟล์ออกแบบสั้น ๆ
Short report (10–15 lines)
หัวข้อที่มีชื่อว่า “Short report (10–15 lines)”- Wi‑Fi SSID (ไม่มีรหัสผ่าน)
- Broker host:port และ tls 0/1
- Client id / MAC topic ที่ใช้
- หลักฐาน publish + subscribe
- ข้อจำกัดที่สังเกต (เช่น QoS ของ telemetry, ต้องมี Wi‑Fi ก่อน)
Troubleshooting
หัวข้อที่มีชื่อว่า “Troubleshooting”| อาการ | แนวทาง |
|---|---|
| MQTT error / ไม่เชื่อม | Wi‑Fi ยังไม่ขึ้น · MQTT_ENABLED ปิด · host/port ผิด |
| เชื่อมได้แต่ไม่มี telemetry | เซ็นเซอร์ไม่ publish · ปิด TELEMETRY_PUBLISH · topic ผิด |
| TLS fail | พอร์ตไม่ใช่ 8883 · CA ไม่ตรง broker · นาฬิกาอุปกรณ์เพี้ยน (ถ้ามีผลตรวจใบรับรอง) |
| Subscribe ไม่เห็นของ | คนละ MAC / คนละ prefix topic · คนละ broker |
| Auth fail | username/password ว่างหรือผิด |
Submit checklist
หัวข้อที่มีชื่อว่า “Submit checklist”- Lab A–D ผ่าน
- Lab E อย่างน้อย 1 ข้อ
- กรอก mqtt-cloud.md
- รายงานสั้นไม่มีความลับ
Lesson · Cheatsheet · Table of Contents · M07 BLE →
อ้างอิงบทเรียนนี้
ถ้านำบทเรียนนี้ไปสอน ทำสไลด์ หรือทำเอกสารต่อ ให้อ้างอิงด้วยข้อความนี้ ถ้าดัดแปลงเนื้อหา ให้เติม (ดัดแปลง)ต่อท้ายชื่อบทเรียน
"แล็บ: Wi-Fi, MQTT connect, publish และ subscribe" จาก TESA Open Knowledge โดยสมาคมสมองกลฝังตัวไทย (Thai Embedded Systems Association: TESA) https://github.com/tesaiot/tesa-qualification-program สัญญาอนุญาต CC BY-NC 4.0
ข้อความอ้างอิงภาษาอังกฤษ: "Lab: Wi-Fi, MQTT Connect, Publish, and Subscribe" 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/m06-mqtt/l02-lab/
บทเรียนนี้ดัดแปลงจากต้นฉบับด้านล่าง เมื่ออ้างอิงให้คงเครดิตต้นฉบับไว้ด้วย
https://github.com/drsanti/TESAIoT-Courses/blob/287c21814ba8c75f693136616dcd270349a15966/C1/M06/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