อินโฟกราฟิกแสดงขั้นตอนการเชื่อมต่อ Wi-Fi ใหม่บนบอร์ด ESP32: 1. Wi-Fi หลุดการเชื่อมต่อ 2. ตรวจสอบว่าการเชื่อมต่อหาย 3. พยายามเชื่อมต่อใหม่ 4. การเชื่อมต่อกลับมาใช้งานได้อีกครั้ง พร้อมโลโก้ DEVADIY

ESP32 WiFi Reconnect – วิธีเชื่อมต่อ WiFi ใหม่อัตโนมัติเมื่อหลุดการเชื่อมต่อ

ESP32 WiFi Reconnect – การเชื่อมต่อ WiFi ใหม่เมื่อสัญญาณหลุด

เมื่อใช้งาน ESP32 ในระบบ IoT หรือ Smart Farm แบบ PoPo บางครั้งอาจเกิดเหตุการณ์ WiFi หลุด เช่น สัญญาณอ่อน, Router รีสตาร์ท, หรือมีการเปลี่ยนช่องสัญญาณ (Channel) ถ้าไม่จัดการให้เชื่อมต่อใหม่ อุปกรณ์จะไม่สามารถส่งหรือรับข้อมูลต่อได้

เราสามารถแก้ปัญหานี้ได้ 2 วิธี

  • ใช้คำสั่งจากไลบรารี WiFi.reconnect()
  • เขียนฟังก์ชันตรวจสอบและเชื่อมต่อใหม่เอง

ทำความรู้จักฟังก์ชันต่าง ๆ ในไลบรารี WiFi บน ESP32 และวิธีใช้งานอย่างมืออาชีพได้ที่ ESP32 WiFi Library Functions

ใช้ WiFi.reconnect() จากไลบรารี

ฟังก์ชันนี้จะสั่งให้ ESP32 เชื่อมต่อกับ เครือข่ายล่าสุดที่เคยเชื่อม โดยไม่ต้องระบุ SSID/Password ใหม่

ตัวอย่างโค้ด

เริ่มต้นกับ Arduino ง่าย ๆ เพียงอ่าน Arduino IDE Guide — อธิบายตั้งแต่การติดตั้งจนถึงการอัปโหลดโค้ดให้บอร์ด

#include <WiFi.h>

const char* ssid = “Your_SSID”;
const char* password = “Your_PASSWORD”;

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  Serial.println(“Connecting to WiFi…”);
}

void loop() {
  if (WiFi.status() != WL_CONNECTED) {
      Serial.println(“WiFi lost. Reconnecting…”);
      WiFi.reconnect();
   }
 delay(10000);
}

ข้อดี: ใช้ง่าย เพียงสั่ง WiFi.reconnect() ก็พยายามต่อใหม่ให้ทันที
ข้อเสีย: ควบคุมขั้นตอนการเชื่อมต่อไม่ได้มากนัก เช่น กำหนดช่วงเวลาเช็กเองไม่ได้

เขียนฟังก์ชัน WiFi_reconnect() เอง

เราสามารถสร้างฟังก์ชันตรวจสอบการเชื่อมต่อและเชื่อมใหม่ตามเงื่อนไขได้ เช่น เช็กทุก 10 วินาที

ตัวอย่างโค้ด

#include <WiFi.h>

const char* ssid = “Your_SSID”;
const char* password = “Your_PASSWORD”;

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  Serial.println(“Connecting to WiFi…”);
}

void loop() {
  WiFi_reconnect();
}

void WiFi_reconnect() {
  static unsigned long previousTime = 0;
  const unsigned long interval = 10000; // 10 วินาที
  if ((WiFi.status() != WL_CONNECTED) && (millis() – previousTime >= interval)) {
    Serial.println(“Reconnecting to WiFi…”);
    WiFi.disconnect();
    WiFi.reconnect();
    previousTime = millis();
  }
}

ข้อดี:

  • ควบคุมความถี่ในการเช็กได้
  • เพิ่มเงื่อนไขเสริม เช่น รีสตาร์ทบอร์ดเมื่อเชื่อมต่อเกินเวลาที่กำหนด

ข้อเสีย:

  • ต้องเขียนโค้ดเพิ่มและดูแลเงื่อนไขเอง

ตารางเปรียบเทียบ

 

วิธีการใช้งานง่ายควบคุมเวลาเช็กเพิ่มเงื่อนไขอื่นได้เหมาะกับ
WiFi.reconnect()โค้ดสั้น เน้นความง่าย
ฟังก์ชันเอง (WiFi_reconnect())งานที่ต้องการความเสถียรสูง

คำถามที่พบบ่อย (FAQ)

Q1: ถ้าใช้ WiFi.reconnect() ต้องใส่ WiFi.begin() ซ้ำไหม?
A: ไม่จำเป็น ถ้าบอร์ดเคยเชื่อมต่อแล้วจะใช้ข้อมูลเดิมได้เลย

Q2: ทำไม WiFi.reconnect() บางครั้งเชื่อมต่อไม่ได้?
A: อาจเกิดจาก Router เปลี่ยนรหัสผ่าน หรือสัญญาณ WiFi อ่อนเกินไป

Q3: ตั้งเวลาเช็กการเชื่อมต่อกี่วินาทีดี?
A: ปกติ 5–10 วินาทีถือว่าเหมาะสม ไม่ถี่จนเกินไป

Q4: จำเป็นต้องใช้ WiFi.disconnect() ก่อนหรือไม่?
A: แนะนำให้ใช้ก่อนเชื่อมใหม่ เพื่อเคลียร์สถานะเดิมออก

Q5: ถ้าใช้ใน โครงงาน ควรเลือกวิธีไหน?
A: แนะนำให้เขียนฟังก์ชันเอง เพื่อควบคุมเวลาและเงื่อนไขการรีคอนเนกต์

Q6: สามารถใช้ WiFi.reconnect() กับโหมด AP ได้ไหม?
A: ไม่ได้ ฟังก์ชันนี้ใช้กับโหมด STA (Station) เท่านั้น

Q7: ถ้า WiFi หลุดระหว่างส่งข้อมูลจะเกิดอะไรขึ้น?
A: การส่งจะล้มเหลว ต้องตรวจสอบสถานะและส่งใหม่หลังรีคอนเนกต์

Q8: ใช้ ESPAsyncWebServer ต้องทำ reconnect เองไหม?
A: ควรทำ เพราะตัวเซิร์ฟเวอร์ไม่ได้เช็กการเชื่อมต่อ WiFi ให้อัตโนมัติ

Q9: สามารถใช้ WiFi.begin() แทน WiFi.reconnect() ได้หรือไม่?
A: ได้ แต่ WiFi.begin() จะใช้เวลาเชื่อมต่อนานกว่าเพราะเริ่มใหม่ทั้งหมด

Q10: ถ้าต้องการให้บอร์ดรีสตาร์ทเองเมื่อเชื่อมไม่ได้ ควรทำอย่างไร?
A: เพิ่มเงื่อนไขนับจำนวนครั้งที่เช็กเกินกำหนด แล้วใช้ ESP.restart()

Shopping Cart
Scroll to Top