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 อธิบายแบบเข้าใจง่าย
เชื่อมต่อเครือข่าย 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 วินาทีพอ อย่าถี่จนเกินไป เพราะจะทำให้ระบบหน่วงและไม่เสถียร



