สวัสดีครับนักศึกษาทุกคน ในบทที่ผ่านๆ มา เราเรียนรู้วิธีสั่งงาน ESP32 แบบ Offline กันไปแล้ว แต่วิชานี้คือ Internet of Things ดังนั้นหัวใจสำคัญคืออุปกรณ์ของเราต้อง “ออนไลน์” ได้
ESP32 นั้นเก่งเรื่องนี้มากครับ เพราะมันมีโมดูล WiFi ในตัว โดยไม่ต้องต่ออุปกรณ์เพิ่มเหมือน Arduino รุ่นเก่า ในบทนี้เราจะมาเรียนรู้วิธีเขียนโปรแกรมให้ ESP32 เกาะ WiFi บ้าน หรือ WiFi วิทยาลัย เพื่อเตรียมส่งข้อมูลกันครับ
1. โหมดการทำงานของ WiFi บน ESP32
ก่อนจะเขียนโค้ด ต้องรู้ก่อนว่า WiFi ของ ESP32 ทำงานได้ 3 โหมดหลักๆ คือ:
- Station Mode (STA): เป็นโหมด “ลูกข่าย” (เหมือนมือถือเราที่ไปเกาะ WiFi บ้าน) <– เราจะใช้อันนี้เป็นหลัก
- Access Point Mode (AP): เป็นโหมด “ตัวแม่” ปล่อยสัญญาณ WiFi ออกมาให้คนอื่นเกาะ (เหมือนเราเปิด Hotspot)
- AP + STA Mode: ทำงานทั้งสองอย่างพร้อมกัน
2. ไลบรารี WiFi.h
โชคดีที่ Arduino IDE มีไลบรารีมาตรฐานชื่อ WiFi.h มาให้แล้ว เราไม่ต้องไปหาโหลดเพิ่ม เพียงแค่ประกาศ #include <WiFi.h> ที่หัวกระดาษ ก็เรียกใช้คำสั่งต่างๆ ได้ทันที
คำสั่งสำคัญที่ต้องรู้:
WiFi.begin(ssid, password): เริ่มต้นเชื่อมต่อWiFi.status(): เช็คสถานะการเชื่อมต่อ (เชื่อมติดหรือยัง?)WiFi.localIP(): ขอดูเลข IP Address ที่ได้รับจาก Router
3. ปฏิบัติการ: เชื่อมต่อ WiFi
เราจะเขียนโปรแกรมให้ ESP32 เชื่อมต่อ WiFi และเมื่อเชื่อมต่อสำเร็จ ให้แสดงข้อความว่า “Connected” พร้อมบอกเลข IP Address ผ่านทาง Serial Monitor ครับ
ขั้นตอนการเขียนโค้ด:
- คัดลอกโค้ดด้านล่างไปวางใน Arduino IDE
- สำคัญมาก: แก้ไขบรรทัด
ssidและpasswordให้เป็นของ WiFi ที่นักศึกษาใช้งานจริง (รองรับเฉพาะ WiFi 2.4GHz เท่านั้นนะครับ 5GHz รับไม่ได้)
#include <WiFi.h> // เรียกใช้ไลบรารี WiFi
// --- ส่วนกำหนดค่า WiFi ---
const char* ssid = "YOUR_WIFI_NAME"; // ใส่ชื่อ WiFi (ห้ามลบฟันหนู)
const char* password = "YOUR_WIFI_PASS"; // ใส่รหัสผ่าน WiFi
void setup() {
Serial.begin(115200); // เริ่มต้น Serial Monitor
// เริ่มต้นการเชื่อมต่อ
Serial.println();
Serial.print("Connecting to WiFi: ");
Serial.println(ssid);
WiFi.begin(ssid, password); // คำสั่งเชื่อมต่อ
// วนลูปเช็คสถานะ จนกว่าจะเชื่อมต่อได้ (WL_CONNECTED)
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print("."); // พิมพ์จุดไข่ปลาไปเรื่อยๆ ระหว่างรอ
}
// เมื่อหลุดลูปออกมาได้ แปลว่าเชื่อมต่อสำเร็จแล้ว
Serial.println("");
Serial.println("WiFi Connected!");
Serial.print("IP Address: ");
Serial.println(WiFi.localIP()); // แสดงเลข IP Address
}
void loop() {
// ในบทนี้เรายังไม่ต้องทำอะไรใน loop
// แค่เช็คว่าต่อเน็ตติดก็ถือว่าผ่านภารกิจแล้วครับ
}
4. วิธีดูผลลัพธ์ (Debugging)
- Upload โค้ดลงบอร์ด ESP32
- เปิด Serial Monitor ขึ้นมา
- กดปุ่ม EN (หรือ RESET) บนบอร์ด 1 ครั้ง เพื่อให้บอร์ดเริ่มทำงานใหม่
- สังเกตหน้าจอ:
- ถ้าเห็นจุดไข่ปลาวิ่ง
......แล้วตามด้วยWiFi Connected!และเลข IP เช่น192.168.1.105แสดงว่า สำเร็จ! - ถ้าจุดไข่ปลาวิ่งไม่หยุดเป็นนาที แสดงว่า:
- ชื่อ WiFi หรือ รหัสผ่าน ผิด (เช็คตัวเล็ก-ตัวใหญ่ดีๆ)
- WiFi ที่ใช้เป็นคลื่น 5GHz (ESP32 รับได้แค่ 2.4GHz)
- สัญญาณ WiFi อ่อนเกินไป
- ถ้าเห็นจุดไข่ปลาวิ่ง

5. ความรู้เสริม: RSSI (ความแรงสัญญาณ)
ในงานติดตั้งจริง เราต้องรู้ว่าจุดที่เราไปติดกล่อง IoT นั้นสัญญาณ WiFi ถึงไหม เราสามารถเช็คได้ด้วยคำสั่ง:
long rssi = WiFi.RSSI();
Serial.print("Signal Strength (RSSI): ");
Serial.println(rssi);
- ค่าจะออกมาเป็น ตัวเลขติดลบ
- ยิ่งตัวเลขเข้าใกล้ 0 ยิ่งดี (เช่น -50 ดีกว่า -90)
- ถ้าต่ำกว่า -85 dBm อาจจะเริ่มใช้งานไม่เสถียรครับ

สรุปท้ายบท
การเชื่อมต่อ WiFi ได้ คือจุดเปลี่ยนสำคัญที่ทำให้อุปกรณ์ของเรามี “ตัวตน” อยู่ในระบบเครือข่าย พร้อมที่จะรับ-ส่งข้อมูลแล้ว
ภารกิจต่อไป: เมื่อเราต่อเน็ตได้แล้ว แต่ถ้าเราอยากอ่านค่าเซนเซอร์ที่ซับซ้อนขึ้น เช่น “อุณหภูมิและความชื้น” จาก DHT11 ซึ่งต้องใช้ Library เสริม เราจะติดตั้งและเขียนโค้ดอย่างไร? ในบทความหน้า เราจะมาเรียนรู้เรื่อง การใช้งาน External Libraries กับเซนเซอร์ DHT11 กันครับ
หมายเหตุ:
- จุดที่มักตกม้าตายคือ WiFi 5GHz ครับ ต้องย้ำเสมอว่า ESP32 รุ่นมาตรฐาน (ไม่ใช่รุ่น C5/C6) รับได้แค่ 2.4GHz เท่านั้น
- การกดปุ่ม Reset หลังเปิด Serial Monitor สำคัญมาก เพราะบางทีโค้ดมันรันไปแล้วก่อนที่เราจะเปิดหน้าจอ ทำให้ไม่เห็นข้อความ “Connecting…” ครับ
