ESP32 WiFi Library Functions ด้วย WiFi.h (โหมด, สแกน WiFi, ต่อเน็ต, Static IP, Reconnect)
บทความนี้รวม “คำสั่ง Wi‑Fi ที่ใช้บ่อย” บน ESP32 สำหรับมือใหม่/เมคเกอร์: ตั้งค่าโหมด, สแกนหาเครือข่าย, เชื่อมต่อ Router, ตั้ง Static IP และทำ Reconnect เมื่อเน็ตหลุด — พร้อมโค้ดตัวอย่างที่เอาไปใช้ได้เลย
ESP32 WiFi Library คือ “ชุดคำสั่ง (Library) สำหรับควบคุม Wi-Fi บน ESP32” ที่เราเรียกใช้ผ่านไฟล์ WiFi.h ใน Arduino IDE
สรุปแบบเข้าใจง่าย:
ใช้สั่งให้ ESP32 ต่อ Wi-Fi บ้าน/ร้าน (โหมด STA) หรือ ปล่อย Wi-Fi เองให้มือถือมาเกาะ (โหมด AP) หรือทำ ทั้งคู่ (AP+STA)
ทำงานพื้นฐานได้ครบ เช่น สแกนหาเครือข่าย, เชื่อมต่อ SSID/Password, เช็คสถานะการต่อ, อ่านค่า IP / RSSI
ตั้งค่าได้ลึกขึ้น เช่น Static IP (ให้ IP ไม่เปลี่ยน) และทำ Reconnect เมื่อ Wi-Fi หลุด
ถ้าคุณทำโปรเจกต์ที่ต้องสื่อสารผ่านเน็ต/แลน (เว็บเซิร์ฟเวอร์, แอปคุม, ส่งข้อมูลเซนเซอร์)
WiFi.hคือ “ประตูหลัก” ที่ทำให้ ESP32 เข้าเครือข่ายได้
ถ้าอยากปูพื้นฐานก่อน: ดูบทความ “ESP32 คืออะไร” และ “ESP32 Pinout Devkit V1” ในเว็บ DevaDIY ได้เลย (ลิงก์ท้ายบทความ)
🎥 วิดีโอสอน: ESP32 WiFi Library Functions
เริ่มต้น: เพิ่มไลบรารี Wi‑Fi
ก่อนใช้งานคำสั่งทั้งหมด ให้ include ไลบรารี WiFi.h ในโปรเจกต์ของคุณ:
#include "WiFi.h"
หมายเหตุ: เมื่อติดตั้งบอร์ด ESP32 ใน Arduino IDE แล้ว ไลบรารีนี้จะติดมาพร้อมใช้งานอยู่แล้ว
Wi‑Fi Mode
ESP32 ทำได้ 3 โหมดหลัก: เป็น “เครื่องลูกข่าย” (STA), เป็น “ปล่อย Wi‑Fi เอง” (AP) หรือทำทั้งคู่พร้อมกัน (AP+STA)
เลือกโหมดให้ถูกก่อน จะทำงานง่ายขึ้น:
- WIFI_STA : ESP32 ไปเชื่อม Router (เหมาะกับ IoT / WebServer ในบ้าน)
- WIFI_AP : ESP32 ปล่อย Wi-Fi ให้มือถือมาเชื่อม (เหมาะกับตั้งค่าครั้งแรก)
- WIFI_AP_STA : เปิดทั้ง AP และ STA พร้อมกัน
คำสั่งหลัก
// Station (ต่อ Wi‑Fi Router) WiFi.mode(WIFI_STA); // Access Point (ปล่อย Wi‑Fi ให้มือถือมาเกาะ) WiFi.mode(WIFI_AP); // พร้อมกันทั้ง AP + Station WiFi.mode(WIFI_AP_STA);
ทิป: งาน IoT ส่วนใหญ่ที่ต้อง “ต่อ Router” จะเริ่มที่ WIFI_STA
อยากเห็นภาพการทำงาน STA / AP / STA+AP แบบชัด ๆ แนะนำอ่านบทความ “ESP32 WiFi STA / AP / STA+AP” ในเว็บ DevaDIY
ค้นหาเครือข่าย Wi‑Fi (WiFi Scan)
การสแกนหา Wi‑Fi รอบตัวมีประโยชน์มาก เช่น ตรวจว่า SSID อยู่ในระยะ, ดูความแรงสัญญาณ (RSSI), ดูช่องสัญญาณ (CH) หรือประเภทการเข้ารหัส (Encryption)
โค้ดตัวอย่าง: WiFiScan (เหมือนใน Arduino IDE > Examples > WiFi > WiFiScan)
/* ตัวอย่าง WiFiScan www.devadiy.com/esp32-wifi-library-functions/ */
#include "WiFi.h"
void setup() {
Serial.begin(115200);
// Set WiFi to station mode and disconnect from an AP if it was previously connected.
WiFi.mode(WIFI_STA);
WiFi.disconnect();
delay(100);
Serial.println("Setup done");
}
void loop() {
Serial.println("Scan start");
// WiFi.scanNetworks will return the number of networks found.
int n = WiFi.scanNetworks();
Serial.println("Scan done");
if (n == 0) {
Serial.println("no networks found");
} else {
Serial.print(n);
Serial.println(" networks found");
Serial.println("Nr | SSID | RSSI | CH | Encryption");
for (int i = 0; i < n; ++i) {
// Print SSID and RSSI for each network found
Serial.printf("%2d", i + 1);
Serial.print(" | ");
Serial.printf("%-32.32s", WiFi.SSID(i).c_str());
Serial.print(" | ");
Serial.printf("%4d", WiFi.RSSI(i));
Serial.print(" | ");
Serial.printf("%2d", WiFi.channel(i));
Serial.print(" | ");
switch (WiFi.encryptionType(i)) {
case WIFI_AUTH_OPEN: Serial.print("open"); break;
case WIFI_AUTH_WEP: Serial.print("WEP"); break;
case WIFI_AUTH_WPA_PSK: Serial.print("WPA"); break;
case WIFI_AUTH_WPA2_PSK: Serial.print("WPA2"); break;
case WIFI_AUTH_WPA_WPA2_PSK: Serial.print("WPA+WPA2"); break;
case WIFI_AUTH_WPA2_ENTERPRISE: Serial.print("WPA2-EAP"); break;
case WIFI_AUTH_WPA3_PSK: Serial.print("WPA3"); break;
case WIFI_AUTH_WPA2_WPA3_PSK: Serial.print("WPA2+WPA3"); break;
case WIFI_AUTH_WAPI_PSK: Serial.print("WAPI"); break;
default: Serial.print("unknown");
}
Serial.println();
delay(10);
}
}
Serial.println("");
// Delete the scan result to free memory for code below.
WiFi.scanDelete();
// Wait a bit before scanning again
delay(5000);
}
โค้ดนี้ “ตั้งโหมด STA + disconnect ก่อน” เพื่อให้สแกนได้เสถียร และเรียก
WiFi.scanDelete()ช่วยคืนหน่วยความจำหลังสแกน
นี่คือผลลัพธ์ของการอัพโหลด sketch ของ ESP32 WiFi Scanner
อ่านค่า RSSI: -50 ดีมาก / -60 ดี / -70 พอได้ / -80 เริ่มหลุดง่าย

ดูตัวอย่างวิธี Scan หา WiFi รอบตัวด้วย ESP32
สามารถอ่านต่อได้ที่ ESP32 Scan WiFi อธิบายแบบเข้าใจง่าย
ถ้าคุณเคยเจอ ESP32 ต่อ WiFi แล้ว Serial Monitor ขึ้นจุด ….. ไม่หยุด โค้ดไม่ไปต่อ Sensor ไม่อ่านค่า Relay ไม่ทำงาน คอร์สฟรีนี้จะพาคุณแก้ปัญหานี้แบบเข้าใจจริง ไม่ใช่แค่ก็อปโค้ดแล้วเดาเอา
สมัครคอร์สเรียนฟรี!
เชื่อมต่อเครือข่าย Wi‑Fi
หลัก ๆ คือ: ตั้งโหมดเป็น Station → เรียก WiFi.begin(ssid, password) → รอจน WiFi.status()==WL_CONNECTED หรือหมดเวลา
โค้ดตัวอย่าง: Connect to a Wi‑Fi Network (มี Timeout)
/* Deva DIY ESP32 เชื่อมต่อสัญญาณเครือข่าย Wifi www.devadiy.com/esp32-wifi-library-functions/ */
#include "WiFi.h"
// Replace with your network credentials (STATION)
const char* ssid = "your ssid";
const char* password = "your password";
void setup() {
Serial.begin(115200);
WiFi_init();
}
void loop() {
}
void WiFi_init() {
unsigned long pastTime = 0;
unsigned long nowTime = 0;
unsigned long timeOut = 10000;
// ตั้งค่า esp32 WiFi Mode : Station
WiFi.mode(WIFI_STA);
// เชื่อมต่อเครื่อข่าย WiFi ด้วย ssid, password
WiFi.begin(ssid, password);
// ตรวจสอบการเชื่อมต่อ WiFi ถ้าใช้เวลาเชื่อมต่อเกิน timeOut ให้หยุดการเชื่อมต่อ
pastTime = millis();
while ((WiFi.status() != WL_CONNECTED) && (nowTime <= timeOut)) {
Serial.print("Connecting to ");
Serial.println(ssid);
delay(500);
nowTime = millis() - pastTime;
}
if (WiFi.status() == WL_CONNECTED) {
Serial.print("Local ESP32 IP: ");
Serial.println(WiFi.localIP());
Serial.print("RSSI: ");
Serial.println(WiFi.RSSI());
} else {
Serial.print("Unable connect to Wi-Fi ");
Serial.println(ssid);
WiFi.disconnect();
}
}
ข้อควรระวัง: ถ้าคุณวน while รอ WiFi แบบไม่ timeout แล้ว SSID/Pass ผิด → บอร์ดจะเหมือนค้าง/ทำงานไม่ต่อ
รับค่า Wi‑Fi Connection Status
ค่า WiFi.status() ที่พบบ่อย (ช่วยเวลา debug):
| Value | Constant | ความหมาย |
|---|---|---|
| 0 | WL_IDLE_STATUS | สถานะชั่วคราวเมื่อเริ่ม WiFi.begin() |
| 1 | WL_NO_SSID_AVAIL | หา SSID ไม่เจอ |
| 2 | WL_SCAN_COMPLETED | สแกนเครือข่ายเสร็จแล้ว |
| 3 | WL_CONNECTED | เชื่อมต่อสำเร็จ |
| 4 | WL_CONNECT_FAILED | เชื่อมต่อล้มเหลว |
| 5 | WL_CONNECTION_LOST | การเชื่อมต่อหลุดระหว่างทาง |
| 6 | WL_DISCONNECTED | ถูกตัดการเชื่อมต่อ |
Get WiFi Connection Strength
ดูความแรงสัญญาณหลังเชื่อมต่อสำเร็จ:
Serial.println(WiFi.RSSI());
Get ESP32 IP Address
ดู IP ที่ Router แจกให้ (DHCP):
Serial.println(WiFi.localIP());
เปิดหน้าจอ Serial Monitor แสดงผลลัพธ์ เลข IP และความแรงสัญญาณ

ตั้งค่า Static ESP32 IP Address
ปกติ Router จะ “แจก IP แบบสุ่มตามรอบ” (DHCP) ทำให้รีสตาร์ทแล้ว IP อาจเปลี่ยนได้ ถ้าโปรเจกต์ของคุณต้องเรียกหา ESP32 ด้วย IP เดิม (เช่น Web Server/REST API) แนะนำตั้ง Static IP
หลักการ: ตั้ง IP ให้อยู่ในวงเดียวกับ Router เช่น Router = 192.168.1.1 → ESP32 ตั้งเป็น 192.168.1.50
กำหนดค่าที่ต้องใช้
// Set your Static IP address IPAddress local_IP(192, 168, 1, XXX); // ที่อยู่ IP แบบคงที่ที่คุณต้องการ// Set your Gateway IP address IPAddress gateway(192, 168, 1, 1); IPAddress subnet(255, 255, 0, 0); IPAddress primaryDNS(8, 8, 8, 8); // optional IPAddress secondaryDNS(8, 8, 4, 4); // optional
เรียกใช้ WiFi.config() ใน setup()
void setup() {
// กำหนดค่า Static IP Address
if (!WiFi.config(local_IP, gateway, subnet, primaryDNS, secondaryDNS)) {
Serial.println("Configuration Failed!");
}
}
ระวัง: อย่าตั้ง IP ชนกับอุปกรณ์อื่นในบ้าน (เช่นไปชน IP มือถือ/กล้องวงจรปิด) ไม่งั้นจะงงหนัก
WiFi Reconnect
ถ้า ESP32 หลุดจาก Wi‑Fi คุณสามารถเรียก WiFi.reconnect() เพื่อพยายามกลับไปเชื่อมต่อเครือข่ายเดิมได้
แนวคิด
WiFi.reconnect();
ด้านล่างคือฟังก์ชันตัวอย่างที่เอาไปใส่ใน loop() เพื่อเช็คทุก ๆ 10 วินาที ถ้าหลุดแล้วค่อย reconnect (กัน reconnect รัว ๆ)
โค้ดตัวอย่าง: WiFi_reconnect()
void WiFi_reconnect() {
static unsigned long previousTime = 0;
const unsigned long interval = 10000;
// ถ้า WiFi หลุดการเชื่อมต่อให้ทำการเชื่อมต่อใหม่อีกครั้ง
if ((WiFi.status() != WL_CONNECTED) && ((millis() - previousTime) >= interval)) {
Serial.println("Reconnecting to WiFi");
WiFi.disconnect();
WiFi.reconnect();
previousTime = millis();
}
}
โค้ดตัวอย่างแบบเต็ม (Init + Reconnect)
#include "WiFi.h"
// Replace with your network credentials (STATION)
const char* ssid = "YOUR SSID";
const char* password = "YOUR PASSWORD";
void setup() {
Serial.begin(115200);
WiFi_init();
}
void loop() {
WiFi_reconnect(); // เรียกใช้ฟังก์ชั่น WiFi Reconnect
}
void WiFi_init() {
unsigned long pastTime = 0;
unsigned long nowTime = 0;
unsigned long timeOut = 10000;
// ตั้งค่า esp32 WiFi Mode : Station
WiFi.mode(WIFI_STA);
// เชื่อมต่อเครื่อข่าย WiFi ด้วย ssid, password
WiFi.begin(ssid, password);
// ตรวจสอบการเชื่อมต่อ WiFi ถ้าใช้เวลาเชื่อมต่อเกิน timeOut ให้หยุดการเชื่อมต่อ
pastTime = millis();
while ((WiFi.status() != WL_CONNECTED) && (nowTime <= timeOut)) {
Serial.print("Connecting to ");
Serial.println(ssid);
delay(500);
nowTime = millis() - pastTime;
}
if (WiFi.status() == WL_CONNECTED) {
Serial.print("Local ESP32 IP: ");
Serial.println(WiFi.localIP());
Serial.print("RSSI: ");
Serial.println(WiFi.RSSI());
} else {
Serial.print("Unable connect to Wi-Fi ");
Serial.println(ssid);
WiFi.disconnect();
}
}
void WiFi_reconnect() {
static unsigned long previousTime = 0;
const unsigned long interval = 10000;
// ถ้า WiFi หลุดการเชื่อมต่อให้ทำการเชื่อมต่อใหม่อีกครั้ง
if ((WiFi.status() != WL_CONNECTED) && ((millis() - previousTime) >= interval)) {
Serial.println("Reconnecting to WiFi");
WiFi.disconnect();
WiFi.reconnect();
previousTime = millis();
}
}
ข้อควรระวัง: อย่า reconnect ถี่มาก (เช่นทุก 10ms) เพราะจะทำให้ระบบหน่วง/ร้อน/ไม่เสถียร
ตารางสรุปฟังก์ชันที่ใช้บ่อย (จำแค่นี้ก็พอเริ่มได้)
| Function | หมวด | ใช้ทำอะไร | ตัวอย่าง |
|---|---|---|---|
| WiFi.mode() | Mode | กำหนดโหมด STA / AP / AP+STA | WiFi.mode(WIFI_STA); |
| WiFi.scanNetworks() | Scan | สแกน SSID รอบตัว | int n=WiFi.scanNetworks(); |
| WiFi.begin() | Connect | เริ่มเชื่อม Router | WiFi.begin(ssid, pass); |
| WiFi.status() | Status | เช็ค WL_CONNECTED | WiFi.status()==WL_CONNECTED |
| WiFi.config() | Static IP | ตั้ง Static IP (ต้องเรียกก่อน begin) | WiFi.config(ip, gw, sn); |
| WiFi.localIP() | Network | ดู IP ปัจจุบัน | WiFi.localIP() |
| WiFi.RSSI() | Signal | ดูความแรงสัญญาณ (dBm) | WiFi.RSSI() |
| WiFi.reconnect() | Reconnect | สั่ง reconnect เมื่อหลุด | WiFi.reconnect(); |
อ่านต่อ (บทความที่เกี่ยวข้อง)
ถ้าคุณกำลังเริ่มทำระบบอัตโนมัติในฟาร์ม/บ้าน: โครงสร้าง Wi‑Fi ที่นิ่ง + Reconnect ที่ดี คือ “ฐาน” ของทั้งระบบ
FAQ: คำถามที่พบบ่อยเกี่ยวกับ ESP32 WiFi
ทำไมต้องเรียก WiFi.mode(WIFI_STA) ก่อน?
เพื่อบอก ESP32 ว่าเราจะทำงานแบบ “ไปเชื่อม Router” ชัดเจน ลดความสับสน และทำให้โค้ด predictable มากขึ้น
RSSI เท่าไหร่ถึงถือว่าดี?
โดยทั่วไป -50 ดีมาก, -60 ดี, -70 พอได้, -80 เริ่มหลุดง่าย (ขึ้นกับสภาพแวดล้อม)
WiFi.config() ต้องเรียกตอนไหน?
ต้องเรียก ก่อน WiFi.begin() เสมอ ไม่งั้นค่า Static IP จะไม่ถูกนำไปใช้
Reconnect ควรเช็คถี่แค่ไหน?
แนะนำทุก 2–5 วินาทีพอ อย่าถี่จนเกินไป เพราะจะทำให้ระบบหน่วงและไม่เสถียร



