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()






