วิธีต่อจอ OLED กับ ESP32 แสดงผลค่าโวลต์และสถานะระบบแบบ Real-time

สอนวิธีใช้จอ OLED 0.96″ ร่วมกับ ESP32 เพื่อแสดงข้อมูลจากเซนเซอร์และสถานะการเชื่อมต่อ แจกโค้ดภาษาไทยพร้อมวิธีต่อสายที่ง่ายที่สุด
ทำไมต้องติดจอให้ ESP32?
ในบทความที่ผ่านมา เราดูค่าผ่านมือถือหรือ LINE กันไปแล้ว แต่ถ้า Wi-Fi หลุด หรือเราอยู่หน้าเครื่องล่ะ? การมี จอ OLED ขนาดจิ๋วจะช่วยบอกเราได้ทันทีว่า “เครื่องยังทำงานอยู่ไหม” หรือ “ตอนนี้แบตเตอรี่เหลือกี่โวลต์” โดยไม่ต้องพึ่งอินเทอร์เน็ตครับ
อุปกรณ์ที่ต้องใช้
-
บอร์ด ESP32
-
จอ OLED 0.96 นิ้ว (I2C interface): จอรุ่นนี้มีแค่ 4 สาย ต่อใช้งานง่ายมากครับ
-
สาย Jump (เมีย-เมีย): 4 เส้น
วิธีการต่อสาย (แบบ I2C)
จอ OLED ส่วนใหญ่จะมีขา 4 ขา ให้ต่อเข้ากับ ESP32 ตามนี้ครับ:
-
VCC -> ต่อเข้า 3.3V
-
GND -> ต่อเข้า GND
-
SCL -> ต่อเข้า GPIO 22
-
SDA -> ต่อเข้า GPIO 21
ขั้นตอนการเตรียมโปรแกรม (Library)
ก่อนจะอัปโหลดโค้ด ให้คุณไปที่ Arduino IDE แล้วติดตั้ง Library ที่ชื่อว่า “Adafruit SSD1306” และ “Adafruit GFX Library” ให้เรียบร้อยก่อนนะครับ
แจก Full Source Code: OLED Monitor v1.0
โค้ดนี้ผมปรับจูนให้แสดงชื่อโฮสต์ esp32-0B060089FD08 และค่าสมมติของแบตเตอรี่ 12V บนหน้าจอครับ
C++
/* * Project: ESP32 OLED Display Monitor v1.0
* Source: satawat.com
* Update: 2026-03-20
*/
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // ความกว้างจอ
#define SCREEN_HEIGHT 64 // ความสูงจอ
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
const char* hostName = "esp32-0B060089FD08";
float mockVolt = 13.82; // ค่าสมมติจากบทความที่ 1
void setup() {
Serial.begin(115200);
// เริ่มต้นใช้งานจอ OLED
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,0);
display.println("SATAWAT.COM");
display.display();
delay(2000);
}
void loop() {
display.clearDisplay();
// แสดงหัวข้อ
display.setTextSize(1);
display.setCursor(0, 0);
display.println("SYSTEM MONITOR");
display.drawLine(0, 10, 128, 10, SSD1306_WHITE);
// แสดงชื่อเครื่อง
display.setCursor(0, 20);
display.print("ID: ");
display.println(hostName);
// แสดงค่าโวลต์ (ตัวใหญ่ชัดๆ)
display.setTextSize(2);
display.setCursor(0, 40);
display.print(mockVolt);
display.print(" V");
display.display(); // สั่งให้จอแสดงผลตามที่เราตั้งค่าไว้
// จำลองค่าเปลี่ยนไปเรื่อยๆ
mockVolt -= 0.01;
if(mockVolt < 11.0) mockVolt = 14.4;
delay(1000);
}