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

บทเรียน 4.1 — WiFi และเครือข่าย: dBm DHCP IP และ DNS

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

โมดูล 4 — เชื่อมต่อแพลตฟอร์ม IoT

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

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

ดูของจริงก่อน — เมนู Wi-Fi Setting ที่มากับเครื่อง

Wi-Fi Setting my-hotspot -48 dBm Office-2.4G -63 dBm Lab-Guest -79 dBm CAFE_5G -86 dBm Scan Connect 1 · สแกนหาคลื่น 2 · เลือก + ใส่รหัส 3 · ได้เลข IP เห็นชื่อวง + ความแรง รอ ไม่ใช่ค้าง ไอคอนบนแถบบนติด แปลว่ามีที่อยู่แล้ว

เมนูนี้อยู่บนบอร์ดมาตั้งแต่บทเรียน 1.1–1.3 แล้ว วันนี้เราจะ สร้างมันขึ้นมาเองด้วย Python และทำให้มันบอกได้มากกว่าที่หน้าจอเดิมบอก

สามขั้นบนจอนี้คือสามบรรทัดในโค้ดของเรา — wifi.scan() · wifi.connect() · wifi.ip()

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

ทำไม · คืออะไร · ทำยังไง — แผนที่ของชุดบทเรียนนี้

คำถาม คำตอบของชุดบทเรียนนี้ อยู่ช่วงไหน
Why บทเรียน 1.4–1.6 ก็ต่อ WiFi ติดไปแล้ว ทำไมต้องกลับมาเรียนเรื่องเดิมอีก เพราะ "ต่อเน็ตติด" กับ "ต่อเน็ตใช้ได้" เป็นคนละเรื่อง และวันที่ของจริงไม่ทำงาน คนที่ตอบได้ว่า ขาดตรงไหนในห้าช่วง คือคนที่แก้ได้ · ระบบที่บอกได้ว่าพังตรงไหน มีค่ากว่าระบบที่บอกแค่ว่าพัง ครึ่งแรก · dBm · DHCP · ping สองปลายทาง
What มีอะไรให้ใช้บ้าง โมดูล wifi ทั้งแปดชื่อ — หกตัวที่โครงหลักเรียกจริง บวก disconnect() กับ softap() ที่ต้องเคยลองมือ สไลด์บัญชีแปดชื่อ + สไลด์สองตัวที่โครงหลักไม่ได้เรียก
How ประกอบยังไงให้ใช้งานได้จริง สแกน → เรียงตาม RSSI → ต่อ (บรรทัดเดียวที่บล็อกได้ถึง 85 วินาที ต้องบอกผู้ใช้ก่อน) → ping สองปลายทางแล้วอ่านผลเป็นคู่ 11 ไฟล์ตัวอย่าง (07–08 ในบทเรียน 4.2 · ที่เหลือในบทเรียน 4.3) + ไฟล์ฝึก

ปลายทางที่จับต้องได้ — หน้าสถานะเครือข่ายสองแผงบนจอเดิมของบทเรียน 3.7–3.9: ตาราง สี่คอลัมน์ (SSID · dBm · ช่อง · รหัส) เรียงจากแรงไปอ่อน และแผงขวาที่มี ไฟสถานะลิงก์สองดวง · SSID · IP · ping สองปลายทาง · มาตรวัด dBm พร้อมพิสัย ที่อัปเดตตัวเองทุก 3 วินาที พร้อมปุ่ม สแกนใหม่ ให้สั่งได้เอง

บทเรียน 3.7–3.9 จอของเรารายงานสิ่งที่อยู่บนบอร์ด · ชุดบทเรียนนี้จอเริ่มรายงานสิ่งที่อยู่นอกบอร์ด

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

เป้าหมายของชุดบทเรียนนี้ — ต่อยอดแดชบอร์ดบทเรียน 3.7–3.9

IMU Chart Compass CapSense Pot NETWORK STATUS SSID · IP · ping ms การ์ดที่เราจะเพิ่มวันนี้ บทเรียน 3.7–3.9 = บอร์ดรู้จักตัวเอง · บทเรียน 4.1–4.3 = บอร์ดรู้จักโลกที่มันอยู่ จากนี้ไปอีกสามชุดบทเรียน ข้อมูลจะเดินออกจากบอร์ดไปหาคนอื่น
  1. อ่านค่า RSSI เป็น dBm ได้ และบอกได้ว่า −45 กับ −85 ต่างกันแค่ไหน (ไม่ใช่ "ต่างกันนิดหน่อย")
  2. เรียก wifi.scan() แล้ว แกะข้อมูลจาก tuple ได้ถูกช่อง
  3. รู้ว่า wifi.connect() ที่บทเรียน 1.4–1.6 เคยเรียกไปแล้ว ข้างในมันทำอะไรอยู่ ตอนที่มันเงียบไปเป็นนาที
  4. วินิจฉัยการเชื่อมต่อด้วย wifi.ping() — แยกให้ออกว่าปัญหาอยู่ในห้องเราหรืออยู่นอกห้อง
  5. ประกอบทั้งหมดเป็น การ์ดสถานะเครือข่ายบนหน้าจอเดิมจากบทเรียน 3.7–3.9
  6. เรียกได้ครบทั้ง แปดชื่อ ของโมดูล wifi และบอกได้ว่าแต่ละตัวมีไว้ทำอะไร

บทเรียน 1.4–1.6 ผู้เรียนต่อเน็ตติดไปแล้ว และเห็น wifi.connect() wifi.ip() wifi.is_connected() wifi.scan() wifi.status() ผ่านตามาครบ — แต่บทเรียนนั้นคือการพาทัวร์ทั้งเส้น ไม่ได้ลงลึกทีละตัว วันนี้จึงเป็นการ เปิดฝากล่องเดิมออกดู: บรรทัดที่เคยรันผ่านนั้นวิ่งผ่านอะไรบ้างกว่าจะได้เลข IP ทำไมบางครั้งช้าจนน่าตกใจ ตัวเลขที่คืนมาแปลว่าอะไร และมันโกหกเราตรงไหนได้บ้าง

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

ปลายทางของชุดบทเรียนนี้ — หน้าสถานะเครือข่ายของทีม

หน้าจอจาก BENTO Emulator ของเฉลยหน้าสถานะเครือข่าย

หน้าจอจากการรันโค้ดเฉลยบน BENTO Emulator ที่ 800x480 เท่าจอของทั้งสองบอร์ด — ไม่ใช่ภาพวาดและไม่ใช่ mock-up · โค้ดคือ s09_network_status.py ของบทเรียน 4.3

โครงของหน้าจอ อ่านจากซ้ายไปขวา

  • ซ้าย ตาราง สี่คอลัมน์ SSID · dBm · ช่อง · รหัส เรียงจากแรงไปอ่อน — หัวตารางบวกสามแถวพอดีความสูง 288
  • ขวา ไฟสถานะสองดวง (ต่ออยู่ / ยังไม่ต่อ) แล้วต่อด้วย ping สองปลายทาง · SSID กับ IP อยู่แถบบน
  • ล่างขวา มาตรวัด dBm ของวงที่ทีมต่ออยู่ — แถบที่ขยับวางทับไม้บรรทัดที่บอกพิสัย -90 ถึง -40
  • บนขวาคือปุ่ม สแกนใหม่ — หน้าสถานะที่แตะสั่งอะไรไม่ได้เลย คือจอ ไม่ใช่แผงควบคุม

ต่อเน็ตติดกับต่อเน็ตใช้ได้เป็นคนละเรื่อง หน้านี้แยกสองเรื่องนั้นให้เห็นในจอเดียว

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

เข้าใจฮาร์ดแวร์ · ทำไมความแรงสัญญาณถึงเป็นเลขติดลบ

หน้าจอโทรศัพท์แสดงขีดสัญญาณพร้อมค่าความแรง -74 dBm

หน้าจอเครื่องนี้ไม่ได้เขียนว่า "สัญญาณ 66%" แต่เขียนว่า −74 dBm ซึ่งเป็นหน่วยที่วัดกำลังจริง ๆ ของคลื่นที่เสาอากาศรับได้

PdBm=10log⁡10 ⁣(P1 mW)P_{\text{dBm}} = 10\log_{10}\!\left(\frac{P}{1\ \text{mW}}\right)

อ่านเป็นภาษาคน: เอากำลังที่รับได้มาเทียบกับ 1 มิลลิวัตต์ แล้วบีบด้วยลอการิทึม เพราะช่วงค่ามันกว้างมากจนเขียนเป็นเลขธรรมดาไม่ไหว

ตัวเลขจริง: ที่ −67 dBm กำลังที่เสาอากาศรับได้คือ 10−6.710^{-6.7} mW ≈ 0.2 นาโนวัตต์ — เล็กกว่ามิลลิวัตต์มหาศาล ลอการิทึมจึงออกมาติดลบเสมอ

0 dBm = 1 mW พอดี ซึ่งแรงกว่าที่ WiFi รับได้จริงหลายล้านเท่า เราจึงไม่มีวันเห็นเลขบวกบนบอร์ด

ภาพ: TaBaZzz / Wikimedia Commons — CC BY-SA 4.0 · หน้าจอสถานะสัญญาณที่รายงานเป็น dBm

เลขติดลบไม่ได้แปลว่าผิดปกติ — มันคือธรรมชาติของหน่วยที่วัดของเล็ก ๆ เทียบกับของใหญ่

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

สเกล dBm — ทุก 10 dB คือสิบเท่า ไม่ใช่สิบหน่วย

ยิ่งไปทางขวา สัญญาณยิ่งอ่อน — และอ่อนแบบทวีคูณ -30 -40 -50 -60 -70 -80 -90 5 ขีด 4 ขีด 3 ขีด 2 ขีด 1 ขีด 1 µW 1 nW 1 pW −50 แรงกว่า −80 อยู่ 1000 เท่า จุดสีน้ำเงิน = เราเดินออกห่างจากเราเตอร์ทีละก้าว

เกณฑ์ห้าขีดข้างบนไม่ได้คิดขึ้นเอง — เป็น เกณฑ์ชุดเดียวกับที่หน้าจอ Wi-Fi Setting ของบอร์ดใช้จริง (−50 / −60 / −70 / −80 / −90)

ตัวเลขที่ช่างเครือข่ายใช้กันหน้างาน: ดีกว่า −60 คือสบายทุกงาน · −67 คือขีดจำกัดของงานที่ต้องต่อเนื่องอย่างวิดีโอ/เสียง · ต่ำกว่า −80 อย่าไว้ใจ ต่อติดวันนี้พรุ่งนี้อาจหลุด

ทุก 3 dB คือประมาณ 2 เท่า และทุก 10 dB คือ 10 เท่า — จำสองข้อนี้แล้วอ่านเลข dBm ได้ทันทีโดยไม่ต้องกดเครื่องคิดเลข

เวลาทีมรายงานว่า "สัญญาณอ่อนไปนิดเดียว" ให้ถามกลับว่ากี่ dBm — ต่างกัน 20 dB คือต่างกันร้อยเท่า

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

2.4 GHz กับ 5 GHz — เร็วกว่าแต่ไปได้ใกล้กว่า

กราฟการลดทอนสัญญาณตามระยะทางของ WiFi ย่าน 2.4 GHz และ 5 GHz

FSPL(dB)=20log⁡10(d)+20log⁡10(f)+32.44\text{FSPL(dB)} = 20\log_{10}(d) + 20\log_{10}(f) + 32.44

เมื่อ dd เป็นกิโลเมตร และ ff เป็นเมกะเฮิรตซ์

อ่านเป็นภาษาคน: คลื่นที่แผ่ออกไปในที่โล่งจะจางลงตามระยะและตามความถี่ — ระยะเป็นสองเท่า หายไป 6 dB

ตัวเลขจริงที่ระยะ 10 เมตร
· ที่ 2437 MHz (ช่อง 6 ย่าน 2.4 GHz) → 60.2 dB
· ที่ 5180 MHz (ช่อง 36 ย่าน 5 GHz) → 66.7 dB
ต่างกัน 6.5 dB คือ เหลือกำลังราวหนึ่งในสี่ ที่ระยะเท่ากันเป๊ะ

สูตรนี้เป็นอุดมคติ — ที่โล่ง ไม่มีผนัง ไม่มีคน ในบ้านหรืออาคารจริงตัวเลขจะแย่กว่านี้เสมอ เพราะผนังคอนกรีตกินอีก 10–15 dB และร่างกายคนกินอีกหลาย dB

ภาพ: Sss41 / Wikimedia Commons — CC BY-SA 3.0 · Free-space path loss ของย่านความถี่ 802.11

ภาพสเปกตรัมจริงของย่าน 2.4 GHz ที่ช่องสัญญาณทับกัน ภาพสเปกตรัมจริงของย่าน 5 GHz ที่ช่องสัญญาณแยกกันกว่า

ทั้งสองภาพ: Kirlf / Wikimedia Commons — CC BY-SA 4.0 · ซ้ายคือสเปกตรัมย่าน 2.4 GHz ที่วัดจริง ให้เห็นว่าช่องสัญญาณทับกันจริงแค่ไหน ไม่ใช่เรียงกันสวย ๆ อย่างในผัง · ขวาคือย่าน 5 GHz ที่วัดจริงในสเกลเดียวกัน เทียบกันแล้วเห็นทันทีว่าทำไมสแกนที่ 5 GHz ถึงเจอเพื่อนบ้านน้อยกว่า

5 GHz ไม่ได้ "ดีกว่า" — มันแลกระยะทางกับความเร็ว เลือกให้ตรงกับงาน ไม่ใช่เลือกเลขที่มากกว่า

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

เกร็ด: ทำไมบางครั้งสแกนแล้วรอนานผิดปกติ

แผนภาพช่องสัญญาณ WiFi ย่าน 2.4 GHz ที่ซ้อนทับกัน

ย่าน 2.4 GHz มี 14 ช่อง และซ้อนทับกันอย่างที่เห็น — ในทางปฏิบัติใช้ได้จริงแค่ 3 ช่องที่ไม่ทับกันคือ 1, 6, 11

ย่าน 5 GHz มีช่องมากกว่านั้นหลายเท่า และบางช่องต้อง ฟังเงียบ ๆ ก่อนว่ามีเรดาร์ใช้อยู่ไหม จึงจะส่งได้

ภาพ: Michael Gauthier, Wireless Networking in the Developing World / Wikimedia Commons — CC BY-SA 3.0

การสแกนหนึ่งครั้งคือการ ไล่ฟังทีละช่อง ช่องละไม่กี่สิบมิลลิวินาที ยิ่งมีช่องเยอะ ยิ่งใช้เวลานาน นี่คือเหตุผลที่บอร์ดหยุดนิ่งระหว่างสแกน ไม่ใช่เพราะมันค้าง

เชื่อมกับวันนี้: wifi.scan() ของเรา บล็อกได้ถึง 10 วินาที — โค้ดบรรทัดถัดไปจะไม่ทำงานเลยจนกว่าสแกนจบ ดังนั้นในท่าที่ 2 เราจะขึ้นข้อความ กำลังสแกน บนจอ ก่อน เรียกมัน ไม่ใช่หลัง ไม่งั้นผู้ใช้จะเห็นจอว่างเปล่าแล้วนึกว่าโปรแกรมพัง

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

การเข้าร่วมเครือข่าย — สามจังหวะก่อนจะได้คุยกัน

แผนภาพลำดับการเข้าร่วมเครือข่าย WiFi: ค้นหา ยืนยันตัว แล้วขอเข้าร่วม

RUCKUS Education Services · 16:36 · อังกฤษ
ดูช่วง 2:00–8:00 ก็พอ เห็นทั้งกระบวนการพร้อมเฟรมจริงจาก packet capture

1 · Scanning บอร์ดฟังหรือถามหาว่ามี AP ไหนอยู่แถวนี้ — wifi.scan() ทำงานอยู่ตรงนี้

2 · Authentication ขั้นตอนแนะนำตัว

3 · Association AP ตอบรับให้เข้าร่วม แล้วจึงเริ่มส่งข้อมูลได้

ภาพ: Superspritz / Wikimedia Commons — CC BY-SA 4.0 · ลำดับการเชื่อมต่อ 802.11

ตรงจุดที่ภาพเขียนว่า Data Transfer บอร์ดยัง ยังไม่มีเลข IP — ยังคุยกับใครนอกห้องไม่ได้

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

กลไกเต็ม — จากคลื่นในอากาศ ถึงเลข IP บนจอ

บอร์ดของเรา Access Point เราเตอร์ + DHCP 1 · ขอดูว่ามีใครอยู่แถวนี้บ้าง 2 · ตอบกลับ: ชื่อวง ความแรง ช่องสัญญาณ 3 · ขอเข้าร่วม + พิสูจน์รหัสผ่าน 4 · ขอเลขที่อยู่ (DHCP DISCOVER / REQUEST) 5 · ให้เลขมา: 192.168.1.42 + gateway + DNS ขั้นที่ 1-3 คือ WiFi · ขั้นที่ 4-5 คือ IP — คนละเรื่องกัน และพังคนละแบบ

wifi.connect() คืน True เมื่อผ่านครบทั้งห้าขั้น ถ้าติดขั้นไหนก็ตาม เราได้ False เหมือนกันหมด — จึงต้องมี ping ไว้แยกแยะ

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

DHCP — บอร์ดไม่ได้ตั้งเลข IP ให้ตัวเอง

แผนภาพลำดับ DHCP สี่ขั้น: Discover Offer Request และ Acknowledge ระหว่างอุปกรณ์กับเซิร์ฟเวอร์

CMSystemsBe · 1:11 · อังกฤษ
แอนิเมชันลูปสั้น เปิดคาไว้ได้ตลอดช่วงที่อธิบาย

สี่คำที่ต้องจำ DORA

Discover — มีใครแจกเลขบ้าง
Offer — เอาเลขนี้ไปไหม
Request — ขอเลขนี้
Acknowledge — เอาไปเลย

ภาพ: Gelmo96 / Wikimedia Commons — CC BY-SA 4.0 · ลำดับข้อความของ DHCP

เลขที่ได้มาเป็นการ ยืมมาชั่วคราว (lease) ไม่ใช่ของเราถาวร — ปิดบอร์ดแล้วเปิดใหม่ อาจได้เลขคนละตัว นี่คือเหตุผลที่โค้ดของเราต้องอ่าน wifi.ip() ทุกครั้งหลังต่อ ห้ามจำเลขเก่าไว้ใช้

ถ้า DHCP ของวงเต็มหรือพัง เราจะ "ต่อ WiFi ติด" แต่ "ไม่มีเลข IP" — อาการนี้ผู้เรียนจะเจอจริง และจะดูเหมือนต่อไม่ติดทั้งที่ไม่ใช่

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

IP · netmask · gateway — สามค่าที่ต้องอ่านให้เป็น

โครงสร้างเลขที่อยู่ IPv4 สี่ไบต์ ทั้งแบบเลขฐานสองและแบบจุดทศนิยม

ภาพ: Michel Bakni / Wikimedia Commons — CC BY-SA 4.0 · โครงสร้างเลขที่อยู่ IPv4
ค่า ตัวอย่าง มันบอกอะไร
IP address 192.168.1.42 เลขประจำตัวของบอร์ดในวงแลนนี้ — wifi.ip() คืนค่านี้
netmask 255.255.255.0 เส้นแบ่งว่าเลขส่วนไหนคือ "วง" ส่วนไหนคือ "ตัวเครื่อง" — ในตัวอย่างนี้คือทุกเครื่องที่ขึ้นต้น 192.168.1.
gateway 192.168.1.1 ประตูออกจากวง ถ้าจะคุยกับเลขนอกวง ต้องฝากประตูนี้ส่งให้

32 บิตแบ่งเป็นสี่ช่อง ช่องละ 8 บิต จึงมีค่าได้ 0–255 ต่อช่อง · ข้อจำกัดที่ต้องรู้วันนี้: MicroPython บนบอร์ดนี้ให้แค่ wifi.ip() — ยังไม่มี netmask และ gateway ให้อ่าน โค้ดของเราจึงต้อง เดา gateway จากเลข IP (เอาสามช่องแรกต่อด้วย .1)

การเดาแบบนี้ถูกในวงแลนส่วนใหญ่ แต่ไม่ใช่ทุกวง — ท่าที่ 5 จะสอนวิธีตรวจว่าเราเดาถูกหรือเปล่า

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

ping ได้เกตเวย์ แต่ 8.8.8.8 เงียบ — แปลว่าอะไร

บอร์ด 192.168.1.42 เกตเวย์ 192.168.1.1 อินเทอร์เน็ต 8.8.8.8 3 ms timeout ยิงสองปลายทาง แล้วอ่านผลเป็นคู่ — นี่คือการวินิจฉัย ไม่ใช่การเดา เกตเวย์ผ่าน · เน็ตผ่าน ปกติดี ทำงานต่อได้ เกตเวย์ผ่าน · เน็ตไม่ผ่าน ปัญหาอยู่เหนือเราเตอร์ ไม่ใช่ที่เรา เกตเวย์ไม่ผ่าน ลิงก์ WiFi หรือเลขเกตเวย์ที่เดาผิด

wifi.ping(ip, timeout_ms) คืนเวลาไป-กลับเป็นมิลลิวินาที หรือ −1 ถ้าไม่มีคำตอบภายในเวลาที่ตั้งไว้

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

ระบบที่บอกได้ว่า "พังตรงไหน" มีค่ากว่าระบบที่บอกแค่ว่า "พัง"

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

DNS — ทำไม wifi.ping() ถึงรับแต่ตัวเลข

แผนภาพการค้นชื่อโดเมนผ่านเซิร์ฟเวอร์ DNS หลายชั้นจนได้เลข IP

ภาพ: Aaron Filbert / Wikimedia Commons — CC BY-SA 4.0 · สถาปัตยกรรมการค้นชื่อโดเมน

เครื่องคอมพิมพ์ google.com ได้เพราะมี ตัวแปลชื่อ (resolver) ถามระบบ DNS ต่อเป็นทอด ๆ จนได้เลข IP แล้วค่อยส่งแพ็กเก็ตไปที่เลขนั้น — ชื่อโดเมนไม่เคยเดินทางในเครือข่าย มีแต่เลขที่เดินทาง ส่วน MicroPython บนบอร์ดนี้ยังไม่มีตัวแปลชื่อเปิดให้ Python เรียก

wifi.ping("google.com")     # ValueError รับเฉพาะเลข IP
wifi.ping("8.8.8.8", 1500)  # ถูกต้อง

8.8.8.8 คือเซิร์ฟเวอร์ DNS สาธารณะของ Google เราเลือกมันเพราะจำง่ายและแทบไม่เคยล่ม ไม่ใช่เพราะกำลังใช้บริการ DNS ของมัน

ข้อจำกัดนี้เป็นช่องว่างของโมดูล ไม่ใช่ของฮาร์ดแวร์ — ตัวชิปคุย DNS ได้ แค่ยังไม่มีใครเปิดประตูฝั่ง Python ให้

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

ข้อมูลของเราถูกห่อกี่ชั้นกว่าจะออกจากบอร์ด

ภาพเคลื่อนไหวการห่อข้อมูลทีละชั้นตามแบบจำลอง OSI ก่อนส่งออกไปในสาย

ภาพเคลื่อนไหว: Moeenrahi / Wikimedia Commons — CC BY-SA 4.0 · การห่อหุ้มข้อมูลตามชั้นโพรโทคอล

ping หนึ่งครั้งถูกห่อทีละชั้นก่อนกลายเป็นคลื่นวิทยุ: ข้อมูลของเรา → หัว IP (เลขต้นทาง-ปลายทาง) → หัวชั้นลิงก์ (MAC) → บิตที่ส่งออกอากาศ ปลายทางแกะย้อนกลับตามลำดับเดิม

ที่ต้องรู้วันนี้สองข้อ: แต่ละชั้นเพิ่มขนาดข้อมูล (มีค่าใช้จ่ายคงที่ต่อแพ็กเก็ต) และ แต่ละชั้นพังได้เอกเทศ — คลื่นแรงดีแต่ไม่มี IP เกิดขึ้นได้จริง · บทเรียน 4.4–4.6 เราจะเพิ่มชั้น MQTT ทับลงบนกองนี้

wifi.connect() จัดการชั้นล่างให้ · wifi.ping() วัดชั้นกลาง · ชุดบทเรียนถัดไปเราจะเขียนชั้นบนสุดเอง

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

วันนี้ไม่ได้เพิ่มเซนเซอร์ตัวใหม่ แต่เพิ่ม "ความสามารถในการอธิบายว่าทำไมมันไม่ทำงาน" ซึ่งมีค่ากว่าในงานจริง