เนื้อหาในบทความ
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 คุณสามารถสร้างอุปกรณ์แสดงผลที่แบตเตอรี่ใช้ได้เป็นเดือน
ถัดไป:
- • อ่านบทความ ESP32 Deep Sleep ฉบับสมบูรณ์
- • ดู การใช้งาน ESP32 กับ MQTT
- • เรียนรู้ เทคนิคสร้าง Sensor Node ประหยัดไฟ