📑 เนื้อหาในบทความ
1. ภาพรวม ESP32-C6
ESP32-C6 คือไมโครคอนโทรลเลอร์รุ่นล่าสุดจาก Espressif ที่มาพร้อมกับการรองรับ WiFi 6 (802.11ax) และเทคโนโลยีไร้สายหลากหลายรูปแบบ รวมถึง Bluetooth 5.3, Zigbee, Thread และ Matter ทำให้เป็นตัวเลือกที่สมบูรณ์แบบสำหรับโปรเจกต์ IoT และ Smart Home ในยุคปัจจุบัน
💡 ทำไมต้อง ESP32-C6?
- • รองรับ WiFi 6 ที่เร็วกว่าและเสถียรกว่ารุ่นก่อน
- • ประหยัดพลังงานด้วยเทคโนโลยี RISC-V ที่ทันสมัย
- • รองรับ Matter สำหรับ Smart Home ที่เชื่อมต่อกับทุกแพลตฟอร์ม
- • ราคาถูกและหาซื้อง่ายในตลาด
คุณสมบัติหลัก
- ✅ Processor: RISC-V 32-bit แบบ single-core ที่ 160 MHz
- ✅ Memory: 512 KB SRAM, 320 KB ROM
- ✅ Wireless: WiFi 6 (2.4 GHz), BLE 5.3, Zigbee, Thread
- ✅ Interfaces: GPIO, SPI, I2C, UART, I2S, LED PWM
- ✅ Security: รองรับการเข้ารหัสลับระดับสูง
- ✅ Power: โหมดประหยัดแบตเตอรี่หลากหลาย
2. สเปคทางเทคนิค (Technical Specifications)
| รายการ | สเปค |
|---|---|
| CPU Core | RISC-V 32-bit @ 160 MHz |
| SRAM | 512 KB |
| Flash | ภายนอก (สูงสุด 16 MB) |
| WiFi | 802.11ax (WiFi 6) 2.4 GHz |
| Bluetooth | BLE 5.3 |
| IEEE 802.15.4 | Zigbee, Thread |
| GPIO | 22 ขา (GPIO 0-21) |
| Operating Voltage | 3.0V - 3.6V |
| Operating Temp | -40°C ถึง +85°C |
⚠️ หมายเหตุ: ESP32-C6 ใช้ CPU แบบ RISC-V ไม่ใช่ Xtensa (LX6/LX7) เหมือน ESP32 รุ่นก่อนหน้า ซึ่งอาจต้องใช้ไลบรารีที่ปรับแต่งบางตัว
3. บอร์ด ESP32-C6 ที่แนะนำ (Recommended Boards)
มีบอร์ด ESP32-C6 หลายรุ่นให้เลือก ขึ้นอยู่กับความต้องการและงบประมาณของคุณ:
ESP32-C6-DevKitC-1
บอร์ดพัฒนาหลักจาก Espressif
- • USB-C integrated
- • 30 GPIO ผ่าน header
- • 适合大多数项目
XIAO ESP32-C6
บอร์ดขนาดเล็กจาก Seeed Studio
- • ขนาดเล็กมาก (20x17.5mm)
- • Type-C USB
- • 适合小型项目
ESP32-C6-N8
รุ่นพื้นฐาน 8MB Flash
- • 8 MB Flash
- • ราคาประหยัด
- • 适合学习
Adafruit Feather ESP32-C6
บอร์ดจาก Adafruit
- • Feather form factor
- • รองรับชาร์จแบต
- • 适合便携项目
4. การติดตั้งและเตรียมการ (Installation & Setup)
4.1 ติดตั้ง Arduino IDE
// ขั้นตอนที่ 1: ติดตั้ง Arduino IDE
// ดาวน์โหลดจาก: https://www.arduino.cc/en/software
// ขั้นตอนที่ 2: เพิ่ม ESP32 Board Support
// เปิด Arduino IDE → File → Preferences
// ในช่อง "Additional Board Manager URLs" เพิ่ม:
// https://espressif.github.io/arduino-esp32/package_esp32_index.json
// ขั้นตอนที่ 3: ติดตั้ง Board ESP32-C6
// Tools → Board → Boards Manager
// ค้นหา "esp32" และติดตั้ง
// จากนั้นเลือก: Tools → Board → esp32 → ESP32C6 Dev Module4.2 การเชื่อมต่อบอร์ด
🔌 ขั้นตอนการเชื่อมต่อ:
- เสียบ USB-C เข้ากับบอร์ด ESP32-C6
- เสียบอีกด้านเข้ากับพอร์ต USB ของคอมพิวเตอร์
- รอสักครู่ให้ Driver ติดตั้งอัตโนมัติ (Windows/Mac)
- เปิด Arduino IDE และเลือกพอร์ต: Tools → Port → (เลือกพอร์ตที่เจอ)
4.3 ทดสอบการทำงาน
// โค้ดทดสอบแรก: Blink LED บนบอร์ด ESP32-C6
// ขา LED บนบอร์ด ESP32-C6 ส่วนใหญ่อยู่ที่ GPIO 8
const int ledPin = 8; // LED บนบอร์ด
// ฟังก์ชันตั้งค่าเริ่มต้น
void setup() {
pinMode(ledPin, OUTPUT); // ตั้งค่า LED pin เป็น output
Serial.begin(115200); // เปิด Serial Monitor สำหรับ debugging
Serial.println("ESP32-C6 Blink Test Started!");
}
// ฟังก์ชันวนลูปหลัก
void loop() {
digitalWrite(ledPin, HIGH); // เปิด LED
Serial.println("LED ON");
delay(1000); // รอ 1 วินาที
digitalWrite(ledPin, LOW); // ปิด LED
Serial.println("LED OFF");
delay(1000); // รอ 1 วินาที
}หลังจากอัปโหลดโค้ด ให้เปิด Serial Monitor (Tools → Serial Monitor) ตั้งค่า baud rate เป็น 115200 คุณจะเห็นข้อความ "ESP32-C6 Blink Test Started!" และ LED บนบอร์ดกระพริบ
5. WiFi6 Basics - เริ่มต้นใช้งาน WiFi
WiFi 6 (802.11ax) คือมาตรฐาน WiFi รุ่นล่าสุดที่มีประสิทธิภาพดีกว่ารุ่นก่อนหน้าในหลายด้าน:
- 🚀 OFDMA: ส่งข้อมูลได้พร้อมกันหลายอุปกรณ์
- ⚡ TWT (Target Wake Time): ประหยัดพลังงานดีขึ้น
- 📶 BSS Coloring: ลดการรบกวนสัญญาณ
- 🔒 Enhanced Security: ความปลอดภัยที่ดีขึ้น
ตัวอย่างโค้ด: เชื่อมต่อ WiFi
// ตัวอย่างการเชื่อมต่อ ESP32-C6 กับ WiFi
#include <WiFi.h>
// แก้ไข WiFi credentials ของคุณที่นี่
const char* ssid = "YOUR_WIFI_SSID"; // ชื่อ WiFi
const char* password = "YOUR_WIFI_PASSWORD"; // รหัสผ่าน WiFi
// ฟังก์ชันตั้งค่าเริ่มต้น
void setup() {
Serial.begin(115200);
delay(1000);
Serial.println();
Serial.println("=================================");
Serial.println("ESP32-C6 WiFi Connection Example");
Serial.println("=================================");
Serial.print("Connecting to ");
Serial.println(ssid);
// เริ่มการเชื่อมต่อ WiFi
WiFi.begin(ssid, password);
// รอให้เชื่อมต่อสำเร็จ
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
// แสดงผลเมื่อเชื่อมต่อสำเร็จ
Serial.println();
Serial.println("✅ WiFi Connected!");
Serial.print("📶 IP Address: ");
Serial.println(WiFi.localIP());
Serial.print("📡 Signal Strength (RSSI): ");
Serial.print(WiFi.RSSI());
Serial.println(" dBm");
Serial.print("🌐 Gateway: ");
Serial.println(WiFi.gatewayIP());
Serial.print("🔍 DNS: ");
Serial.println(WiFi.dnsIP());
}
void loop() {
// ตรวจสอบสถานะ WiFi ทุก 10 วินาที
static unsigned long lastCheck = 0;
if (millis() - lastCheck > 10000) {
if (WiFi.status() == WL_CONNECTED) {
Serial.println("✅ WiFi Still Connected");
} else {
Serial.println("❌ WiFi Disconnected! Reconnecting...");
WiFi.reconnect();
}
lastCheck = millis();
}
delay(100);
}💡 ข้อควรระวัง:
- • อย่าลืมแก้ไข ssid และ password ให้ตรงกับ WiFi ของคุณ
- • ESP32-C6 รองรับเฉพาะ 2.4 GHz WiFi เท่านั้น (ไม่รองรับ 5 GHz)
- • หากเชื่อมต่อไม่ได้ ให้ตรวจสอบว่า Router รองรับ 2.4 GHz
6. Thread และ Matter - Smart Home ยุคใหม่
ESP32-C6 มาพร้อมกับการรองรับ Thread และ Matter ซึ่งเป็นเทคโนโลยีที่จะเปลี่ยนแปลง Smart Home อย่างสิ้นเชิง
🧵 Thread Protocol
- • เครือข่าย mesh ไร้สายที่เสถียร
- • ประหยัดพลังงานด้วย Low Power
- • รองรับอุปกรณ์ได้หลายร้อยเครื่อง
- • ทำงานได้แม้ไม่มี Internet
🏠 Matter Standard
- • เชื่อมต่อกับทุกแพลตฟอร์ม Smart Home
- • ง่ายต่อการตั้งค่าและใช้งาน
- • รองรับ Google, Apple, Amazon
- • เปิดกว้างและปลอดภัย
ℹ️ หมายเหตุ: การพัฒนา Thread และ Matter ต้องใช้ ESP-IDF SDK และไม่สามารถใช้ Arduino IDE ได้โดยตรง บทความนี้เน้นการเริ่มต้นด้วย Arduino IDE ก่อน
7. โปรเจกต์ที่ 1: WiFi Scanner 📡
โปรเจกต์แรกของเราคือการสร้าง WiFi Scanner เพื่อค้นหาเครือข่าย WiFi ที่อยู่รอบๆ และแสดงความแรงสัญญาณ
// โปรเจกต์ WiFi Scanner สำหรับ ESP32-C6
// ใช้สำหรับค้นหาและแสดงเครือข่าย WiFi ที่อยู่รอบๆ
#include "WiFi.h"
// ฟังก์ชันตั้งค่าเริ่มต้น
void setup() {
Serial.begin(115200);
// ตั้งค่า WiFi ให้อยู่โหมด Station
WiFi.mode(WIFI_STA);
// ตัดการเชื่อมต่อ WiFi ที่อาจจะเชื่อมต่ออยู่
WiFi.disconnect();
delay(100);
Serial.println();
Serial.println("======================================");
Serial.println("ESP32-C6 WiFi Scanner");
Serial.println("======================================");
Serial.println("Scanning for networks...");
}
void loop() {
Serial.println("Scan start...");
// เริ่มสแกนหาเครือข่าย WiFi
// WiFi.scanNetworks จะคืนค่าจำนวนเครือข่ายที่พบ
int n = WiFi.scanNetworks();
Serial.println("Scan complete");
if (n == 0) {
// ไม่พบเครือข่าย
Serial.println("❌ No networks found");
} else {
// พบเครือข่าย
Serial.print(n);
Serial.println(" networks found");
// แสดงรายละเอียดของแต่ละเครือข่าย
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");
// แสดงประเภทการเข้ารหัส
Serial.print(" - ");
Serial.print(getEncryptionType(WiFi.encryptionType(i)));
// แสดงคุณภาพสัญญาณเป็นเปอร์เซ็นต์
int quality = getSignalQuality(WiFi.RSSI(i));
Serial.print(" - Quality: ");
Serial.print(quality);
Serial.println("%)");
// รอสักครู่ก่อนแสดงเครือข่ายถัดไป
delay(10);
}
}
// รอ 5 วินาทีก่อนสแกนใหม่
Serial.println();
Serial.println("======================================");
Serial.println("Waiting 5 seconds before next scan...");
Serial.println();
delay(5000);
}
// ฟังก์ชันแปลงประเภทการเข้ารหัสเป็น text
String getEncryptionType(wifi_auth_mode_t encryptionType) {
switch (encryptionType) {
case WIFI_AUTH_OPEN:
return "Open";
case WIFI_AUTH_WEP:
return "WEP";
case WIFI_AUTH_WPA_PSK:
return "WPA";
case WIFI_AUTH_WPA2_PSK:
return "WPA2";
case WIFI_AUTH_WPA_WPA2_PSK:
return "WPA+WPA2";
case WIFI_AUTH_WPA2_ENTERPRISE:
return "WPA2-EAP";
case WIFI_AUTH_WPA3_PSK:
return "WPA3";
case WIFI_AUTH_WPA2_WPA3_PSK:
return "WPA2+WPA3";
default:
return "Unknown";
}
}
// ฟังก์ชันคำนวณคุณภาพสัญญาณเป็นเปอร์เซ็นต์
int getSignalQuality(int rssi) {
// RSSI ปกติอยู่ระหว่าง -30 (ดีมาก) ถึง -90 (แย่)
// แปลงเป็น scale 0-100%
int quality = 0;
if (rssi <= -100) {
quality = 0;
} else if (rssi >= -50) {
quality = 100;
} else {
quality = 2 * (rssi + 100);
}
return quality;
}🎯 สิ่งที่จะได้เรียนรู้:
- • การใช้ WiFi.scanNetworks() ในการค้นหาเครือข่าย
- • การอ่านค่า RSSI และการแปลงเป็นคุณภาพสัญญาณ
- • การระบุประเภทการเข้ารหัสของแต่ละเครือข่าย
- • การใช้ Serial Monitor ในการ debug
8. โปรเจกต์ที่ 2: Web Server LED Control 💡
โปรเจกต์นี้สร้าง Web Server บน ESP32-C6 เพื่อควบคุม LED ผ่านเว็บเบราว์เซอร์
// โปรเจกต์ Web Server ควบคุม LED ผ่านเว็บ
// ESP32-C6 Web Server LED Control
#include <WiFi.h>
#include <WebServer.h>
// WiFi Credentials
const char* ssid = "YOUR_WIFI_SSID";
const char* password = "YOUR_WIFI_PASSWORD";
// ขา LED
const int ledPin = 8;
// สร้าง Web Server ที่ port 80
WebServer server(80);
// สถานะ LED
bool ledState = false;
// HTML สำหรับหน้าเว็บ
String getHTML() {
String html = "<!DOCTYPE html>";
html += "<html>";
html += "<head>";
html += "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">";
html += "<title>ESP32-C6 LED Control</title>";
html += "<style>";
html += "body { font-family: Arial; margin: 40px; text-align: center; }";
html += "h1 { color: #333; }";
html += ".btn { padding: 15px 30px; font-size: 20px; margin: 10px; cursor: pointer; border: none; border-radius: 5px; }";
html += ".on { background-color: #4CAF50; color: white; }";
html += ".off { background-color: #f44336; color: white; }";
html += ".status { font-size: 24px; margin: 20px; }";
html += "</style>";
html += "</head>";
html += "<body>";
html += "<h1>ESP32-C6 LED Control</h1>";
html += "<div class=\"status\">";
html += "LED Status: ";
html += (ledState ? "<strong>ON</strong>" : "<strong>OFF</strong>");
html += "</div>";
html += "<button class=\"btn on\" onclick=\"location.href='/ledon'\">Turn ON</button>";
html += "<button class=\"btn off\" onclick=\"location.href='/ledoff'\">Turn OFF</button>";
html += "</body>";
html += "</html>";
return html;
}
// ฟังก์ชันตั้งค่าเริ่มต้น
void setup() {
Serial.begin(115200);
// ตั้งค่า LED pin
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, LOW);
// เชื่อมต่อ WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println();
Serial.println("✅ WiFi Connected!");
Serial.print("📶 IP Address: ");
Serial.println(WiFi.localIP());
// ตั้งค่า routes สำหรับ Web Server
server.on("/", []() {
server.send(200, "text/html", getHTML());
});
server.on("/ledon", []() {
digitalWrite(ledPin, HIGH);
ledState = true;
Serial.println("🟢 LED turned ON");
server.send(200, "text/html", getHTML());
});
server.on("/ledoff", []() {
digitalWrite(ledPin, LOW);
ledState = false;
Serial.println("🔴 LED turned OFF");
server.send(200, "text/html", getHTML());
});
// เริ่ม Web Server
server.begin();
Serial.println("🌐 Web Server started!");
Serial.print("👉 Open http://");
Serial.print(WiFi.localIP());
Serial.println(" in your browser");
}
void loop() {
// รองรับ requests จาก client
server.handleClient();
}📱 วิธีใช้งาน:
- อัปโหลดโค้ดไปยัง ESP32-C6
- เปิด Serial Monitor เพื่อดู IP Address
- เปิดเว็บเบราว์เซอร์และเข้าไปที่ IP นั้น (เช่น http://192.168.1.100)
- คลิกปุ่ม "Turn ON" หรือ "Turn OFF" เพื่อควบคุม LED
9. การแก้ปัญหาที่พบบ่อย (Troubleshooting)
❌ ปัญหา: อัปโหลดโค้ดไม่ได้
สาเหตุ: Driver ไม่ถูกต้อง หรือเลือกบอร์ดผิด
วิธีแก้: ตรวจสอบให้แน่ใจว่าเลือก Tools → Board → ESP32C6 Dev Module และพอร์ตถูกต้อง
❌ ปัญหา: เชื่อมต่อ WiFi ไม่ได้
สาเหตุ: รหัสผ่านผิด หรือ Router ไม่รองรับ 2.4 GHz
วิธีแก้: ตรวจสอบรหัสผ่าน และแน่ใจว่า Router รองรับ 2.4 GHz WiFi
❌ ปัญหา: Serial Monitor แสดงผลเป็นภาษาขยะ
สาเหตุ: Baud rate ไม่ตรงกัน
วิธีแก้: ตั้งค่า Baud rate ใน Serial Monitor เป็น 115200
❌ ปัญหา: Web Server เข้าไม่ได้
สาเหตุ: อุปกรณ์อยู่คนละเครือข่าย หรือ Firewall บล็อก
วิธีแก้: ให้มือถือ/คอมพิวเตอร์อยู่ในเครือข่าย WiFi เดียวกับ ESP32-C6
10. ถัดไป... (Next Steps)
ยินดีด้วย! คุณได้เริ่มต้นใช้งาน ESP32-C6 เรียบร้อยแล้ว ต่อไปนี้คือสิ่งที่คุณสามารถเรียนรู้เพิ่มเติม:
📚 บทความที่เกี่ยวข้อง
🚀 โปรเจกต์ที่ท้าทาย
- • สร้าง Smart Switch ควบคุมไฟผ่านมือถือ
- • ทำ Weather Station ส่งข้อมูลผ่าน MQTT
- • สร้าง Thread Border Router ด้วย ESP32-C6
- • ทำ IoT Sensor Node ประหยัดแบต
🎓 แหล่งเรียนรู้เพิ่มเติม
- • Espressif Documentation: ESP32-C6 Official Docs
- • Arduino ESP32: GitHub Repository
- • Thread Group: Thread Official Website
- • Matter Standard: CSA Matter Page
💡 สรุปสิ่งที่เรียนรู้
- ✅ รู้จัก ESP32-C6 และคุณสมบัติของมัน
- ✅ ติดตั้งและตั้งค่า Arduino IDE สำหรับ ESP32-C6
- ✅ เขียนโค้ดควบคุม LED พื้นฐาน
- ✅ เชื่อมต่อ ESP32-C6 กับ WiFi
- ✅ สร้าง WiFi Scanner เพื่อค้นหาเครือข่าย
- ✅ สร้าง Web Server ควบคุม LED ผ่านเว็บ
- ✅ แก้ปัญหาที่พบบ่อยในการใช้งาน
- ✅ เข้าใจเทคโนโลยี Thread และ Matter