เนื้อหาในบทความ
ภาพรวม ESP32 Cheap Yellow Display (CYD)
🖥️ ESP32 ที่มาพร้อมจอสัมผัส
ESP32 Cheap Yellow Display หรือที่เรียกสั้นๆ ว่า CYD เป็นบอร์ดพัฒนา ESP32 ที่รวมทุกอย่างไว้ในบอร์ดเดียว โดยมีจุดเด่นที่สุดคือ จอสัมผัส 2.4 นิ้วแบบ resistive พร้อมใช้งานทันที
ชื่ออย่างเป็นทางการคือ ESP32-2432S028R ซึ่งมาจาก:
- 24 = ขนาดจอ 2.4 นิ้ว
- 32 = ความละเอียด 320 x 240 พิกเซล (QVGA)
- S = จอประเภท ST7789
- 028 = จอสัมผัสแบบ resistive
- R = มีระบบจัดการพลังงาน (Reset/Power control)
ทำไมต้อง ESP32 CYD?
ราคาประหยัด
ราคาประมาณ 300-500 บาท ถูกกว่าซื้อ ESP32 และจอสัมผัสแยกกัน
พร้อมใช้งาน
ไม่ต้องบัดกรี ไม่ต้องต่อสาย รับประกันว่าทุกอย่างเชื่อมต่อกันถูกต้อง
สร้าง GUI ได้ง่าย
เหมาะสำหรับสร้างหน้าจอ UI สำหรับโปรเจกต์ IoT และ Automation
ขนาดกระทัดรัด
ออกแบบเป็นบอร์ดเดียว เหมาะกับโปรเจกต์ที่ต้องการความกะทัดรัด
สเปคทางเทคนิค
สเปคหลัก
| ส่วนประกอบ | รายละเอียด |
|---|---|
| ไมโครคอนโทรลเลอร์ | ESP32-WROOM-32 (Dual-core Xtensa LX6, 240 MHz) |
| หน่วยความจำ | Flash: 4 MB, PSRAM: 520 KB |
| หน้าจอแสดงผล | 2.4 นิ้ว, 320 x 240 พิกเซล (QVGA) |
| ไดร์เวอร์จอภาพ | ST7789 (SPI interface) |
| จอสัมผัส | Resistive touch (XPT2046 controller) |
| การเชื่อมต่อไร้สาย | WiFi 802.11 b/g/n, Bluetooth 4.2 BLE |
| GPIO ที่ใช้งานได้ | ~15 pins (รวม UART, I2C, SPI, PWM) |
| อุปกรณ์เสริมบนบอร์ด | SD card slot, Buzzer, LED indicator, 3x Buttons |
| แหล่งจ่ายไฟ | USB Type-C (5V) หรือ แบตเตอรี่ 3.7V-4.2V |
ขา GPIO หลักที่ใช้งานได้
// GPIO หลักที่ใช้สำหรับจอภาพและสัมผัส
#define TFT_MISO 19
#define TFT_MOSI 23
#define TFT_SCLK 18
#define TFT_CS 5
#define TFT_DC 27
#define TFT_RST -1 // ไม่มีขา RST แยก (ใช้ EN แทน)
#define TOUCH_CS -1 // ใช้ SPI เดียวกับจอภาพ
#define TOUCH_IRQ 16 // Touch interrupt
// GPIO ที่ใช้งานได้อื่นๆ
#define BUZZER 15
#define LED_BUILTIN 2 // ไฟ LED บนบอร์ด
#define BUTTON_1 0
#define BUTTON_2 35
#define BUTTON_3 14จุดเด่นและข้อจำกัด
✅ จุดเด่น
- ราคาถูกมาก: เมื่อเทียบกับการซื้อ ESP32 แยก + จอ TFT แยก + จอสัมผัสแยก
- พร้อมใช้งาน: ไม่ต้องบัดกรี ไม่ต้องต่อสาย เหมาะสำหรับผู้เริ่มต้น
- ชุมชนขนาดใหญ่: มี Library และตัวอย่างโค้ดมากมายบน GitHub
- ขนาดกระทัดรัด: เหมาะสำหรับโปรเจกต์ที่ต้องการติดตั้งในพื้นที่จำกัด
- มี SD Card Slot: เก็บข้อมูลหรือโหลดรูปภาพได้
- รองรับ LVGL: สร้าง GUI สวยๆ ได้ง่ายด้วย Library ยอดนิยม
⚠️ ข้อจำกัด
- จอสัมผัสแบบ Resistive: ไม่รองรับ Multi-touch และต้องกดแรงพอสมควร
- ขา GPIO จำกัด: หลายขาถูกใช้สำหรับจอภาพแล้ว เหลือ GPIO ใช้งานน้อย
- ไม่มี Battery Charging Circuit: ถ้าใช้แบตเตอรี่ต้องหาวงจรชาร์จเอง
- ความละเอียดจอต่ำ: 320x240 อาจน้อยเกินไปสำหรับ GUI ซับซ้อน
- ไม่รองรับ Capacitive Touch: ไม่สามารถใช้นิ้วเบาๆ เหมือนมือถือได้
สิ่งที่ต้องเตรียม
อุปกรณ์ Hardware
- ✓ESP32 Cheap Yellow Display (CYD) - ราคา ~300-500 บาท
- ✓สาย USB Type-C - สำหรับจ่ายไฟและอัปโหลดโค้ด
- ○SD Card (MicroSD) 8GB+ - ถ้าต้องการบันทึกข้อมูล
- ○แบตเตอรี่ Li-Ion 3.7V - ถ้าต้องการพกพา
ซอฟต์แวร์ที่ต้องใช้
- ✓Arduino IDE 2.x หรือPlatformIO
แนะนำให้ใช้ Arduino IDE สำหรับผู้เริ่มต้น
- ✓USB Driver (CH340/CH341) - สำหรับ Windows 7/8/10
- ○TFT_eSPI Library - สำหรับควบคุมจอภาพ
- ○LVGL Library - ถ้าต้องการสร้าง GUI สวยๆ (ไม่บังคับ)
การติดตั้งและเริ่มต้น
ขั้นตอนที่ 1: ติดตั้ง Arduino IDE
ดาวน์โหลดและติดตั้ง Arduino IDE เวอร์ชันล่าสุดจาก arduino.cc
ขั้นตอนที่ 2: เพิ่ม Board Support สำหรับ ESP32
- เปิด Arduino IDE และไปที่ File → Preferences
- ในช่อง "Additional Board Manager URLs" เพิ่ม:
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json - ไปที่ Tools → Board → Boards Manager
- ค้นหา "esp32" และติดตั้ง "esp32 by Espressif Systems"
ขั้นตอนที่ 3: ติดตั้งไลบรารี TFT_eSPI
- ไปที่ Sketch → Include Library → Manage Libraries
- ค้นหา "TFT_eSPI"
- ติดตั้งไลบรารี "TFT_eSPI" โดย Bodmer
- สำคัญ: หลังติดตั้ง ต้องแก้ไข User Setup ดูขั้นตอนถัดไป
ขั้นตอนที่ 4: แก้ไขการตั้งค่า TFT_eSPI
⚠️ ขั้นตอนสำคัญ: ต้องแก้ไขไฟล์การตั้งค่า TFT_eSPI ให้ตรงกับ ESP32 CYD
เปิดไฟล์การตั้งค่า:
- Windows: Documents/Arduino/libraries/TFT_eSPI/User_Setup_Select.h
- Mac: ~/Documents/Arduino/libraries/TFT_eSPI/User_Setup_Select.h
- Linux: ~/Arduino/libraries/TFT_eSPI/User_Setup_Select.h
แก้ไขบรรทัดนี้ (เอาเครื่องหมาย // ออก):
// ใน User_Setup_Select.h
#include <User_Setups/Setup25_TTGO_T_Display.h>หรือสร้างไฟล์ User_Setup.h ขึ้นมาเอง:
// ใน User_Setup.h
// ตั้งค่าให้ใช้กับ ESP32 CYD
#define ST7789_DRIVER
#define TFT_WIDTH 240
#define TFT_HEIGHT 320
#define TFT_MISO 19
#define TFT_MOSI 23
#define TFT_SCLK 18
#define TFT_CS 5
#define TFT_DC 27
#define TFT_RST -1
#define LOAD_GLCD // Font 1
#define LOAD_FONT2 // Font 2
#define LOAD_FONT4 // Font 4
#define LOAD_FONT6 // Font 6
#define LOAD_FONT7 // Font 7
#define LOAD_FONT8 // Font 8
#define LOAD_GFXFF // FreeFonts
#define SMOOTH_FONTขั้นตอนที่ 5: เลือก Board และอัปโหลด
- เชื่อมต่อ ESP32 CYD เข้ากับคอมพิวเตอร์ด้วยสาย USB-C
- ใน Arduino IDE: Tools → Board → esp32 → ESP32 Dev Module
- เลือก Tools → Port (เลือกพอร์ตที่เชื่อมต่อ)
- ตั้งค่าอื่นๆ:
- Upload Speed: 921600
- CPU Frequency: 240MHz (WiFi/BT)
- Flash Frequency: 80MHz
- Flash Mode: QIO
- Partition Scheme: Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS)
- กดปุ่ม Upload (→) หรือ Ctrl+U
ไลบรารีที่แนะนำ
นอกจาก TFT_eSPI แล้ว ยังมีไลบรารีอื่นๆ ที่เป็นประโยชน์สำหรับ ESP32 CYD:
📺 TFT_eSPI (ขอบเขตจำเป็น)
ไลบรารีหลักสำหรับควบคุมจอภาพ TFT และ Touch
🎨 LVGL (Light and Versatile Graphics Library)
สร้าง GUI สวยๆ แบบ Professional รองรับ Animation และ Widgets
📂 LittleFS / SPIFFS
ระบบไฟล์สำหรับเก็บข้อมูล รูปภาพ และการตั้งค่า
🌐 WiFiManager
สร้างหน้าจอเชื่อมต่อ WiFi ผ่าน Captive Portal ง่ายๆ
โปรเจกต์แรก: Hello World
มาเริ่มต้นด้วยโค้ดง่ายๆ ที่แสดงข้อความบนจอ ESP32 CYD กัน:
#include <TFT_eSPI.h>
#include <SPI.h>
// สร้าง object สำหรับจอภาพ
TFT_eSPI tft = TFT_eSPI();
void setup() {
// เริ่มต้น Serial Monitor (สำหรับ Debug)
Serial.begin(115200);
Serial.println("ESP32 CYD - Hello World");
// เริ่มต้นจอภาพ
tft.init();
tft.setRotation(1); // หมุนจอ 90 องศา (แนวนอน)
tft.fillScreen(TFT_BLACK); // เคลียร์หน้าจอสีดำ
// แสดงข้อความ Hello World
tft.setTextColor(TFT_WHITE, TFT_BLACK); // ตัวอักษรสีขาว พื้นหลังสีดำ
tft.setTextSize(2); // ขนาดตัวอักษร
// แสดงข้อความที่ตำแหน่งกลางจอ
tft.drawString("Hello World!", 60, 100);
tft.setTextSize(1);
tft.drawString("ESP32 Cheap Yellow Display", 50, 130);
tft.drawString("CynoIoT Platform", 80, 150);
// วาดกรอบสี่เหลี่ยม
tft.drawRect(10, 10, 220, 300, TFT_BLUE);
tft.drawRect(12, 12, 216, 296, TFT_GREEN);
Serial.println("Display initialized!");
}
void loop() {
// วนลูปเพื่อกระพริบไฟ LED บนบอร์ด
digitalWrite(LED_BUILTIN, HIGH);
delay(1000);
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
}คำอธิบายโค้ด
- TFT_eSPI tft: สร้าง object สำหรับควบคุมจอภาพ
- tft.init(): เริ่มต้นการทำงานของจอภาพ
- tft.setRotation(1): หมุนจอ 90 องศา (0=ปกติ, 1=90°, 2=180°, 3=270°)
- tft.fillScreen(TFT_BLACK): เติมสีพื้นหลังทั้งหมด
- tft.drawString("text", x, y): แสดงข้อความที่ตำแหน่ง x, y
- tft.drawRect(x, y, w, h, color): วาดกรอบสี่เหลี่ยม
ทดสอบการใช้งานจอสัมผัส
#include <TFT_eSPI.h>
#include <SPI.h>
TFT_eSPI tft = TFT_eSPI();
void setup() {
Serial.begin(115200);
tft.init();
tft.setRotation(1);
tft.fillScreen(TFT_BLACK);
// แสดงข้อความให้ผู้ใช้กดจอสัมผัส
tft.setTextColor(TFT_WHITE, TFT_BLACK);
tft.setTextSize(2);
tft.drawString("Touch Test", 70, 100);
tft.setTextSize(1);
tft.drawString("Touch anywhere!", 65, 130);
Serial.println("Touch the screen...");
}
void loop() {
// ตรวจสอบว่ามีการกดจอสัมผัสหรือไม่
uint16_t x, y;
if (tft.getTouch(&x, &y)) {
// แปลงค่าพิกัดจากจอแนวตั้งเป็นแนวนอน
// เนื่องจากเราใช้.setRotation(1)
uint16_t temp = x;
x = y;
y = 240 - temp;
Serial.print("Touch at: ");
Serial.print(x);
Serial.print(", ");
Serial.println(y);
// แสดงพิกัดที่กดบนจอ
tft.fillScreen(TFT_BLACK);
tft.setTextColor(TFT_GREEN, TFT_BLACK);
tft.setTextSize(2);
tft.drawString("X: " + String(x), 30, 100);
tft.drawString("Y: " + String(y), 30, 130);
// วาดวงกลมที่ตำแหน่งที่กด
tft.fillCircle(x, y, 10, TFT_RED);
delay(500); // รอเล็กน้อยเพื่อป้องกันการตรวจสอบซ้ำ
}
}เชื่อมต่อกับ CynoIoT Platform
ESP32 CYD สามารถเชื่อมต่อกับ CynoIoT Platform เพื่อสร้าง Dashboard IoT ได้ง่ายๆ:
🌟 ขั้นตอนการเชื่อมต่อ
- สมัครบัญชี CynoIoT: ไปที่ cynoiot.com และสมัครใช้งานฟรี
- สร้าง Device: ใน Dashboard สร้าง Device ใหม่ และจด Device ID และ API Key
- ติดตั้งไลบรารี CynoIoT: ดาวน์โหลดจาก GitHub หรือใช้ Library Manager
- เขียนโค้ด: ใช้ไลบรารี CynoIoT เพื่อส่งข้อมูลจากเซ็นเซอร์ไปยัง Platform
- สร้าง Dashboard: ใน CynoIoT Platform สร้างหน้าจอแสดงผลข้อมูลแบบ Real-time
ตัวอย่างโค้ดเชื่อมต่อ CynoIoT
#include <TFT_eSPI.h>
#include <WiFi.h>
// #include <CynoIoT.h> // ติดตั้งไลบรารี CynoIoT ก่อน
TFT_eSPI tft = TFT_eSPI();
// ตั้งค่า WiFi
const char* ssid = "YOUR_WIFI_SSID";
const char* password = "YOUR_WIFI_PASSWORD";
// ตั้งค่า CynoIoT
const char* deviceId = "YOUR_DEVICE_ID";
const char* apiKey = "YOUR_API_KEY";
// CynoIoT cynoiot(deviceId, apiKey);
void setup() {
Serial.begin(115200);
tft.init();
tft.setRotation(1);
tft.fillScreen(TFT_BLACK);
// แสดงข้อความเชื่อมต่อ WiFi
tft.setTextColor(TFT_WHITE, TFT_BLACK);
tft.setTextSize(2);
tft.drawString("Connecting...", 50, 100);
// เชื่อมต่อ WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi connected!");
tft.fillScreen(TFT_BLACK);
tft.setTextColor(TFT_GREEN, TFT_BLACK);
tft.drawString("WiFi Connected!", 40, 100);
// เชื่อมต่อ CynoIoT
// cynoiot.connect();
// tft.drawString("CynoIoT Ready!", 50, 130);
delay(2000);
}
void loop() {
// อ่านค่าเซ็นเซอร์ (ตัวอย่าง: จำลองค่าอุณหภูมิ)
float temperature = random(200, 300) / 10.0;
float humidity = random(400, 800) / 10.0;
// แสดงผลบนจอ
tft.fillScreen(TFT_BLACK);
tft.setTextColor(TFT_WHITE, TFT_BLACK);
tft.setTextSize(2);
tft.drawString("Temperature:", 30, 60);
tft.drawString(String(temperature) + " C", 80, 90);
tft.drawString("Humidity:", 50, 130);
tft.drawString(String(humidity) + " %", 80, 160);
// ส่งข้อมูลไป CynoIoT
// cynoiot.send("temperature", temperature);
// cynoiot.send("humidity", humidity);
Serial.print("Temp: ");
Serial.print(temperature);
Serial.print(" C, Humidity: ");
Serial.print(humidity);
Serial.println(" %");
delay(5000); // ส่งข้อมูลทุก 5 วินาที
}ไอเดียโปรเจกต์สำหรับ ESP32 CYD
นี่คือไอเดียโปรเจกต์ที่น่าสนใจสำหรับ ESP32 Cheap Yellow Display:
Smart Home Controller
สร้างหน้าจอควบคุมอุปกรณ์ในบ้าน เช่น ไฟ เครื่องปรับอากาศ ม่านไฟฟ้า
ระดับ: กลางWeather Station Display
แสดงข้อมูลอุณหภูมิ ความชื้น และพยากรณ์อากาศจาก API
ระดับ: เริ่มต้นMusic Player Controller
ควบคุมเพลงจาก Spotify หรือ Home Assistant ผ่านจอสัมผัส
ระดับ: กลาง - ขั้นสูงIoT Data Monitor
แสดงกราฟข้อมูลเซ็นเซอร์แบบ Real-time จาก CynoIoT
ระดับ: กลางDigital Clock & Calendar
นาฬิกาดิจิทัลพร้อมปฏิทิน อัปเดตเวลาผ่าน NTP
ระดับ: เริ่มต้นRetro Game Emulator
เล่นเกมเก่าๆ เช่น Snake, Tetris, หรือ Pong
ระดับ: ขั้นสูงSmart Lock Interface
หน้าจอควบคุมประตูอัจฉริยะ พร้อมปุ่ม PIN Code
ระดับ: กลางGarden Monitor
แสดงความชื้นในดิน อุณหภูมิ และกำหนดการรดน้ำ
ระดับ: เริ่มต้นสรุป
สิ่งที่คุณได้เรียนรู้
- ESP32 Cheap Yellow Display (CYD) คืออะไรและทำไมถึงได้รับความนิยม
- สเปคทางเทคนิคและความสามารถของบอร์ด
- วิธีการติดตั้งและตั้งค่า Arduino IDE สำหรับ ESP32 CYD
- การใช้งานไลบรารี TFT_eSPI สำหรับแสดงผลบนจอ
- การอ่านค่าจอสัมผัสและตอบสนองต่อการกด
- การเชื่อมต่อกับ CynoIoT Platform
- ไอเดียโปรเจกต์ที่สามารถทำได้ด้วย ESP32 CYD
ขั้นตอนถัดไป
ESP32 vs ESP8266
เปรียบเทียบความแตกต่างระหว่างสองบอร์ดยอดนิยม
สร้างระบบ Smart Monitoring ด้วย ESP32
โปรเจกต์ IoT ครบวงจรพร้อม CynoIoT
โปรเจกต์เพิ่มเติม
ดูโปรเจกต์อื่นๆ ใน CynoIoT Platform
🎉 ขอบคุณที่อ่าน!
หวังว่าบทความนี้จะช่วยให้คุณเริ่มต้นใช้งาน ESP32 CYD ได้อย่างมั่นใจ
หากมีคำถามหรือปัญหา สามารถสอบถามได้ที่ CynoIoT Community