ปกบทความ ESP32 เชื่อมต่อ WiFi ไม่ได้ พร้อมข้อความภาษาไทย “วิธีแก้ปัญหา + ตัวอย่างโค้ด” พื้นหลังสีน้ำเงิน และมีโลโก้ Deva DIY เล็ก ๆ มุมล่าง

ESP32 เชื่อมต่อ WiFi ไม่ได้ | วิธีแก้ปัญหา + ตัวอย่างโค้ด

บทนำ

การเชื่อมต่อ WiFi ถือเป็นพื้นฐานสำคัญของ ESP32 ในการทำงานร่วมกับ IoT, Smart Farm, MQTT, Firebase และโครงงานต่าง ๆ แต่หลายครั้งมือใหม่เจอปัญหา “ESP32 เชื่อมต่อ WiFi ไม่ได้” ซึ่งอาจเกิดได้จากทั้งการเขียนโค้ด, Router, หรือการตั้งค่าที่ไม่ถูกต้อง บทความนี้จะพาไปดูสาเหตุ วิธีตรวจสอบ วิธีแก้ และตัวอย่างโค้ด

ก่อนจะเริ่มทำโปรเจกต์ ลองไปทำความรู้จัก ESP32 และฟีเจอร์เด่นที่คุณควรรู้ กันก่อน

แผนภาพ Flowchart ภาษาไทย อธิบายขั้นตอน “ESP32 เชื่อมต่อ WiFi ไม่ได้ → ไม่ได้ → แก้ไข” พร้อมสัญลักษณ์กากบาทสีแดง และโลโก้ Deva DIY มุมล่าง

สาเหตุหลักที่ทำให้ ESP32 เชื่อมต่อ WiFi ไม่ได้

1.1 ใส่ SSID หรือ Password ไม่ถูกต้อง

  • ตัวอักษรเล็ก-ใหญ่มีผล เช่น “MyWiFi” ไม่เท่ากับ “mywifi”
  • รหัสผ่านเกิน 63 ตัวอักษร ESP32 จะไม่เชื่อมต่อ

1.2 Access Point อยู่ไกลเกินไป / สัญญาณอ่อน

  • ESP32 มีเสาสัญญาณเล็ก ถ้าสัญญาณต่ำกว่า -70 dBm จะเชื่อมต่อยาก
  • ใช้คำสั่ง WiFi.RSSI() เพื่อเช็กความแรงสัญญาณ

1.3 รหัสผ่านมีอักขระพิเศษ

  • เช่น @#$%^&*() อาจทำให้การเข้ารหัสผิดพลาด ควรลองรหัสแบบง่ายเพื่อทดสอบ

1.4 ใช้ความถี่ 5GHz (ESP32 รองรับแค่ 2.4GHz)

  • ถ้า Router ปล่อย WiFi 2 คลื่น (2.4 + 5GHz) ให้เลือก SSID ที่เป็น 2.4GHz เท่านั้น

1.5 การเขียนโค้ดผิดลำดับ

  • ต้องใช้ WiFi.begin(ssid, password); ก่อน while(WiFi.status() != WL_CONNECTED)
  • ถ้าลืม delay() ใน loop เชื่อมต่อ อาจทำให้ ESP32 รีสตาร์ท

1.6 ปัญหาจาก Router

  • DHCP ปิดอยู่ → ไม่แจก IP ให้ ESP32
  • MAC Filter → บล็อก ESP32 อัตโนมัติ
  • IP ซ้ำกับอุปกรณ์อื่น

1.7 Library หรือ Core Arduino ไม่อัปเดต

  • ใช้ ESP32 Arduino Core เวอร์ชันเก่า อาจมีบั๊กเรื่อง WiFi
  • ควรอัปเดตจาก ESP32 Arduino Core ล่าสุด
เพิ่งเริ่มต้นกับ ESP32? ไม่แน่ใจว่าไลบรารี WiFi มีฟังก์ชันอะไรให้ใช้บ้าง — คลิกอ่าน ESP32 WiFi Library Functions เพิ่มเติมได้เลย

วิธีตรวจสอบปัญหาเบื้องต้น

  1. เปิด Serial Monitor เพื่อดูข้อความ Debug
  2. ใช้คำสั่ง WiFi.status()
    • WL_CONNECTED = เชื่อมต่อแล้ว
    • WL_NO_SSID_AVAIL = หา WiFi ไม่เจอ
    • WL_CONNECT_FAILED = รหัสผิด หรือ Router ปฏิเสธ
  3. เพิ่ม Serial.println(WiFi.localIP()); เพื่อดูว่าได้รับ IP จริงหรือ
ตารางภาษาไทยแสดงค่าคืนจากคำสั่ง WiFi.status() ของ ESP32 ได้แก่ WL_CONNECTED = เชื่อมต่อแล้ว, WL_NO_SSID_AVAIL = หา WiFi ไม่เจอ, WL_CONNECT_FAILED = รหัสผิดหรือ Router ปฏิเสธ พร้อมโลโก้ Deva DIY มุมล่าง

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

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

  • คัดลอกจากมือถือ/คอมมาแทนการพิมพ์เพื่อลดความผิดพลาด

3.2 ใช้ Static IP

  • ถ้า Router แจก DHCP ไม่เสถียร ลองตั้งค่าแบบ Static IP
IPAddress local_IP(192,168,1,200);
IPAddress gateway(192,168,1,1);
IPAddress subnet(255,255,255,0);

WiFi.config(local_IP, gateway, subnet);
WiFi.begin(ssid, password);

3.3 เพิ่มโค้ด Retry / Auto Reconnect

  • ใช้ Loop ตรวจสอบและเชื่อมต่อใหม่อัตโนมัติ

3.4 ใช้ WiFiManager

  • ทำให้ผู้ใช้เปลี่ยนรหัสผ่านผ่าน Web Page โดยไม่ต้องแก้โค้ด
    👉 บทความ ESP32 WiFi Manager

3.5 ตรวจสอบ Router

  • ต้องเป็น 2.4GHz
  • เปิด DHCP
  • รีสตาร์ท Router ถ้ามีปัญหา

3.6 อัปเดต Arduino Core

  • ไปที่ Boards Manager → ติดตั้ง ESP32 by Espressif เวอร์ชันล่าสุด
เรียนรู้วิธีสร้าง WiFi Manager บน ESP32 ด้วย ESPAsyncWebServer — เข้าอ่านที่ ESPAsyncWebServer Create WiFi Manager เพื่อโค้ดตัวอย่างและขั้นตอนครบถ้วน

ตัวอย่างโค้ดแก้ปัญหา

4.1 โค้ดเชื่อมต่อ WiFi พื้นฐาน

#include <WiFi.h>

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

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);

  Serial.print("Connecting");
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("\nConnected!");
  Serial.println(WiFi.localIP());
}

void loop() {}

4.2 โค้ด Auto Reconnect

void loop() {
  if (WiFi.status() != WL_CONNECTED) {
    Serial.println("WiFi lost... reconnecting");
    WiFi.begin(ssid, password);
    delay(5000);
  }
}

4.3 โค้ด Static IP + Debug

IPAddress local_IP(192,168,1,200);
IPAddress gateway(192,168,1,1);
IPAddress subnet(255,255,255,0);

void setup() {
  Serial.begin(115200);
  WiFi.config(local_IP, gateway, subnet);
  WiFi.begin(ssid, password);
}

สรุป

  • ปัญหาหลักคือ SSID/Password, ความถี่ 5GHz, DHCP
  • ใช้ Serial Monitor ตรวจสอบ Error จะช่วยแก้ได้เร็ว
  • แนะนำให้ใช้ WiFiManager ในโปรเจกต์จริง เพื่อให้ผู้ใช้เปลี่ยน WiFi เอง

FAQ

ทำไม ESP32 ต่อ WiFi ไม่ติดทั้งที่รหัสถูกต้อง?

→ อาจเป็นเพราะ Router เป็น 5GHz

ESP32 รองรับ WiFi 5GHz ไหม?

→ ไม่รองรับ มีแค่ 2.4GHz

ถ้า WiFi หลุดบ่อยควรทำยังไง?

→ เพิ่ม Auto Reconnect หรือ Static IP

ใช้มือถือแชร์ Hotspot ให้ ESP32 ได้ไหม?

→ ได้ แต่ต้องเป็น 2.4GHz

Serial Monitor ขึ้น WL_NO_SSID_AVAIL คืออะไร?

→ หา SSID ไม่เจอ

ต้องใช้ Static IP หรือ DHCP?

→ แนะนำ DHCP แต่ Static ช่วยแก้ปัญหาบางกรณี

ถ้า Router ปิด DHCP จะเชื่อมต่อได้ไหม?

→ ไม่ เว้นแต่ใช้ Static IP

ทำไม ESP32 ต่อ WiFi แล้วช้า?

→ อาจเกิดจากสัญญาณอ่อนหรือ IP ซ้ำ

ควรอัปเดต ESP32 Core Arduino บ่อยไหม?

→ ควร เพื่อแก้บั๊กและเพิ่มฟีเจอร์

ทำไม WiFiManager ถึงสะดวกกว่า?

→ ไม่ต้องแก้โค้ดเมื่อเปลี่ยนเครือข่าย

Shopping Cart
Scroll to Top