บทนำ
อยากทำโปรเจกต์ที่ดู “โปร” มากขึ้นไหม?
แทนที่จะเปิด Serial Monitor ตลอดเวลา วันนี้เราจะลองเอา DHT Sensor มาต่อกับ จอ OLED 128×64 เพื่อแสดงค่าอุณหภูมิและความชื้นแบบ Real-time บนหน้าจอเล็ก ๆ ที่ติดกับ ESP32
เหมาะกับงาน Smart Farm, IoT, บ้านอัจฉริยะ หรือใครที่อยากทำ Gadget เก๋ ๆ เอาไว้โชว์ก็ยังได้
วิดีโอสอน
อุปกรณ์ที่ใช้
- ESP32 DevKit V1
- DHT11 หรือ DHT22 Sensor
- OLED Display (I2C, ขนาด 0.96 นิ้ว 128×64)
- สาย Jumper
- Arduino IDE

ก่อนจะเริ่มทำโปรเจกต์ ลองไปทำความรู้จัก — ESP32 และฟีเจอร์เด่นที่คุณควรรู้ กันก่อน
ถ้ายังไม่เคยใช้ Arduino IDE มาก่อน ลองคลิกอ่าน — Arduino IDE Guide สำหรับผู้เริ่มต้น เพื่อรู้วิธีติดตั้งและเตรียมเขียนโค้ดง่าย ๆ ได้ทันที
หากต้องการดูรายละเอียดตำแหน่งขาของบอร์ด Devkit V1 สามารถอ่านได้ที่ ESP32 Pinout Devkit V1
การต่อวงจร (Wiring)
DHT Sensor
- VCC → 3.3V
- GND → GND
- DATA → GPIO 4
OLED Display (I2C)
- VCC → 3.3V
- GND → GND
- SDA → GPIO 21
- SCL → GPIO 22
ไลบรารีที่ต้องใช้
- Adafruit Unified Sensor
- DHT sensor library
- Adafruit SSD1306
- Adafruit GFX
ติดตั้งได้ผ่าน Library Manager ของ Arduino IDE
โค้ดตัวอย่าง
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.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);
#define DHTPIN 4
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(115200);
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println("SSD1306 allocation failed");
for (;;);
}
dht.begin();
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
}
void loop() {
float h = dht.readHumidity();
float t = dht.readTemperature();
display.clearDisplay();
display.setCursor(0, 10);
display.println("DHT Sensor");
display.print("Temp: ");
display.print(t);
display.println(" C");
display.print("Hum : ");
display.print(h);
display.println(" %");
display.display();
delay(2000);
}
ดาวน์โหลดโค้ด
กรุณา เข้าสู่ระบบ เพื่อดาวน์โหลด
อธิบายโค้ดแบบง่าย ๆ
- Adafruit_SSD1306 + Adafruit_GFX → ใช้สำหรับควบคุมการแสดงผลบนจอ OLED
- dht.readTemperature() และ dht.readHumidity() → อ่านค่าเซนเซอร์
- display.print() → สั่งให้ข้อความขึ้นบนจอ
- ใช้ delay(2000) เพื่ออัปเดตทุก 2 วินาที
ผลลัพธ์
บนจอ OLED จะมีข้อความแสดง:

❓ FAQ (คำถามที่พบบ่อย)
1. ใช้ DHT11 แทน DHT22 ได้ไหม?
ได้ แต่ค่าจะไม่ละเอียดเท่า DHT22
2. OLED ต้องใช้แรงดัน 5V หรือ 3.3V?
ส่วนใหญ่รองรับ 3.3V ของ ESP32
3. เปลี่ยนขา SDA/SCL ได้หรือไม่?
ได้ ต้องแก้ที่ Wire.begin(SDA, SCL)
4. ใช้จอ OLED สีได้ไหม?
ได้ แต่โค้ดและไลบรารีอาจต่างออกไปเล็กน้อย
5. อัปเดตเร็วกว่า 2 วินาทีได้ไหม?
ได้ แต่ไม่ควรอ่าน DHT บ่อยเกินไป
6. ใช้ ESP8266 ได้หรือไม่?
ได้ แต่พิน SDA/SCL จะต่างออกไป
7. จอ OLED ไม่ขึ้น ต้องทำอย่างไร?
เช็ก Address I2C (0x3C หรือ 0x3D)
8. เพิ่มกราฟลงบนจอ OLED ได้ไหม?
ได้ โดยใช้ฟังก์ชันวาดของ Adafruit_GFX
9. ทำงานพร้อมเซนเซอร์อื่นได้หรือไม่?
ได้ แค่เพิ่มโค้ดเชื่อมต่อเพิ่ม
10. เหมาะกับงานจริงไหม?
เหมาะสำหรับงานขนาดเล็ก-กลาง เช่น Smart Farm ในห้องหรือโรงเรือน






