ภาพพื้นหลังปกบทเรียน

บทเรียน 1.6 — ลงมือทำ: พาค่าจริงออกจากบอร์ด และสรุปโมดูล 1

บอร์ดคุยกับโลก · ค่าที่วัดบนโต๊ะนี้ไปโผล่บนเครื่องคนอื่น แล้วคำสั่งจากที่ไกลกลับมาสั่งของบนโต๊ะเรา

โมดูล 1 — แอปพลิเคชันบนจอที่มีอยู่แล้ว

ต่อจากบทเรียน 1.5 — ค่าออกไป คำสั่งกลับมา: MQTT บน broker สาธารณะ

TESA Open Knowledge · © 2026 สมาคมสมองกลฝังตัวไทย (TESA) · ดัดแปลงจาก AIoT in Action (AIC มหาวิทยาลัยบูรพา) · CC BY-NC 4.0

MVP checkpoint — ผ่านชุดบทเรียนนี้เมื่อ

ทีมต่อบอร์ดเข้าเครือข่ายด้วย wifi.connect() แล้วรายงานหมายเลข IP ขึ้นจอสำเร็จ

แปลเป็นสิ่งที่ตรวจได้จริง:

  • [ ] แก้ WIFI_SSID และ WIFI_PASS ให้ตรงกับ Hotspot มือถือของทีมได้เอง
  • [ ] 01_wifi_first_connect.py ขึ้นเลข IP ที่ ไม่ใช่ 0.0.0.0 บนจอ
  • [ ] จดเวลาที่ connect() ใช้ทั้งกรณีรหัสถูกและรหัสผิด พร้อมอธิบายว่าทำไมต่างกัน
  • [ ] 04_scan_the_room.py ขึ้นรายชื่อวงในห้อง และชี้ได้ว่าเลข status() กับเลขจาก scan() ต่างกันตรงไหน
  • [ ] 02_link_uptime.py เดินครบ 30 วินาที ทำให้ลิงก์หลุดจริงหนึ่งครั้ง แล้วชี้ได้ว่าหลุดวินาทีที่เท่าไร
  • [ ] 05_value_leaves_the_board.py รันแล้วเห็นค่าของทีมตัวเองบนหน้าเว็บ my_first_reader.html — หรือถ้าเน็ตของห้องกันไว้ อ่านจากจอได้ว่าสายขาดที่ขั้นไหนและเพราะอะไร
  • [ ] 06_command_comes_back.py รันแล้วบอกได้ว่าบอร์ดกำลังฟังหัวข้ออะไร และคำสั่งที่มันรู้จักมีอะไรบ้าง
  • [ ] 03_your_link_rule.py รายงานครบ 2 ครั้ง (เลขสองตัวบนจอตรงกัน)
  • [ ] ถ่ายรูปหน้าจอบอร์ดแนบในบันทึกการเรียน

ข้อที่ทีมส่วนใหญ่ตกคือข้อที่ห้า เพราะต้องออกแรงทำให้มันพังจริง · ข้อ 05 กับ 06 ผ่านเมื่อเห็นค่าของทีมบนหน้าเว็บ หรือถ้าเน็ตขององค์กรกันพอร์ตไว้ทั้งห้อง ทีมชี้จากจอได้ว่าสายขาดที่ขั้นไหน

TESA Open Knowledge · © 2026 สมาคมสมองกลฝังตัวไทย (TESA) · ดัดแปลงจาก AIoT in Action (AIC มหาวิทยาลัยบูรพา) · CC BY-NC 4.0

กับดักที่เจอบ่อย

อาการ สาเหตุที่แท้จริง วิธีแก้
จอนิ่งค้างนาน คิดว่าบอร์ดแฮงก์ wifi.connect() กำลังทำงาน มันบล็อกได้ถึงราว 85 วินาที รอให้จบ อย่ากดรีเซ็ต และคราวหน้าใส่ป้าย + ui.poll() ไว้ก่อนบรรทัดนั้น
จอว่างเปล่าตลอดช่วงที่รอ ทั้งที่เขียนป้ายไว้แล้ว ลืมเคาะ ui.poll() ก่อนเข้าบรรทัดที่บล็อก ย้าย ui.poll() ขึ้นมาไว้ก่อน wifi.connect() และก่อน wifi.scan()
โค้ดบอกว่าได้ IP แล้ว แต่ส่งอะไรก็ไม่ออก เขียน if wifi.ip(): — "0.0.0.0" เป็นสตริงที่ไม่ว่าง จึงถือว่าจริง เทียบตรง ๆ if wifi.ip() == "0.0.0.0":
connect() คืน False ทุกครั้ง SSID หรือรหัสผ่านผิด หรือบอร์ดไม่ได้ยินวงนั้นเลย เปิด 04_scan_the_room.py ก่อน แล้วดูว่าชื่อวงโผล่ในรายการไหม
กราฟความแรงสัญญาณเป็นเส้นศูนย์ตลอด หยิบ wifi.status()["rssi"] มาใช้ ซึ่งเป็นค่าตายตัว ความแรงจริงมาจาก wifi.scan() เท่านั้น
mqtt.connect() ได้ TypeError ใส่ชื่ออาร์กิวเมนต์เป็น user= ชื่อจริงคือ username=
ส่งไปได้สองสามใบแล้วโปรแกรมตาย publish() ตอนสายหลุดไม่คืน False มันโยน OSError ครอบด้วย try / except OSError ทุกครั้ง ไม่ใช่เช็กแค่ค่าที่คืน
ยิงคำสั่งมาสามใบ แต่บอร์ดนับได้ใบเดียว กล่องรับของ get_message() มีช่องเดียว ใบใหม่ทับใบเก่า ลด POLL_MS ให้ถามถี่ขึ้น และห้ามหลับยาวในลูป
สองบอร์ดผลัดกันหลุดทั้งบทเรียน client_id ซ้ำกัน broker เตะตัวเก่าออกทุกครั้งที่ตัวใหม่เข้ามา บน broker สาธารณะชนได้กับทุกคนในโลก ใช้ TEAM ที่ไม่ซ้ำใคร (เช่น nok4821 หรือเลขทีมที่ผู้จัดแจก) และคง "bento-aiot-" ไว้หน้า DEVICE_ID
บอร์ดส่งครบแต่หน้าเว็บว่าง TEAM ในหน้าเว็บกับในไฟล์ไม่ตรงกัน หรือเปิดหน้าเว็บหลังบอร์ดส่งจบแล้ว (เฟิร์มแวร์ส่ง retain ไม่ได้) ตรวจ TEAM สองที่ให้ตรงกัน แล้วรันไฟล์ 05 ใหม่ขณะหน้าเว็บเปิดอยู่
หน้าเว็บขึ้นว่าผิดพลาดหรือต่อไม่ได้ เน็ตกันพอร์ต 8884 ของเบราว์เซอร์ ลองตัวสำรองที่ผู้สอนประกาศ wss://test.mosquitto.org:8081/mqtt หรือต่อฮอตสปอตมือถือ
ตั้ง tesaiot.config_set("port", "1883") แล้วไม่มีผล tesaiot.connect() เลือกพอร์ตจากโหมด TLS เอง (8883/8884) ไม่อ่านคีย์ port ใช้โมดูล mqtt กับ broker 1883 ส่วน tesaiot รอบทเรียน 4.4–4.6 กับ 4.7–4.9
seg.value(4218) ขึ้น 4218 แต่ไม่ได้ 4218.0 .value() ส่งได้แต่จำนวนเต็ม ใช้ seg.text("4218.0") เมื่อต้องการทศนิยม
ข้อความไทยยาว ๆ ขาดหายท้ายบรรทัด เกินเพดาน — lcd.print() 127 ไบต์ ป้าย ui 126 ไบต์ ไทยตัวละ 3 ไบต์ แบ่งเป็นสองบรรทัด หรือใช้ท่าของ 06_safe_print.py

ครึ่งหนึ่งของตารางนี้ ไม่มี error ให้จับสักตัว โปรแกรมเดินผ่านไปเงียบ ๆ แล้วรายงานสิ่งที่ไม่จริง นั่นคือประเภทของบั๊กที่แพงที่สุดในงานเครือข่าย

TESA Open Knowledge · © 2026 สมาคมสมองกลฝังตัวไทย (TESA) · ดัดแปลงจาก AIoT in Action (AIC มหาวิทยาลัยบูรพา) · CC BY-NC 4.0

ลงมือทำ — งานของทีมในชุดบทเรียนนี้

ขั้นที่ 1 · ขึ้นวงให้ได้ ไฟล์ 01 · 04 ขั้นที่ 2 · เฝ้าให้เห็นหลุด ไฟล์ 02 · เดินให้สุดห้อง ขั้นที่ 3 · ออกไปกลับมา ไฟล์ 05 · 06 ขั้นที่ 4 · นิยามเอง ไฟล์ 03 · จนสองเลขตรงกัน

งานหลักของทีมคือไฟล์ตัวอย่างของชุดบทเรียนนี้เอง ทำตามลำดับในตารางแล้วทำบล็อก "ตาคุณ" ท้ายไฟล์ให้ครบทุกไฟล์ · ผลที่ทีมจดได้ เอาไปเติมในไฟล์ฝึก s02_ai_observer.py ซึ่งเป็นสมุดบันทึกผลการทดลองของทีม (เฉลยอยู่ที่ solution/ ของบทเรียนนี้)

ทำสี่ขั้น: หนึ่ง ขึ้นวงให้ได้และรู้ว่าบอร์ดได้ยินอะไรบ้าง สอง เฝ้าลิงก์แล้วออกแรงทำให้มันหลุดจริง สาม ส่งค่าออกไปแล้วรับคำสั่งกลับมา สี่ เขียนกฎ is_usable() ของทีมเองจนบอร์ดบอกว่าผ่าน

ทีมที่เสร็จก่อน ลองรัน 05 กับ 06 พร้อมกันสองบอร์ดในทีมข้าง ๆ โดยให้บอร์ดหนึ่งส่งค่าลูกบิด แล้วอีกบอร์ดหนึ่งเป็นคนสั่งไฟกลับมา สองทีมจะได้เห็นว่าระบบที่มีอุปกรณ์มากกว่าหนึ่งตัวหน้าตาเป็นอย่างไร

อย่าแก้หลายไฟล์พร้อมกันแล้วค่อยรันทีเดียว — ไฟล์ละครั้ง รันครั้ง จะรู้ทันทีว่าพังที่ไหน

TESA Open Knowledge · © 2026 สมาคมสมองกลฝังตัวไทย (TESA) · ดัดแปลงจาก AIoT in Action (AIC มหาวิทยาลัยบูรพา) · CC BY-NC 4.0

ส่งต่อข้อความรอบห้อง — เวลานี้เป็นของทั้งห้อง

ผู้สอน team01 team02 ... team19 team00 หยุดนาฬิกา ทุกทอดต้องผ่านบอร์ดจริงของทีม หน้าเว็บรวมไม่เห็นหัวข้อ cmd จึงลัดทางไม่ได้

ทุกบอร์ดรัน 06_command_comes_back.py ด้วย TEAM ของตัวเอง ไฟล์ 06 ฟังนาน 15 นาที (LISTEN_MS = 900000) พอสำหรับสองรอบ ถ้ารันค้างไว้นานกว่านั้นก่อนเกม ให้กดรันใหม่ก่อนเริ่ม

  1. ผู้สอนส่งคำลับสั้น ๆ เป็น say ไปที่ team01 จากหน้ารวม https://advance-innovation-centre-aic.github.io/embedded-systems-for-aiot-developer/examples/web/mqtt_dashboard.html
  2. ทีมที่เห็นคำบนจอบอร์ดตัวเอง ให้ศูนย์ควบคุมส่งคำเดิมไปทีมถัดไปจากหน้าเดียวกัน
  3. ทีมสุดท้ายส่งกลับไป team00 บนโต๊ะผู้สอน นาฬิกาหยุดเมื่อคำขึ้นจอหน้าห้อง · รอบสองแข่งกับเวลารอบแรกของห้องเราเอง
คนนั่งบอร์ด ศูนย์ควบคุม คนจด คนแก้
ดูจอ อ่านคำออกเสียง พิมพ์แล้วส่งต่อ เวลาของห้องทั้งสองรอบ คำไม่ขึ้น ดูลิ้นชัก Console ว่ามาถึงไหม

ถ้ามีคำที่ไม่มีใครในห้องส่งโผล่ขึ้นมา นั่นคือ broker สาธารณะทำงานตามที่มันเป็น ใครก็เขียนเข้ามาได้ · ห้องที่มีไม่ถึงสิบเก้าทีม ทีมสุดท้ายคือทีมที่เลขสูงสุด

TESA Open Knowledge · © 2026 สมาคมสมองกลฝังตัวไทย (TESA) · ดัดแปลงจาก AIoT in Action (AIC มหาวิทยาลัยบูรพา) · CC BY-NC 4.0

เชื่อมโยงรากฐาน — วันนี้เราแตะอะไรไปบ้าง

ฝั่งเครือข่าย เข้าร่วมวง · ขอเลขที่อยู่ ส่งขึ้นหัวข้อ · ขอฟังหัวข้อ ฝั่ง Python dict · JSON · bytes กับ str try/except · เทียบสตริง ฝั่งออกแบบระบบ ล้มเหลวแล้วต้องบอกว่าที่ขั้นไหน ไม่เชื่อข้อมูลที่คนอื่นส่งมา

ฝั่งเครือข่าย
การเข้าร่วมเครือข่ายเป็นกระบวนการหลายจังหวะ ไม่ใช่คำสั่งเดียวจบ · การได้เลขที่อยู่เป็นคนละขั้นกับการเข้าร่วมได้ · การส่งข้อความผ่านคนกลางที่เรียกว่า broker ทำให้ผู้ส่งกับผู้รับไม่ต้องรู้จักกัน · ความล้มเหลวใช้เวลามากกว่าความสำเร็จเสมอ เพราะมีการลองใหม่ซ่อนอยู่

ฝั่ง Python และวิทยาการคอมพิวเตอร์
dict กับการแปลงเป็น JSON · ความต่างระหว่าง bytes กับ str และเหตุที่ต้อง .decode() · try/except กับความล้มเหลวที่คาดไว้แล้ว · การเทียบสตริงตรง ๆ แทนการพึ่ง truthiness · การจับเวลาคร่อมคำสั่งที่เราควบคุมไม่ได้

ฝั่งการออกแบบระบบ
โปรแกรมที่ล้มเหลวต้องบอกให้ได้ว่าล้มที่ขั้นไหน · ข้อมูลที่มาจากคนอื่นต้องตรวจก่อนใช้เสมอ · การรอหลักฐานหลายรอบก่อนรายงาน · การใช้ข้อมูลที่บันทึกไว้แล้วเป็นชุดทดสอบ แทนการหวังพึ่งสภาพจริงที่ควบคุมไม่ได้

ข้อสุดท้ายคือของที่ทีมทดสอบซอฟต์แวร์ทั่วโลกใช้ทุกวัน และวันนี้ผู้เรียนได้ใช้มันไปแล้วโดยไม่รู้ตัว

TESA Open Knowledge · © 2026 สมาคมสมองกลฝังตัวไทย (TESA) · ดัดแปลงจาก AIoT in Action (AIC มหาวิทยาลัยบูรพา) · CC BY-NC 4.0

งานทำเอง 30% + สรุปบทเรียน

ขึ้นวง เฝ้าเป็น ส่งออก รับกลับ ชุดบทเรียนถัดไป: สั่งฮาร์ดแวร์เองเป็นครั้งแรก หลอด LED บนบอร์ด กับปุ่มผู้ใช้จริง

วันนี้เราได้:
พาบอร์ดขึ้นเครือข่ายด้วยโค้ดของเราเอง · ให้บอร์ดสำรวจคลื่นทั้งห้องแล้ววินิจฉัยตัวเองได้ · แยก "ต่อติดตอนนั้น" ออกจาก "ยังต่ออยู่ตอนนี้" · ส่งค่าจริงออกไปให้เครื่องอื่นเห็น และรับคำสั่งจากที่ไกลกลับมาสั่งของบนบอร์ด · เขียนกฎเองว่าลิงก์แบบไหนเรียกว่าใช้ได้

การบ้านของทีม: เลือกทำ 1 ข้อจากสี่ข้อในสไลด์ถัดไป จดลงบันทึกการเรียน

บทเรียนถัดไปเราจะให้ปุ่มกับไฟขึ้น broker ด้วย ชื่อชุดเดิมทั้งหมด broker.hivemq.com · TEAM · bento-aiot/<ทีม>/... ไฟล์ 07_button_to_broker.py ส่งการกดปุ่มเป็น event และสถานะไฟใน telemetry แล้วรับ cmd จากหน้าเว็บเดิมมาเปิดปิดไฟ เก็บหน้าเว็บของทีมไว้ ไม่ต้องปิด

ชุดบทเรียนถัดไป: สองชุดบทเรียนแรกเราเล่นของที่ไลบรารีมีให้ครบแล้ว ตั้งแต่บทเรียน 2.1–2.3 เราจะ สร้างมันขึ้นมาเองทีละชิ้น เริ่มที่หลอด LED ทุกดวงบนบอร์ด (gpio.num_leds() บอกว่ากี่ดวง — Eva 3 · Dev Kit 5) กับปุ่มผู้ใช้จริงหนึ่งปุ่ม ผ่านโมดูล gpio ที่วันนี้เพิ่งได้เห็นผ่านตาในไฟล์ 06

โครงลูป "อ่าน → ตัดสิน → รายงาน" ที่ใช้มาสองชุดบทเรียนแล้ว จะเป็นโครงเดียวกับชุดบทเรียนถัดไปเป๊ะ ๆ เปลี่ยนแค่ว่าปลายทางของการตัดสินคือหลอดไฟ ไม่ใช่ตัวหนังสือ

TESA Open Knowledge · © 2026 สมาคมสมองกลฝังตัวไทย (TESA) · ดัดแปลงจาก AIoT in Action (AIC มหาวิทยาลัยบูรพา) · CC BY-NC 4.0

เชื่อมจุดให้เห็นภาพ — วันนี้อยู่ตรงไหนของเส้นทาง

วันนี้ · บทเรียน 1.1–1.6 เห็นของครบทั้งชุด แล้วพาบอร์ดถึงคนอื่น บทเรียน 2.1–2.9 สั่งฮาร์ดแวร์เอง ไฟ ปุ่ม จอสัมผัส บทเรียน 3.1–3.9 อ่านเซนเซอร์ วาดเป็นแดชบอร์ด บทเรียน 4.1–5.3 ส่งขึ้นแพลตฟอร์ม แล้วสร้างของจริง ทุกอย่างที่เห็นวันนี้ อีกสิบชุดบทเรียนข้างหน้าเราจะสร้างมันขึ้นมาเองทีละชิ้น

สองชุดบทเรียนแรกจบแล้ว ผู้เรียนได้เห็นของทั้งชุดที่ไลบรารีนี้มีให้ ตั้งแต่จอ เซนเซอร์ เสียง ไปจนถึงการส่งข้อมูลออกไปให้คนที่อยู่คนละที่ ไม่ใช่เพื่อให้จำได้หมด แต่เพื่อให้รู้ว่าปลายทางหน้าตาเป็นอย่างไร ตั้งแต่ชุดบทเรียนถัดไปเราจะย้อนกลับไปสร้างมันทีละชิ้นด้วยมือตัวเอง

คำถามคิดต่อ: ถ้าบอร์ดของทีมต้องแขวนอยู่ในโรงงานหกเดือน แล้วส่งค่าออกไปทุกนาที · จะรู้ได้อย่างไรว่ามันหยุดส่งตอนตีสาม · และคำสั่งที่ส่งกลับมาได้ ควรมีใครสั่งได้บ้าง

TESA Open Knowledge · © 2026 สมาคมสมองกลฝังตัวไทย (TESA) · ดัดแปลงจาก AIoT in Action (AIC มหาวิทยาลัยบูรพา) · CC BY-NC 4.0

ต่อยอด — คิดต่อเอง (เลือกทำ 1 ข้อ)

1 · จอหน้าประตู อ่านได้ในสายตาเดียว 2 · ส่งของทีมเอง เปลี่ยนสิ่งที่อยู่ใน payload 3 · คำสั่งของทีมเอง เพิ่มคำสั่งที่สี่ให้บอร์ด 4 · เทปของทีมเอง บันทึกแล้วเอาไปทดสอบ

ข้อ 1 · จอหน้าประตู
ดัดแปลง 02_link_uptime.py ให้เหลือข้อมูลน้อยที่สุดเท่าที่จะยังตอบคำถาม "ตอนนี้บอร์ดออนไลน์อยู่ไหม" ได้จากระยะสามเมตร ตัดอะไรออกไปบ้าง แล้วทำไมถึงกล้าตัดสิ่งนั้น

ข้อ 2 · ส่งของทีมเอง
แก้ payload ใน 05_value_leaves_the_board.py ให้ส่งค่าที่ทีมเลือกเองเพิ่มอีกอย่างจาก sensors.snapshot() แล้วเปิดหน้าเว็บ my_first_reader.html ดูว่าฝั่งรับเห็นคีย์ใหม่เป็นกล่องใหม่จริงไหม และคีย์นั้นควรตั้งชื่อว่าอะไรคนอื่นถึงจะเข้าใจ

ข้อ 3 · คำสั่งของทีมเอง
เพิ่มคำสั่งที่สี่ให้ 06_command_comes_back.py นอกจาก beep led say ที่มีอยู่ แล้วอธิบายว่าถ้าคนส่งพิมพ์คำสั่งนั้นมาผิดรูปแบบ โปรแกรมของทีมจะทำอย่างไร

ข้อ 4 · เทปของทีมเอง
จดผลของ wifi.is_connected() กับ wifi.ip() จากการเดินจริงของทีม ลงเป็น TAPE ชุดใหม่ใน 03_your_link_rule.py แล้วตั้ง WANT_REPORTS ให้ตรงกับที่ควรจะเป็น พร้อมอธิบายว่านับมาได้อย่างไร

เขียนคำตอบลงบันทึกการเรียน แล้วเอามาเล่าให้เพื่อนฟังต้นชุดบทเรียนถัดไป

TESA Open Knowledge · © 2026 สมาคมสมองกลฝังตัวไทย (TESA) · ดัดแปลงจาก AIoT in Action (AIC มหาวิทยาลัยบูรพา) · CC BY-NC 4.0

หน้าจอของทุกไฟล์ในชุดบทเรียนนี้ (1/3)

หน้าจอของ 01_wifi_first_connect.py: พาบอร์ดออกเน็ตครั้งแรก แล้วอ่านเลขที่อยู่ของมัน หน้าจอของ 02_link_uptime.py: ต่อติดแล้ว กับยังต่ออยู่ ไม่ใช่คำถามเดียวกัน หน้าจอของ 03_your_link_rule.py: ไฟล์นี้รันได้ แต่มันมองไม่เห็นปัญหาแบบที่สอง

01 พาบอร์ดออกเน็ตครั้งแรก แล้วอ่านเลขที่อยู่ของมัน · 02 ต่อติดแล้ว กับยังต่ออยู่ ไม่ใช่คำถามเดียวกัน · 03 ไฟล์นี้รันได้ แต่มันมองไม่เห็นปัญหาแบบที่สอง
ภาพจากตัวจำลอง bento_sim ซึ่งเรนเดอร์ด้วยโค้ด CM55 ชุดเดียวกับที่รันบนบอร์ด ที่ 800x480 เท่าจอของทั้งสองบอร์ด — แสดงหน้าจอที่ตัวอย่างสร้าง ค่าจากเซนเซอร์ WiFi และไมค์เป็นค่าแทนบนเครื่องโฮสต์ ไม่ใช่ผลการวัดของบอร์ด
TESA Open Knowledge · © 2026 สมาคมสมองกลฝังตัวไทย (TESA) · ดัดแปลงจาก AIoT in Action (AIC มหาวิทยาลัยบูรพา) · CC BY-NC 4.0

หน้าจอของทุกไฟล์ในชุดบทเรียนนี้ (2/3)

หน้าจอของ 04_scan_the_room.py: ให้บอร์ดฟังคลื่นทั้งห้อง แล้วบอกว่าใครอยู่ตรงไหนบ้าง หน้าจอของ 05_value_leaves_the_board.py: ค่าที่วัดได้บนโต๊ะนี้ ไปโผล่บนเครื่องคนอื่น หน้าจอของ 06_command_comes_back.py: คนอื่นพิมพ์คำสั่งจากที่ไกล แล้วไฟบนโต๊ะเราติด

**04** ให้บอร์ดฟังคลื่นทั้งห้อง แล้วบอกว่าใครอยู่ตรงไหนบ้าง · **05** ค่าที่วัดได้บนโต๊ะนี้ ไปโผล่บนเครื่องคนอื่น (ในภาพตั้ง `TEAM = "nok4821"` หัวข้อจึงเป็น `bento-aiot/nok4821/telemetry` บน `broker.hivemq.com`) · **06** คนอื่นพิมพ์คำสั่งจากที่ไกล แล้วไฟบนโต๊ะเราติด (ในภาพฟัง `bento-aiot/nok4821/cmd`)
ภาพจากตัวจำลอง bento\_sim ซึ่งเรนเดอร์ด้วยโค้ด CM55 ชุดเดียวกับที่รันบนบอร์ด ที่ 800x480 เท่าจอของทั้งสองบอร์ด — แสดง**หน้าจอที่ตัวอย่างสร้าง** ค่าจากเซนเซอร์ WiFi และไมค์เป็นค่าแทนบนเครื่องโฮสต์ ไม่ใช่ผลการวัดของบอร์ด
TESA Open Knowledge · © 2026 สมาคมสมองกลฝังตัวไทย (TESA) · ดัดแปลงจาก AIoT in Action (AIC มหาวิทยาลัยบูรพา) · CC BY-NC 4.0

หน้าจอของทุกไฟล์ในชุดบทเรียนนี้ (3/3)

หน้าจอของ 07_platform_in_one_call.py: บอร์ดจำได้เองว่าจะต่อไปที่ไหน แม้ถอดไฟแล้วเสียบใหม่

**07** บอร์ดจำได้เองว่าจะต่อไปที่ไหน แม้ถอดไฟแล้วเสียบใหม่ (ไฟล์อ่านอย่างเดียว และจบหลังแสดงคลังค่าตั้งถ้ายังไม่ใส่ `PLATFORM_BROKER` อย่างที่เห็นในภาพ)
ภาพจากตัวจำลอง bento\_sim ซึ่งเรนเดอร์ด้วยโค้ด CM55 ชุดเดียวกับที่รันบนบอร์ด ที่ 800x480 เท่าจอของทั้งสองบอร์ด — แสดง**หน้าจอที่ตัวอย่างสร้าง** ค่าจากเซนเซอร์ WiFi และไมค์เป็นค่าแทนบนเครื่องโฮสต์ ไม่ใช่ผลการวัดของบอร์ด
TESA Open Knowledge · © 2026 สมาคมสมองกลฝังตัวไทย (TESA) · ดัดแปลงจาก AIoT in Action (AIC มหาวิทยาลัยบูรพา) · CC BY-NC 4.0

อ้างอิงและเครดิต

เอกสารของผู้ผลิต

มาตรฐานและเอกสารเปิด

  • IEEE 802.11 — ลำดับ Scanning / Authentication / Association ที่อธิบายว่าทำไม connect() ถึงกินเวลาหลายวินาที และทำไมความล้มเหลวถึงกินเวลามากกว่า
  • RFC 2131 (DHCP) — เหตุผลที่ลิงก์ขึ้นแล้วยังอาจไม่มีเลขที่อยู่ และที่มาของค่า "0.0.0.0"
  • MQTT Version 3.1.1 — OASIS Standard: หัวข้อ (topic) การ publish และ subscribe ที่ไฟล์ 05 กับ 06 ใช้ · บทเรียน 4.4–4.6 เราจะกลับมาที่เอกสารนี้อย่างละเอียด
  • RFC 8259 (JSON) — รูปแบบข้อความที่ json.dumps() กับ json.loads() ผลิตและอ่าน
  • HiveMQ public broker broker.hivemq.com (1883 TCP · 8884 wss) ไม่มีรหัสผ่าน https://www.hivemq.com/demos/websocket-client/ · หน้าเว็บ examples/web/ ใช้ MQTT.js 5.16.0
  • MicroPython documentation — https://docs.micropython.org/

งานวิจัยที่กำหนดรูปร่างของชุดบทเรียนนี้

  • Carroll, J. M. et al. (1987–1990) — งานทดลองแบบมีกลุ่มควบคุม: คู่มือที่พาผู้เรียนลงมือทำงานจริงตั้งแต่ต้น ใช้เวลาเรียนน้อยกว่าและทำงานสำเร็จได้มากกว่าคู่มือที่ให้อ่านทฤษฎีก่อน · นี่คือเหตุผลที่ชุดบทเรียนนี้ให้รันไฟล์แรกตั้งแต่สไลด์ที่เจ็ด
  • Mayer, R. E. — หลักการ pre-training: บอกชื่อและหน้าที่ของชิ้นส่วนสั้น ๆ ก่อนลงมือ · สไลด์ "โมดูล wifi มีอะไรให้ใช้บ้าง" จึงมีแค่ห้าช่อง ไม่ใช่สารบัญของทั้งไลบรารี
  • ผลสำรวจนักพัฒนามืออาชีพ 80 คนเรื่องตัวอย่างโค้ด — ข้อร้องเรียนอันดับหนึ่งคือตัวอย่างไม่ช่วยให้คิดออกว่าจะประกอบชิ้นส่วนเข้าด้วยกันอย่างไร · นี่คือเหตุผลที่ไฟล์ 02 กับคู่ 05-06 ได้พื้นที่มากที่สุดในเด็คนี้

หมายเหตุเรื่องภาพ

ไดอะแกรม SVG ทุกภาพในเด็คนี้วาดขึ้นใหม่สำหรับหลักสูตรนี้ · ภาพลำดับการเข้าร่วมเครือข่ายมาจาก Wikimedia Commons ระบุที่มาไว้ใต้ภาพ · ภาพหน้าจอของ 04_scan_the_room.py เป็นภาพจริงจากการรันที่ความละเอียดเท่าจอของทั้งสองบอร์ด · ภาพหน้า Playground เป็นภาพถ่ายจากบอร์ด Eva Kit จริง บันทึกโดยผู้สอน

ข้อเท็จจริงเกี่ยวกับพฤติกรรมของโมดูล wifi mqtt tesaiot sensors gpio lcd และ ui ตรวจสอบจากซอร์สโค้ดของโปรเจกต์ KIT_PSE84_EVAL_EPC2-MicroPython-BentoClaw (Eva Kit) TESAIoT_KIT_PSE84_AI-Micropython-BentoClaw (Dev Kit) และ BENTO-TESAIoT-libraries โดยตรง

ตัวเลข 85 วินาทีคือเพดานที่วัดได้จริงบนบอร์ดตอนใส่รหัสผิด ไม่ใช่ค่าจากเอกสาร ทีมที่วัดได้ต่างจากนี้ บอกผู้สอนได้เลย

TESA Open Knowledge · © 2026 สมาคมสมองกลฝังตัวไทย (TESA) · ดัดแปลงจาก AIoT in Action (AIC มหาวิทยาลัยบูรพา) · CC BY-NC 4.0