📑 เนื้อหาในบทความ
🎯 ภาพรวม ESP8266 คืออะไร?
ESP8266 เป็นไมโครคอนโทรลเลอร์ WiFi ราคาประหยัที่มีความสามารถครบครันสำหรับโปรเจกต์ IoT พัฒนาโดยบริษัท Espressif Systems จากประเทศจีน โดยมีจุดเด่นดังนี้:
- ราคาถูกมาก - เริ่มต้นเพียง 90-150 บาท ทำให้เหมาะสำหรับการเรียนรู้และทำโปรเจกต์
- มี WiFi ในตัว - เชื่อมต่ออินเทอร์เน็ตได้ทันทีโดยไม่ต้องใช้โมดูลเพิ่ม
- ใช้งานง่าย - รองรับ Arduino IDE, MicroPython, และ Lua
- ชุมชนขนาดใหญ่ - มีตัวอย่างโค้ดและไลบรารีมากมาย
💡 ความแตกต่าง ESP8266 vs ESP32: ESP32 เป็นรุ่นใหม่กว่าที่มี CPU แรงกว่า, Bluetooth, และ GPIO pin มากกว่า แต่ ESP8266 ยังคงเป็นตัวเลือกยอดนิยมสำหรับโปรเจกต์ง่ายๆ เพราะราคาถูกและใช้งานง่าย
ESP8266 มีประโยชน์อย่างไร?
ด้วยความที่มี WiFi ในตัวและราคาถูก ทำให้ ESP8266 เหมาะสำหรับ:
- 🏠 โปรเจกต์ Smart Home (ควบคุมไฟ, เซ็นเซอร์)
- 🌡️ ระบบวัดอุณหภูมิและความชื้น
- 📡 ส่งข้อมูลเซ็นเซอร์ไปยัง Cloud (MQTT, HTTP)
- 🔌 สร้าง Web Server เพื่อควบคุมอุปกรณ์
- 📱 ทำ IoT switch ควบคุมผ่านมือถือ
🔌 อุปกรณ์ที่ต้องใช้
1. บอร์ด ESP8266 (เลือก 1 อัน)
บอร์ดยอดนิยม มี USB ในตัว เหมาะสำหรับมือใหม่
ขนาดเล็ก กระทัดรัด ใช้งานง่าย
2. สาย USB Data
ใช้สำหรับเชื่อมต่อ ESP8266 กับคอมพิวเตอร์และอัปโหลดโค้ด
⚠️ สำคัญ: ต้องใช้สาย USB Data (มี 4 สายใน) ไม่ใช่สายชาร์จ (มี 2 สายเท่านั้น)
3. คอมพิวเตอร์หรือแล็ปท็อป
Windows, macOS, หรือ Linux ก็ได้
✅ อุปกรณ์เสริม (แนะนำแต่ไม่บังคับ)
- • Breadboard และ Jumper wire (สำหรับต่อวงจรทดลอง)
- • LED และ Resistor (สำหรับทดสอบ output)
- • DHT11/DHT22 Sensor (สำหรับโปรเจกต์วัดอุณหภูมิ)
- • Relay Module (สำหรับควบคุมไฟ/ปั๊ม)
💻 การติดตั้งซอฟต์แวร์
ขั้นตอนที่ 1: ติดตั้ง Arduino IDE
- ดาวน์โหลด Arduino IDE จาก arduino.cc
- ติดตั้งโปรแกรมตามปกติ
- เปิด Arduino IDE หลังจากติดตั้งเสร็จ
ขั้นตอนที่ 2: เพิ่ม ESP8266 Board Support
ใน Arduino IDE:
- ไปที่
File → Preferences - ในช่อง "Additional Boards Manager URLs"
- เพิ่ม URL นี้:
http://arduino.esp8266.com/stable/package_esp8266com_index.json - กด OK
ติดตั้ง Board:
- ไปที่
Tools → Board → Boards Manager - ค้นหา "esp8266"
- ติดตั้ง "esp8266 by ESP8266 Community"
- รอสักครู่ อาจใช้เวลา 5-10 นาที
ขั้นตอนที่ 3: ติดตั้ง USB Driver (ถ้าจำเป็น)
Windows 10/11: โดยปกติจะติดตั้งอัตโนมัติ ถ้าไม่ได้ให้ดาวน์โหลดจาก Silicon Labs
macOS: ติดตั้ง driver จาก Silicon Labs หรือใช้ Homebrew: brew install --cask silabs-vcp-driver
Linux: โดยปกติไม่ต้องติดตั้ง driver
ขั้นตอนที่ 4: เชื่อมต่อและทดสอบ
- เสียบสาย USB เชื่อมต่อ ESP8266 กับคอมพิวเตอร์
- ใน Arduino IDE:
Tools → Board → NodeMCU 1.0 (ESP-12E Module) - เลือก Port:
Tools → Port → (เลือก port ที่เชื่อมต่อ) - กด Upload หรือ Ctrl+U เพื่อทดสอบ
✅ ถ้าขึ้น "Done uploading" แสดงว่าพร้อมใช้งานแล้ว!
🚀 โปรเจกต์แรก: WiFi Scanner
เราจะสร้างโปรแกรมสแกนหา WiFi Network รอบๆ ที่เห็นผ่าน Serial Monitor นี่เป็นวิธีที่ดีในการทดสอบว่า ESP8266 ทำงานได้ถูกต้อง
โค้ด WiFi Scanner
// โปรแกรม WiFi Scanner สำหรับ ESP8266
// ใช้สแกนหาเครือข่าย WiFi รอบๆ
#include "ESP8266WiFi.h"
void setup() {
// เริ่มต้น Serial Monitor
Serial.begin(115200);
// ตั้งค่า WiFi ให้เป็นโหมด Station
WiFi.mode(WIFI_STA);
// ตัดการเชื่อมต่อ WiFi ที่เคยบันทึกไว้
WiFi.disconnect();
delay(100);
Serial.println("\n\n");
Serial.println("==================================");
Serial.println(" WiFi Scanner สำหรับ ESP8266");
Serial.println("==================================");
Serial.println();
}
void loop() {
Serial.println("กำลังสแกนหาเครือข่าย WiFi...");
// เริ่มสแกนหา WiFi
int n = WiFi.scanNetworks();
Serial.println("สแกนเสร็จสิ้น!");
if (n == 0) {
Serial.println("ไม่พบเครือข่าย WiFi");
} else {
Serial.print("พบ ");
Serial.print(n);
Serial.println(" เครือข่าย:");
Serial.println();
// แสดงรายการ WiFi ที่พบ
for (int i = 0; i < n; ++i) {
// SSID (ชื่อเครือข่าย)
Serial.print(i + 1);
Serial.print(": ");
Serial.print(WiFi.SSID(i));
// RSSI (ความแรงของสัญญาณ)
Serial.print(" (");
Serial.print(WiFi.RSSI(i));
Serial.print("dBm");
// ความแรงสัญญาณเป็นคำอธิบาย
if (WiFi.RSSI(i) > -50) {
Serial.print(" - แรงมาก");
} else if (WiFi.RSSI(i) > -60) {
Serial.print(" - แรง");
} else if (WiFi.RSSI(i) > -70) {
Serial.print(" - ปานกลาง");
} else {
Serial.print(" - อ่อน");
}
// การเข้ารหัส
Serial.print(" - ");
switch (WiFi.encryptionType(i)) {
case ENC_TYPE_WEP:
Serial.print("WEP");
break;
case ENC_TYPE_TKIP:
Serial.print("WPA");
break;
case ENC_TYPE_CCMP:
Serial.print("WPA2");
break;
case ENC_TYPE_NONE:
Serial.print("เปิด");
break;
case ENC_TYPE_AUTO:
Serial.print("WPA/WPA2");
break;
}
Serial.println();
delay(10);
}
}
Serial.println();
Serial.println("==================================");
// รอ 5 วินาที แล้วสแกนใหม่
delay(5000);
}วิธีอัปโหลดและทดสอบ
- คัดลอกโค้ดด้านบนไปวางใน Arduino IDE
- ตรวจสอบว่าเลือก Board และ Port ถูกต้อง
- กดปุ่ม Upload (ลูกศรชี้ขวา)
- รอให้อัปโหลดเสร็จ (จะขึ้น "Done uploading")
- เปิด Serial Monitor: ปุ่ม 🔍 มุมขวาบน
- ตั้งค่า baud rate เป็น 115200
- ดูผลลัพธ์ที่ปรากฏบนหน้าจอ
💡 คำอธิบาย: โปรแกรมนี้ใช้ฟังก์ชัน WiFi.scanNetworks() ในการสแกนหาเครือข่าย WiFi ทั้งหมดที่ส่งสัญญาณอยู่รอบๆ และแสดงชื่อเครือข่าย, ความแรงของสัญญาณ (RSSI), และประเภทการเข้ารหัส
🌐 สร้าง Web Server ควบคุม LED
ต่อไปเราจะสร้าง Web Server บน ESP8266 เพื่อควบคุม LED ผ่านเว็บเบราว์เซอร์ นี่เป็นพื้นฐานสำคัญสำหรับโปรเจกต์ IoT ทุกชนิด
การต่อวงจร
- LED ยาว (Anode +) → เชื่อมต่อกับ GPIO 2 (D4) ผ่านตัวต้านทาน 220Ω
- LED สั้น (Cathode -) → เชื่อมต่อกับ GND
💡 บนบอร์ด NodeMCU จะมี LED ในตัวอยู่แล้วที่ GPIO 2 ดังนั้นคุณสามารถทดสอบได้โดยไม่ต้องต่อ LED เพิ่ม
โค้ด Web Server
// Web Server ควบคุม LED บน ESP8266
// เข้าถึงได้ผ่าน http://ESP8266_IP_ADDRESS
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
// แทนที่ด้วย WiFi ของคุณ
const char* ssid = "YOUR_WIFI_SSID";
const char* password = "YOUR_WIFI_PASSWORD";
// กำหนด GPIO pin สำหรับ LED
const int ledPin = 2; // GPIO 2 = D4 บน NodeMCU
// สร้าง Web Server ที่พอร์ต 80
ESP8266WebServer server(80);
// สถานะ LED (เริ่มต้น = ปิด)
bool ledState = false;
void setup() {
// เริ่มต้น Serial
Serial.begin(115200);
// ตั้งค่า LED pin เป็น output
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, LOW); // เริ่มต้นให้ LED ดับ
ledState = false;
// เชื่อมต่อ WiFi
Serial.println();
Serial.println("==================================");
Serial.println(" Web Server ควบคุม LED");
Serial.println("==================================");
Serial.print("กำลังเชื่อมต่อ WiFi: ");
Serial.println(ssid);
WiFi.begin(ssid, password);
// รอให้เชื่อมต่อสำเร็จ
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println();
Serial.println("✅ เชื่อมต่อ WiFi สำเร็จ!");
Serial.print("📡 IP Address: ");
Serial.println(WiFi.localIP());
Serial.println();
Serial.println("เปิดเว็บเบราว์เซอร์และไปที่: http://" +
WiFi.localIP().toString());
Serial.println("==================================");
Serial.println();
// ตั้งค่า Web Server Routes
// หน้าแรก
server.on("/", handleRoot);
// เปิด LED
server.on("/on", handleLedOn);
// ปิด LED
server.on("/off", handleLedOff);
// สถานะ LED (JSON)
server.on("/status", handleStatus);
// หน้า 404
server.onNotFound(handleNotFound);
// เริ่มต้น Web Server
server.begin();
Serial.println("🌐 Web Server เริ่มทำงานแล้ว!");
}
void loop() {
// รองรับการเชื่อมต่อจาก client
server.handleClient();
}
// ฟังก์ชันหน้าแรก
void handleRoot() {
String html = "<!DOCTYPE html>";
html += "<html>";
html += "<head>";
html += "<meta charset='UTF-8'>";
html += "<meta name='viewport' content='width=device-width, initial-scale=1.0'>";
html += "<title>ESP8266 LED Control</title>";
html += "<style>";
html += "body { font-family: Arial, sans-serif; margin: 20px; background: #f5f5f5; }";
html += ".container { max-width: 400px; margin: 0 auto; background: white; padding: 20px; border-radius: 10px; box-shadow: 0 2px 10px rgba(0,0,0,0.1); }";
html += "h1 { text-align: center; color: #333; }";
html += ".status { text-align: center; font-size: 18px; margin: 20px 0; padding: 10px; background: #e9e9e9; border-radius: 5px; }";
html += ".btn { display: block; width: 100%; padding: 15px; margin: 10px 0; border: none; border-radius: 5px; font-size: 16px; cursor: pointer; transition: 0.3s; }";
html += ".btn-on { background: #4CAF50; color: white; }";
html += ".btn-off { background: #f44336; color: white; }";
html += ".btn:hover { opacity: 0.8; }";
html += "</style>";
html += "</head>";
html += "<body>";
html += "<div class='container'>";
html += "<h1>💡 ควบคุม LED ESP8266</h1>";
html += "<div class='status'>";
html += "<strong>สถานะ LED:</strong> ";
html += ledState ? "เปิดอยู่ (ON)" : "ปิดอยู่ (OFF)";
html += "</div>";
html += "<button class='btn btn-on' onclick='turnOn()'>เปิด LED (ON)</button>";
html += "<button class='btn btn-off' onclick='turnOff()'>ปิด LED (OFF)</button>";
html += "<script>";
html += "function turnOn() { fetch('/on').then(() => location.reload()); }";
html += "function turnOff() { fetch('/off').then(() => location.reload()); }";
html += "</script>";
html += "</div>";
html += "</body>";
html += "</html>";
server.send(200, "text/html", html);
}
// ฟังก์ชันเปิด LED
void handleLedOn() {
digitalWrite(ledPin, LOW); // LED บน NodeMCU ใช้ active LOW
ledState = true;
Serial.println("💡 LED: ON");
server.send(200, "text/plain", "LED ON");
}
// ฟังก์ชันปิด LED
void handleLedOff() {
digitalWrite(ledPin, HIGH); // LED บน NodeMCU ใช้ active LOW
ledState = false;
Serial.println("💡 LED: OFF");
server.send(200, "text/plain", "LED OFF");
}
// ฟังก์ชันสถานะ (JSON)
void handleStatus() {
String json = "{\"led\":";
json += ledState ? "true" : "false";
json += "}";
server.send(200, "application/json", json);
}
// ฟังก์ชัน 404
void handleNotFound() {
server.send(404, "text/plain", "404: Not found");
}วิธีใช้งาน
- แก้ไข
ssidและpasswordในโค้ดให้ตรงกับ WiFi ของคุณ - อัปโหลดโค้ดไปยัง ESP8266
- เปิด Serial Monitor และรอ IP Address
- เปิดเว็บเบราว์เซอร์และไปที่ IP Address ที่ได้
- ลองกดปุ่มเปิด/ปิด LED ดู!
✅ สำเร็จ! ตอนนี้คุณมี Web Server ที่ทำงานบน ESP8266 แล้ว นี่คือพื้นฐานสำหรับโปรเจกต์ IoT ทุกชนิด คุณสามารถพัฒนาต่อเป็นระบบควบคุมไฟ, เซ็นเซอร์, หรืออื่นๆ
🔧 ปัญหาที่พบบ่อยและวิธีแก้ไข
ปัญหา: อัปโหลดโค้ดไม่ได้
อาการ: ขึ้น error หรืออัปโหลดไม่สำเร็จ
วิธีแก้ไข:
- ตรวจสอบว่าเลือก Board และ Port ถูกต้อง
- ลองกดปุ่ม FLASH บนบอร์ด ขณะอัปโหลด (สำหรับ NodeMCU)
- เปลี่ยนสาย USB เป็นสาย Data (ไม่ใช่สายชาร์จ)
- ลองเปลี่ยน Port USB หรือใช้คอมเครื่องอื่น
- ติดตั้ง USB Driver ใหม่
ปัญหา: เชื่อมต่อ WiFi ไม่ได้
อาการ: โปรแกรมค้างที่บรรทัด WiFi.begin()
วิธีแก้ไข:
- ตรวจสอบชื่อและรหัสผ่าน WiFi ให้ถูกต้อง
- ตรวจสอบว่า router รองรับ 2.4GHz (ESP8266 ไม่รองรับ 5GHz)
- ลองเคลื่อนที่ ESP8266 ใกล้ router ขึ้น
- ตรวจสอบว่า WiFi มี MAC filtering หรือไม่
- ลองรีเซ็ต ESP8266 ด้วยการถอดปลั๊กแล้วเสียบใหม่
ปัญหา: Serial Monitor แสดงผลเป็นภาษาต่างดาว
อาการ: ตัวอักษรไม่ชัดเจน
วิธีแก้ไข:
- ตรวจสอบ baud rate ที่ Serial Monitor (มักจะเป็น 115200)
- ตรวจสอบในโค้ดว่าใช้ baud rate เท่ากับที่ตั้งไว้ใน Serial.begin()
ปัญหา: ESP8266 รีเซ็ตเอง (Reset loop)
อาการ: บอร์ดรีเซ็ตซ้ำๆ
วิธีแก้ไข:
- ใช้ไฟเลี้ยงที่เสถียร (2A ขึ้นไป)
- ตรวจสอบว่าไม่มี short circuit บนบอร์ด
- ลดจำนวนอุปกรณ์ที่เชื่อมต่อกับ ESP8266
- ตรวจสอบว่าไม่ได้ใช้ pin ที่มีข้อจำกัดพิเศษ
🎯 ขั้นตอนถัดไป
ยินดีด้วย! ตอนนี้คุณรู้พื้นฐานการใช้งาน ESP8266 แล้ว ต่อไปคุณสามารถ: