กลับไปหน้ารวมไฟล์
nodemcu-internet-hardware-watchdog-2c6445.md

พี่บ้าการขุด (Mining) อยู่แล้ว และพี่เชื่อจริงๆ ว่าบล็อกเชนกับสกุลเงินดิจิทัลจะเปลี่ยนโลกเราแน่ๆ วันหนึ่งแหละ จริงจัง! คริปโตมันมีบทบาทกับชีวิตพี่มาก แถมยังทำให้พี่กลายเป็นคนตื่นเช้าอีกต่างหาก ฮ่าๆ สำหรับนักขุดอย่างเราเนี่ย อินเทอร์เน็ตต้องพร้อม 24 x 7 ชัวร์ๆ ตอนก่อนพี่ไปเดินสายธุรกิจสั้นๆ นี่ Router ดันพังซะงั้น (เหตุผลงี่เง่ามาก) ผลคือพี่เข้าเครือข่ายบ้านตัวเองไม่ได้เลย แถมเครื่องขุดก็โดนตัดการติดต่อซะด้วย ตอนกลับมาถึงบ้าน พี่มีเป้าหมายเดียวเลย คือต้องแก้ปัญหานี้ให้ได้ ด้วยการสร้าง "อินเทอร์เน็ต ฮาร์ดแวร์ วอตช์ด็อก" ที่จะรีสตาร์ท Router ให้อัตโนมัติทันทีที่มันเริ่มมีอาการบ้าๆ

หมายเหตุ: ถ้าน้องจะยุ่งกับไฟบ้าน (Mains Power) เช่น ระบบสายไฟ AC 120v หรือ 240v นะ น้องต้องใช้อุปกรณ์และชุดเซฟตี้ที่เหมาะสม และต้องมั่นใจว่ามีทักษะและประสบการณ์เพียงพอ หรือไม่ก็ปรึกษาช่างไฟฟ้าที่มีใบอนุญาต โปรเจกต์นี้ไม่ได้ออกแบบมาให้เด็กเล่นนะจ๊ะ

มุมมองของโปรเจกต์

NodeMCU Internet Hardware WatchDog ตัวนี้คือการสำรวจเทคโนโลยีเครือข่ายและการทำงานร่วมกับ IoT แบบลงลึกเลย โดยเราจะโฟกัสที่ส่วนประกอบหลักๆ คือ สแต็กการส่งคำสั่ง ping (ICMP ping-request stack) และ ลอจิกการสั่งงานรีเลย์ประสิทธิภาพสูง (high-performance relay-dispatch logic) น้องจะได้เรียนรู้วิธีการสื่อสารและประสานงานภารกิจตรวจสอบการเชื่อมต่อ โดยใช้ซอฟต์แวร์ลอจิกเฉพาะทางร่วมกับการตั้งค่าฮาร์ดแวร์ที่มั่นคง

ลอจิกการทำงาน

Logic Flowchart

อธิบายง่ายๆ ให้ฟังก่อนเลยนะ ในเซ็ตอัพนี้พี่จะสั่ง ping ไปหา "www.google.com" พอค่า ping ตกหรือหายไปเมื่อไหร่ เราจะรีบูต Router ทันที

เพื่อให้เป็นไปตามนั้น ขั้นแรก NodeMCU จะเชื่อมต่อกับเครือข่าย WiFi จากนั้นก็ส่ง ping ไปหา 8.8.8.8 (ซึ่งก็คือ www.google.com นั่นแหละ) ถ้า ping สำเร็จ มันจะแสดงแพตเทิร์นไฟ LED สีน้ำเงิน 1 ใน 3 แบบออกมา

แต่ถ้า ping ล้มเหลวละก็ ระบบจะให้ลองใหม่อีก 5 ครั้ง ก่อนจะรีบูต Router สาเหตุที่พี่ไม่รีบูต Router ทันทีที่ ping ตก ก็เพื่อหลีกเลี่ยงการตอบสนองแบบผิดพลาด (false positive) นั่นเอง อย่างไรก็ตาม พอตัวนับ "fail_count" ขึ้นถึง 5 เมื่อไหร่ NodeMCU จะสั่งปิด Router โดยการดึงอาร์เมเจอร์ของโมดูลรีเลย์ ค้างเอาไว้ 15 วินาทีก่อนจะปล่อย เพื่อให้ Router ถูกปิดและเปิดใหม่อย่างสมบูรณ์ (proper power cycle) พอปล่อยอาร์เมเจอร์แล้ว ระบบจะรออีก 1 นาที ก่อนจะส่งคำขอ ping ครั้งต่อไป ซึ่งให้เวลา Router เพียงพอที่จะทำขั้นตอน POST ของมันให้เสร็จสิ้น

Logic Diagram

ขั้นตอนทั้งหมดที่ว่ามานี้ จะถูกทำซ้ำไปเรื่อยๆ ไม่มีที่สิ้นสุด ในส่วนลูป (loop) ของโค้ด จัดไปวัยรุ่น!

การลงมือทำจริง: ICMP Pings และการรีสตาร์ทอัตโนมัติ

โปรเจคนี้จะเผยให้เห็นเลเยอร์ที่ซ่อนอยู่เบื้องหลังการทำงานง่ายๆ ตั้งแต่การตรวจจับไปจนถึงการรีบูต:

  • เลเยอร์ระบุตัวตน: NodeMCU (ESP8266) ทำหน้าที่เป็นดวงตาดิจิทัลความละเอียดสูง คอยวัดสถานะการเชื่อมต่อของแพ็กเก็ตอินเทอร์เน็ตผ่านคำสั่ง ping
  • เลเยอร์แปลงสัญญาณ: ระบบใช้โปรโตคอล WiFi ความเร็วสูงเพื่อรับข้อมูลและประสานงานภารกิจการตรวจจับที่สำคัญ
  • เลเยอร์อินเทอร์เฟซควบคุม: โมดูลรีเลย์ 5V ให้ฟีดแบ็กเชิงกลไกสำหรับการตรวจสอบสถานะเครือข่าย (เช่น ถูกกระตุ้นให้รีบูต)
  • ตรรกะการประมวลผล: โค้ด Arduino ใช้กลยุทธ์ "ปลอดภัยไว้ก่อน" (หรือส่งสัญญาณรีบูต): มันตีความเมื่อ ping ไม่ได้รับคำตอบ และจับคู่สถานะของรีเลย์เพื่อให้ความเสถียรของเครือข่ายที่ปลอดภัยและเป็นจังหวะ
  • ลูปการสื่อสาร: ส่งข้อความสถานะออกมาเป็นจังหวะๆ ไปยัง Serial Monitor ในระหว่างการปรับเทียบเริ่มต้น เพื่อประสานสถานะ

อุปกรณ์ที่ต้องใช้

Components

สำหรับโปรเจคนี้เราต้องการ: NodeMCU, Stepdown Converter, Relay Module, LED สีแดง 2 ดวง, LED สีน้ำเงิน 3 ดวง, ตัวต้านทาน 100Ω, ปลั๊กไฟ และ เต้ารับไฟ

โครงสร้างพื้นฐานฮาร์ดแวร์-เน็ตเวิร์ก

  • NodeMCU ESP8266: "สมอง" ของโปรเจค จัดการการสุ่มตัวอย่าง WiFi แบบหลายทิศทาง และประสานการทำงานของรีเลย์กับ LED
  • โมดูลรีเลย์ 5V: ให้ "ลิงก์สวิตช์" ที่ชัดเจนและน่าเชื่อถือสำหรับสายไฟ
  • LEDs: ให้ฟีดแบ็กสถานะด้วยภาพสำหรับแต่ละ "ภารกิจ Ping" ที่สำเร็จ
  • Step-down Converter: จ่ายไฟให้ NodeMCU และโมดูลรีเลย์จากไฟบ้าน

วงจร

Schematic

เอาล่ะ มาประกอบชิ้นส่วนเข้าด้วยกันตามที่พี่วาดในแผนภาพวงจรนี้เป๊ะๆ ระวังให้ดีเวลาจัดการกับเต้ารับไฟบ้านและสายไฟ AC นะน้อง Stepdown Converter จะจ่ายไฟให้ NodeMCU และโมดูลรีเลย์ ส่วน LED จะต่อกับขา Digital ของไมโครคอนโทรลเลอร์ รีเลย์ทำหน้าที่เป็นสวิตช์ เปิด-ปิดเราเตอร์ตามการตอบสนองของ ping อย่าลืมเช็คขาของโมดูลรีเลย์ตัวเองก่อนต่อเข้าวงจรด้วยล่ะ

บอร์ด

Board Design

นี่คือหน้าตาบอร์ดของพี่ทั้งแบบ 2D และ 3D จริงๆ แล้วพี่ทำเลียนแบบ NodeMCU Prototyping Board ที่น้องๆ หาซื้อได้จาก AliExpress ในราคาประมาณ $4 ถึง $6 นั่นแหละ

การประกอบชิ้นส่วน

Soldering NodeMCU

เริ่มต้นด้วยการบัดกรี NodeMCU ลงบนบอร์ด เพราะพี่รักเซนเซอร์และไมโครคอนโทรลเลอร์ของพี่มาก พี่จะไม่บัดกรีมันลงบอร์ดโดยตรง แต่จะบัดกรี 'เฟมเมิลพิ้นเฮดเดอร์' ลงบนบอร์ดแทน แล้วค่อยเสียบเซนเซอร์กับไมโครคอนโทรลเลอร์ลงไป

LEDs on Perfboard

ตอนแรกพี่คิดว่าจะบัดกรี LED ลงบนบอร์ดโดยตรง แต่มีอะไรบางอย่างตีขึ้นมาในหัว พี่เลยเปลี่ยนใจ บัดกรีมันลงบนเพิร์ฟบอร์ดแยกก่อน แล้วค่อยบัดกรีเพิร์ฟบอร์ดนั้นลงบนบอร์ดพัฒนาของ NodeMCU อีกที เอาจริงๆ มันไม่จำเป็นเลยนะ 555

Relay and Converter

เมื่อ LED อยู่ตำแหน่งแล้ว ขั้นต่อไปคือบัดกรี step-down-converter และ relay-module ลงบนบอร์ด ต่อไป พี่เจาะรูบนกล่องพลาสติกใสแล้วกาวติดเต้ารับไฟเข้าไป ตอนติดกาวพี่ทำเละเทะนิดนึง แถมเผลอกาวกล่องติดกับโต๊ะอาหารอีกต่างหาก ตัวเองนี่ขี้ลืมสุดๆ พี่ยังเจาะรูที่ด้านหลังกล่องนี้สำหรับสายไฟที่จะต่อกับแหล่งจ่ายไฟ AC อีกด้วย

Final Assembly

ก็ประมาณนั้นแหละน้อง ขอเตือนอีกครั้งนึงเลยนะ: ถ้าไปยุ่งกับไฟบ้านพวก 110v หรือ 240v AC เนี่ย ต้องใช้อุปกรณ์และชุดเซฟตี้ให้ถูกต้องด้วยล่ะ และต้องมั่นใจว่าตัวเองมีทักษะและประสบการณ์พอ หรือไม่ก็ปรึกษาช่างไฟฟ้าที่มีใบอนุญาตซะ โปรเจคนี้ไม่ได้ออกแบบมาให้เด็กเล่นนะจ๊ะ

Skull Inside

ปิดท้ายการเซ็ตอัพ พี่เพิ่มกะโหลกเล็กๆ ลงไปในกล่องอะคริลิก เจ้ากะโหลกนี่นอนเกาะฝุ่นบนโต๊ะพี่มาเป็นปีแล้วว่ะ 555

The Code

Code Screenshot

มา มาดูโค้ดกันดีกว่า โค้ดและไฟล์อื่นๆ สามารถดาวน์โหลดได้จากลิงก์ในคำอธิบายด้านล่าง เพื่อให้รันโค้ดที่แนบมาได้ น้องต้องดาวน์โหลดและติดตั้งไลบรารี่ "ESP8266Ping" ก่อน จะดาวน์โหลดจาก GitHub หรือจากลิงก์ในคำอธิบายด้านล่างก็ได้ แตกไฟล์แล้วก็อปปี้ไปไว้ในโฟลเดอร์ Libraries ของ Arduino จากนั้นเปลี่ยนบอร์ดเป็น ESP8266 ใน Arduino IDE แล้วเลือก NodeMCU โค้ดเริ่มต้นด้วยการ include ไลบรารี่และประกาศตัวแปรต่างๆ ไว้ด้านบน ในส่วน setup() พี่กำหนดโหมดของพินทั้งหมดและทำการเชื่อมต่อกับเราเตอร์ WiFi ในส่วน loop() พี่ทำการทดสอบ ping และจากผลลัพธ์ ก็จะกะพริบไฟ LED สีฟ้า หรือไม่ก็สั่งรีเซ็ตเราเตอร์

ขั้นตอนการทำงานของ WatchDog แบบอัตโนมัติและโต้ตอบได้

กระบวนการตรวจสอบเครือข่ายนี้ออกแบบมาให้มีประสิทธิภาพสูง:

  1. เตรียมพื้นที่ทำงาน: ตั้งค่าตัวรีเลย์และ LED บนบอร์ดให้ถูกต้อง และต่อเข้ากับพินของ NodeMCU ให้เรียบร้อย
  2. ตั้งค่า Sync WiFi: ในสเก็ตช์ Arduino ให้เริ่มต้น WiFi.begin() และกำหนดเซิร์ฟเวอร์เป้าหมาย (เช่น 8.8.8.8) เพื่อประสานการตรวจจับ
  3. ลูปสนทนาภายใน: ระบบจะทำการ ping เป็นระยะๆ ประสิทธิภาพสูง และอัปเดตสถานะของรีเลย์แบบเรียลไทม์ตามการตั้งค่าการเชื่อมต่อของน้อง
  4. บูรณาการการตอบรับด้วยภาพและข้อมูล: ดูแดชบอร์ด Serial ของคุณเปลี่ยนเป็นสัญญาณสถานะแบบเป็นจังหวะโดยอัตโนมัติ พัลส์และติดตามการตั้งค่าตำแหน่งของคุณ

[!IMPORTANT] เพื่อหลีกเลี่ยงการรีบูตโดยไม่ได้ตั้งใจ ให้ทำการ ตรวจสอบแบบหลายครั้ง (multi-ping validation) (เช่น ล้มเหลวติดต่อกัน 5 ครั้งดังที่แสดงในแผนภาพลอจิก) ในโค้ดเสมอ และต้องมั่นใจว่ามีลอจิก Delay After Reboot ที่เหมาะสมในลูป!

แนวทางการขยายในอนาคต

  • บูรณาการแดชบอร์ดแสดงตัวตนด้วย OLED: เพิ่มจอแสดงผล OLED ขนาดเล็กเพื่อแสดง "รีบูตล่าสุด (ชม.:นาที:วินาที)" หรือ "ระยะเวลาทำงาน (Uptime)"
  • ซิงโครไนซ์ด้วยเซ็นเซอร์สภาพอากาศหลายตัว: เชื่อมต่อ "เซ็นเซอร์วัดกระแส (ACS712)" เพื่อทำการ "ติดตามการใช้พลังงาน" แบบความแม่นยำสูงผ่านระบบคลาวด์แบบไร้สาย
  • ซิงค์การสนับสนุนการลงทะเบียนอินเทอร์เฟซคลาวด์: เพิ่มแดชบอร์ดเว็บเฉพาะบนสมาร์ทโฟนผ่าน WiFi/BT เพื่อติดตามและบันทึกประวัติเครือข่ายทั้งหมดอย่างแม่นยำ
  • สนับสนุนการปรับแต่งโปรไฟล์ความเร็วขั้นสูง: เพิ่มลอจิกเฉพาะในโค้ดเพื่อให้ทริกเกอร์เปลี่ยนโดยอัตโนมัติตามกฎที่ผู้ใช้กำหนด!

Internet Hardware WatchDog เป็นโปรเจคที่เพอร์เฟกต์สำหรับคนรักวิทยาศาสตร์ที่มองหาเครื่องมือจัดการเครือข่ายแบบโต้ตอบและน่าสนใจมากกว่านี้! จัดไปวัยรุ่น! สู้งานนะน้อง ห้ามช็อตนะตัวนี้

ขอบคุณ

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

วิดีโอที่เกี่ยวข้อง:

  • Internet Hardware WatchDog
  • DIY Relay Module

ทรัพยากรอื่นๆ ที่น้องอาจจะต้องใช้:

  • โค้ด
  • ESP8266Ping Library
  • ESP8266Ping Library (สำรอง)
  • สคีเมติก
  • ไฟล์ Gerber
  • ผังงาน

สนับสนุนผลงานของพี่ (ถ้ามีจิตศรัทธา):

  • BTC: 1M1PdxVxSTPLoMK91XnvEPksVuAa4J4dDp
  • LTC: MQFkVkWimYngMwp5SMuSbMP4ADStjysstm
  • DOGE: DDe7Fws24zf7acZevoT8uERnmisiHwR5st
  • ETH: 0x939aa4e13ecb4b46663c8017986abc0d204cde60
  • BAT: 0x939aa4e13ecb4b46663c8017986abc0d204cde60
  • LBC: bZ8ANEJFsd2MNFfpoxBhtFNPboh7PmD7M2

เจอกันใหม่ในบทความหน้าจ้า สู้งานนะน้อง!

ข้อมูล Frontmatter ดั้งเดิม

title: "NodeMCU Internet Hardware WatchDog ตัวปัดเซียนดับเน็ต"
description: "นี่คือ "อินเทอร์เน็ต ฮาร์ดแวร์ วอตช์ด็อก" ตัวปัดเซียนที่จะรีบูตเราเตอร์ WiFi ให้อีกรอบทันทีเมื่อมันมีอาการบ๊องๆ ตึงๆ หายไปจากเน็ตแบบวัยรุ่นสุดๆ งานง่ายแต่หล่อ ใช้ NodeMCU กับเซนเซอร์ตรวจสอบ แล้วสั่งรีเลย์ให้กดปุ่ม จัดไป!"
author: "tarantula3"
category: ""
tags:
  - "home automation"
  - "smart appliances"
  - "tracking"
  - "human welfare"
  - "security"
  - "internet of things"
  - "monitoring"
  - "robots"
views: 814
likes: 1
price: 1499
difficulty: "Intermediate"
components: []
tools: []
apps:
  - "1x NodeMCU firmware"
  - "1x Arduino IDE"
downloadableFiles: []
documentationLinks: []
passwordHash: "70af46b5926a66d5fb3a651f857206799a40dad9018efe70834965740badc16e"
encryptedPayload: "U2FsdGVkX196ArX/9q0iOj9A7pi2iGdvU4Ll0YseUl/3BrCspo4Z29/ZkHiisK9eQntLQowaFlRXBcKcH4ZzxvuoWC1YqosmjDHjqVWIaMVaHg7qNcvt63nojNgyK8hH"
seoDescription: "Build a NodeMCU Internet Hardware Watchdog to automatically reboot your WiFi router when internet connection fails."
videoLinks:
  - "https://www.youtube.com/embed/L5nLfEjTePA"
  - "https://www.youtube.com/embed/L5nLfEjTePA"
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/nodemcu-internet-hardware-watchdog-2c6445_cover.jpg"
lang: "en"