🔧 Troubleshooting Guide

แก้ปัญหา ESP32 เชื่อมต่อ WiFi ไม่ได้

วิธีแก้ปัญหา ESP32 เชื่อมต่อ WiFi ไม่ได้ที่พบบ่อยที่สุด พร้อมโค้ดตัวอย่างและเทคนิคการ Debug แบบละเอียด

6 มีนาคม 2026 20 นาที ระดับเริ่มต้น ESP32, WiFi, Troubleshooting

1 ปัญหาที่พบบ่อยที่สุด

ปัญหา 1: ESP32 พยายามเชื่อมต่อแต่ไม่สำเร็จ

Serial Monitor แสดง:

WiFi.status(): 6 (WL_DISCONNECTED)

อาการ: ESP32 พยายามเชื่อมต่อ WiFi ตลอดเวลา แต่ไม่เคยได้ IP address

ปัญหา 2: เชื่อมต่อได้แต่หลุดบ่อย

อาการ: เชื่อมต่อสำเร็จและได้ IP แต่หลุดการเชื่อมต่อทุกๆ 2-5 นาที

ปัญหา 3: ESP32 เชื่อมต่อ WiFi ช้ามาก

อาการ: ใช้เวลา 30-60 วินาที หรือนานกว่านั้นในการเชื่อมต่อ

ปัญหา 4: ไม่เห็น WiFi Network

อาการ: ESP32 สแกนแล้วไม่เห็น SSID ที่ต้องการเชื่อมต่อ

2 วิธีแก้ปัญหาทีละขั้นตอน

1 ตรวจสอบความถี่ WiFi (2.4GHz vs 5GHz)

ปัญหา: ESP32 (และ ESP8266) ไม่รองรับ 5GHz WiFi! ต้องใช้ 2.4GHz เท่านั้น

✓ วิธีแก้:

  1. ไปที่ Router settings
  2. ตรวจสอบว่าเปิด 2.4GHz อยู่
  3. ถ้า SSID เดียวกัน (Dual-band), แยกชื่อออกมา
  4. เชื่อมต่อ ESP32 กับ 2.4GHz network

2 ตรวจสอบ SSID และ Password

❌ ผิด (ตัวอย่าง)
const char* ssid = "MyWiFi";
const char* password = "password";
✅ ถูกต้อง
const char* ssid = "MyWiFi_2.4G";
const char* password = "MySecurePass123";

ข้อควรระวัง: ตรวจสอบว่าไม่มีช่องว่างนำหน้า/ตามหลัง SSID หรือ password และตรวจสอบตัวพิมพ์เล็ก/ใหญ่

3 เพิ่มระยะหมดเวลาการเชื่อมต่อ

บางครั้ง ESP32 ต้องการเวลานานกว่าปกติในการเชื่อมต่อ ควรเพิ่มระยะหมดเวลา (timeout) และ retry

WiFi Connection with Retry
#include <WiFi.h>

const char* ssid = "YOUR_SSID";
const char* password = "YOUR_PASSWORD";

void connectToWiFi() {
  Serial.println("กำลังเชื่อมต่อ WiFi...");
  
  WiFi.begin(ssid, password);
  
  // ลองเชื่อมต่อสูงสุด 20 ครั้ง (10 วินาที)
  int attempts = 0;
  while (WiFi.status() != WL_CONNECTED && attempts < 20) {
    delay(500);
    Serial.print(".");
    attempts++;
  }
  
  if (WiFi.status() == WL_CONNECTED) {
    Serial.println("\n✓ เชื่อมต่อสำเร็จ!");
    Serial.print("IP: ");
    Serial.println(WiFi.localIP());
  } else {
    Serial.println("\n✗ เชื่อมต่อไม่สำเร็จ");
  }
}

void setup() {
  Serial.begin(115200);
  connectToWiFi();
}

void loop() {
  // ตรวจสอบสถานะการเชื่อมต่อ
  if (WiFi.status() != WL_CONNECTED) {
    Serial.println("หลุดการเชื่อมต่อ กำลังเชื่อมต่อใหม่...");
    connectToWiFi();
  }
  delay(10000); // ตรวจสอบทุกๆ 10 วินาที
}

4 ปรับการตั้งค่า WiFi Power

ถ้าระยะห่างไกลหรือมีสัญญาณรบกวนมาก ลองเพิ่มกำลังส่งสัญญาณ WiFi

// ตั้งค่ากำลังส่งสัญญาณ WiFi สูงสุด
WiFi.setTxPower(WIFI_POWER_19_5dBm); // สูงสุด

// หรือใช้ค่าระหว่างกลาง
WiFi.setTxPower(WIFI_POWER_15dBm); // ปานกลาง

// ประหยัดพลังงาน (ถ้าใกล้ router)
WiFi.setTxPower(WIFI_POWER_2dBm); // ต่ำสุด

⚠️ คำเตือน: การตั้งกำลังสูงสุดจะทำให้ใช้พลังงานมากขึ้น ใช้เฉพาะเมื่อจำเป็นเท่านั้น

3 โค้ดวินิจฉัยปัญหา WiFi

WiFi Diagnostic Tool
#include <WiFi.h>

const char* ssid = "YOUR_SSID";
const char* password = "YOUR_PASSWORD";

void scanNetworks() {
  Serial.println("\n--- สแกน WiFi Networks ---");
  
  int n = WiFi.scanNetworks();
  Serial.println("ค้นพบ " + String(n) + " networks");
  
  for (int i = 0; i < n; i++) {
    Serial.print(i + 1);
    Serial.print(": ");
    Serial.print(WiFi.SSID(i));
    Serial.print(" (");
    Serial.print(WiFi.RSSI(i));
    Serial.print(")");
    Serial.println((WiFi.encryptionType(i) == WIFI_AUTH_OPEN)?" ":"*");
    delay(10);
  }
}

void printWiFiStatus() {
  Serial.println("\n--- สถานะ WiFi ---");
  
  switch (WiFi.status()) {
    case WL_IDLE_STATUS:
      Serial.println("สถานะ: อยู่ระหว่างเชื่อมต่อ");
      break;
    case WL_NO_SSID_AVAIL:
      Serial.println("สถานะ: ไม่พบ SSID");
      break;
    case WL_SCAN_COMPLETED:
      Serial.println("สถานะ: สแกนเสร็จสิ้น");
      break;
    case WL_CONNECTED:
      Serial.println("สถานะ: เชื่อมต่อสำเร็จ");
      Serial.print("IP: ");
      Serial.println(WiFi.localIP());
      Serial.print("Gateway: ");
      Serial.println(WiFi.gatewayIP());
      Serial.print("Subnet: ");
      Serial.println(WiFi.subnetMask());
      Serial.print("RSSI: ");
      Serial.println(WiFi.RSSI());
      Serial.print("Channel: ");
      Serial.println(WiFi.channel());
      break;
    case WL_CONNECT_FAILED:
      Serial.println("สถานะ: เชื่อมต่อล้มเหลว");
      break;
    case WL_CONNECTION_LOST:
      Serial.println("สถานะ: หลุดการเชื่อมต่อ");
      break;
    case WL_DISCONNECTED:
      Serial.println("สถานะ: ตัดการเชื่อมต่อ");
      break;
  }
}

void setup() {
  Serial.begin(115200);
  delay(1000);
  
  // สแกนหา network ก่อน
  scanNetworks();
  
  // เชื่อมต่อ WiFi
  Serial.println("\nกำลังเชื่อมต่อ...");
  WiFi.begin(ssid, password);
  
  // รอเชื่อมต่อสูงสุด 20 วินาที
  int attempts = 0;
  while (WiFi.status() != WL_CONNECTED && attempts < 40) {
    delay(500);
    Serial.print(".");
    
    // แสดงสถานะทุกๆ 5 วินาที
    if (attempts % 10 == 0) {
      Serial.println();
      printWiFiStatus();
    }
    
    attempts++;
  }
  
  Serial.println();
  printWiFiStatus();
}

void loop() {
  // ตรวจสอบสถานะทุกๆ 10 วินาที
  static unsigned long lastCheck = 0;
  
  if (millis() - lastCheck > 10000) {
    if (WiFi.status() != WL_CONNECTED) {
      Serial.println("\n⚠️ หลุดการเชื่อมต่อ!");
      printWiFiStatus();
    }
    lastCheck = millis();
  }
}

💡 การใช้งาน

  • • อัปโหลดโค้ดนี้ลง ESP32
  • • เปิด Serial Monitor (115200 baud)
  • • ดูผลลัพธ์เพื่อหาสาเหตุของปัญหา
  • • ใช้ข้อมูลที่ได้แก้ไขปัญหาตามขั้นตอนด้านบน

4 เทคนิคขั้นสูง

Static IP

กำหนด IP แบบคงที่เพื่อหลีกเลี่ยงปัญหา DHCP

WiFi.config(IPAddress(192,168,1,100),
  IPAddress(192,168,1,1),
  IPAddress(255,255,255,0));

WiFi Events

ใช้ WiFi events เพื่อจัดการเหตุการณ์ต่างๆ

WiFi.onEvent([](WiFiEvent_t event,
  WiFiEventInfo_t info){
  Serial.println("WiFi Event!");
});

Hostname

ตั้งชื่อ ESP32 ให้ง่ายต่อการระบุ

WiFi.setHostname("ESP32-Node01");

MDNS

ใช้ MDNS เพื่อเข้าถึงด้วยชื่อแทน IP

if (MDNS.begin("esp32")) {
  Serial.println("MDNS started");
}

5 การป้องกันปัญหา WiFi

ใช้ 2.4GHz เสมอ

ESP32 ไม่รองรับ 5GHz WiFi ต้องใช้ 2.4GHz เท่านั้น

เพิ่ม Auto-Reconnect

เขียนโค้ดให้ reconnect อัตโนมัติเมื่อหลุด

ใกล้ Router

วาง ESP32 ให้ใกล้ router หรือเพิ่ม access point

อัปเดต Firmware

ใช้ ESP32 และ Arduino IDE รุ่นล่าสุด

6 สรุป

ปัญหา WiFi บน ESP32 เป็นปัญหาที่พบบ่อยที่สุด แต่สามารถแก้ไขได้ไม่ยากถ้ารู้สาเหตุ

✓ สิ่งที่คุณเรียนรู้

  • • ปัญหา WiFi ที่พบบ่อยและสาเหตุ
  • • วิธีแก้ปัญหาทีละขั้นตอน
  • • โค้ดวินิจฉัยและ debug WiFi
  • • เทคนิคขั้นสูงในการจัดการ WiFi
  • • การป้องกันปัญหา WiFi ในอนาคต

หากลองทุกวิธีแล้วยังไม่หาย อาจเป็นที่ hardware ลองเปลี่ยน ESP32 บอร์ดใหม่หรือติดต่อผู้ขาย