สร้างจอ E-Paper ประหยัดไฟกับ ESP32: แบตเตอรี่ใช้ได้เดือน

เรียนรู้วิธีใช้งาน E-Paper Display (E-Ink) กับ ESP32 เพื่อสร้างอุปกรณ์แสดงผลที่ประหยัดพลังงานสูง แบตเตอรี่ใช้ได้นานเป็นเดือน เหมาะสำหรับ Smart Home, Weather Station และ IoT Projects

📅 8 มีนาคม 2026⏱️ 15 นาที🎯 ระดับกลาง

E-Paper Display คืออะไร?

E-Paper Display หรือ E-Ink Display เป็นเทคโนโลยีจอแสดงผลที่ใช้พลังงานต่ำมาก โดยหลักการทำงานคือใช้ Microcapsules ที่มีอนุภาคสีขาวและดำ ซึ่งจะเคลื่อนที่เมื่อมีกระแสไฟผ่าน และจะคงสถานะไว้ได้แม้ไม่มีไฟเลี้ยง

ข้อดีของ E-Paper:

  • ✅ ประหยัดพลังงาน - ใช้ไฟเฉพาะตอนเปลี่ยนภาพเท่านั้น
  • ✅ มองเห็นชัดเจนแม้แสงแดดจ้า
  • ✅ สบายตา - อ่านง่ายเหมือนกระดาษ
  • �️ บางเบาและทนทาน

อุปกรณ์ที่ต้องใช้

Hardware:

  • • ESP32 หรือ ESP32-S3 บอร์ด (แนะนำ ESP32-S3 Super Mini เพราะเล็กและประหยัดไฟ)
  • • E-Paper Display Module (ขนาดที่นิยม: 2.13", 2.9", 4.2")
  • • สาย Jumper หรือสาย DuPont
  • • Breadboard (ถ้าต้องการทดสอบ)
  • • Battery (Li-Ion 18650 หรือ Li-Po) สำหรับโปรเจกต์ไร้สาย

Software:

  • • Arduino IDE (เวอร์ชันล่าสุด)
  • • ESP32 Board Library (เวอร์ชัน 3.0.0 ขึ้นไป)
  • • GxEPD2 Library - ไลบรารี่ E-Paper ที่ดีที่สุด

วิธีต่อสาย ESP32 กับ E-Paper Display

E-Paper Display ส่วนใหญ่ใช้บัส SPI ในการสื่อสาร ซึ่งใช้สายน้อยและรวดเร็ว นี่คือขาต่อที่ใช้:

E-Paper Pin    ESP32 Pin
-----------------------------------
VCC        → 3.3V
GND        → GND
DIN/MOSI   → GPIO 23 (SPI MOSI)
CLK/SCK    → GPIO 18 (SPI SCK)
CS         → GPIO 5  (Chip Select)
DC         → GPIO 2  (Data/Command)
RST        → GPIO 4  (Reset)
BUSY       → GPIO 16 (Busy Pin - ถ้ามี)

⚠️ ข้อควรระวัง: ตรวจสอบรุ่นของ E-Paper Display ให้ดีก่อนต่อสาย เพราะบางรุ่นอาจมีขาที่แตกต่างกัน โดยเฉพาะขา BUSY และ RST

โค้ดตัวอย่างการใช้งาน E-Paper กับ ESP32

นี่คือตัวอย่างโค้ดสำหรับแสดงข้อความและกราฟิกบน E-Paper Display:

#include <GxEPD2_BW.h>
#include <WiFi.h>

// กำหนดขา SPI สำหรับ E-Paper Display
#define E_PAPER_CS   5
#define E_PAPER_DC   2
#define E_PAPER_RST  4
#define E_PAPER_BUSY 16

// เลือกโมเดล E-Paper Display (2.9 inch)
GxEPD2_BW<GxEPD2_290_T94, GxEPD2_290_T94::HEIGHT> display(GxEPD2_290_T94(E_PAPER_CS, E_PAPER_DC, E_PAPER_RST, E_PAPER_BUSY));

// ตั้งค่า WiFi (ถ้าต้องการดึงข้อมูลจากอินเทอร์เน็ต)
const char* ssid = "YOUR_SSID";
const char* password = "YOUR_PASSWORD";

void setup() {
  Serial.begin(115200);
  
  // เริ่มต้นใช้งาน E-Paper Display
  display.init(115200);
  display.setRotation(1);  // หมุนจอหากจำเป็น
  
  // เชื่อมต่อ WiFi (ถ้าต้องการ)
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("\nWiFi connected");
  
  // แสดงข้อมูลครั้งแรก
  showFirstScreen();
}

void loop() {
  // อัปเดตข้อมูลทุก 30 นาที (เพื่อประหยัดพลังงาน)
  static unsigned long lastUpdate = 0;
  if (millis() - lastUpdate > 1800000) {  // 30 นาที
    updateDisplay();
    lastUpdate = millis();
  }
  
  // เข้าสู่โหมด Deep Sleep เพื่อประหยัดไฟ
  // ESP32.deepSleep(30 * 60 * 1000000);  // นอน 30 นาที
}

void showFirstScreen() {
  display.setFullWindow();
  display.fillScreen(GxEPD_WHITE);
  
  // แสดงข้อความต้อนรับ
  display.setTextColor(GxEPD_BLACK);
  display.setFont(&FreeSans9pt7b);
  display.setCursor(10, 30);
  display.println("E-Power Display");
  display.setCursor(10, 50);
  display.println("ESP32 + E-Ink");
  
  display.display(false);  // ไม่ต้อง partial update
}

void updateDisplay() {
  // อัปเดตการแสดงผลแบบ Partial (เร็วและประหยัดไฟ)
  display.setPartialWindow(0, 0, display.width(), display.height());
  display.fillScreen(GxEPD_WHITE);
  
  // แสดงข้อมูลใหม่
  display.setFont(&FreeSans9pt7b);
  display.setCursor(10, 30);
  display.print("Temp: ");
  display.print(getTemperature());
  display.println("C");
  
  display.setCursor(10, 50);
  display.print("Humidity: ");
  display.print(getHumidity());
  display.println("%");
  
  display.display(true);  // Partial update
}

float getTemperature() {
  // จำลองการอ่านค่าเซ็นเซอร์
  return 25.5 + (rand() % 10 - 5) / 10.0;
}

float getHumidity() {
  // จำลองการอ่านค่าเซ็นเซอร์
  return 60.0 + (rand() % 20 - 10);
}

💡 เคล็ดลับ: ใช้ Partial Update สำหรับการอัปเดตข้อมูลบางส่วนของหน้าจอ ซึ่งจะเร็วกว่าและประหยัดไฟมากกว่า Full Refresh

เทคนิคการประหยัดพลังงานขั้นสูง

1. ใช้ Deep Sleep Mode

ESP32 สามารถเข้าสู่ Deep Sleep Mode เพื่อลดกำลังไฟลงเหลือเพียง 10-20µA และตื่นขึ้นมาอัปเดตหน้าจอเมื่อถึงเวลาที่กำหนด:

// เข้าสู่ Deep Sleep เป็นเวลา 30 นาที
esp_sleep_enable_timer_wakeup(30 * 60 * 1000000);
esp_deep_sleep_start();

2. ลดความถี่ CPU

ลดความถี่ CPU ลงเหลือ 80MHz หรือ 40MHz เพื่อประหยัดไฟขณะประมวลผล:

// ลดความถี่ CPU เป็น 80MHz
setCpuFrequencyMhz(80);

3. ปิด WiFi หลังจากใช้งาน

WiFi ใช้พลังงานสูงมาก ควรปิดหลังจากดึงข้อมูลแล้ว:

WiFi.mode(WIFI_OFF);
btStop();  // ปิด Bluetooth ด้วยถ้าไม่ใช้

4. ปิด E-Paper หลังจากแสดงผล

หลังจากแสดงผลเสร็จแล้ว E-Paper จะคงภาพไว้ได้โดยไม่ต้องใช้ไฟ แต่บางโมดูลอาจต้องปิดการเลี้ยง VCC เพื่อประหยัดไฟสูงสุด:

// ใช้ Transistor หรือ Relay ควบคุม VCC ของ E-Paper
digitalWrite(E_PAPER_VCC_PIN, LOW);

ไอเดียโปรเจกต์ที่สามารถทำได้

🌡️ Weather Station

แสดงอุณหภูมิและสภาพอากาศจาก OpenWeatherMap API อัปเดตทุก 1 ชั่วโมง แบตเตอรี่ใช้ได้ 3-6 เดือน

📅 Smart Calendar

แสดงปฏิทินและนัดหมายจาก Google Calendar อัปเดตทุกคืน แบตเตอรี่ใช้ได้ 6-12 เดือน

📊 Stock Price Tracker

แสดงกราฟราคาหุ้นหรือคริปโตเคอเรนซี่ อัปเดตทุก 15-30 นาที แบตเตอรี่ใช้ได้ 1-3 เดือน

🏠 Home Info Display

แสดงข้อมูล IoT เช่น อุณหภูมิในบ้าน ใช้ไฟ-น้ำ แบตเตอรี่ใช้ได้ 6-12 เดือน

ปัญหาที่พบบ่อยและวิธีแก้ไข

❌ ปัญหา: หน้าจอไม่แสดงผล

สาเหตุ: อาจเกิดจากต่อสายผิด หรือไม่ได้เรียก display.display()

วิธีแก้: ตรวจสอบการต่อสายให้ครบถ้วน และเรียก display.display() หลังจากวาดกราฟิกเสมอ

❌ ปัญหา: ภาพค้างหรือมีจุดดำ

สาเหตุ: เกิดจากการไม่ทำ Full Refresh เป็นระยะ

วิธีแก้: ทำ Full Refresh ทุกๆ 10-20 ครั้ง Partial Update เพื่อลดการสะสมของภาพเก่า

❌ ปัญหา: แบตเตอรี่หมดเร็วเกินไป

สาเหตุ: อาจเกิดจากไม่ได้ใช้ Deep Sleep หรือ WiFi ยังเปิดอยู่

วิธีแก้: ใช้ Deep Sleep Mode และปิด WiFi หลังจากใช้งานเสร็จ

สรุป

การใช้งาน E-Paper Display กับ ESP32 เป็นทางเลือกที่ยอดเยี่ยมสำหรับโปรเจกต์ IoT ที่ต้องการ ประหยัดพลังงาน ด้วยการผสมผสาน Deep Sleep Mode และการอัปเดตแบบ Partial คุณสามารถสร้างอุปกรณ์แสดงผลที่แบตเตอรี่ใช้ได้เป็นเดือน