ESP32 + DHT Sensor แสดงผลบนจอ OLED 128×64

บทนำ

อยากทำโปรเจกต์ที่ดู “โปร” มากขึ้นไหม?
แทนที่จะเปิด 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
เซนเซอร์ DHT22 เชื่อมต่อกับ ESP32 และจอ OLED 128x64 มุมมองด้านข้าง เห็นการต่อสาย Jumper บน breadboard

การต่อวงจร (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 จะมีข้อความแสดง:

การต่อวงจร ESP32 กับ DHT22 และจอ OLED 128x64 บน breadboard แสดงผลอุณหภูมิและความชื้นแบบเรียลไทม์

❓ 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 ในห้องหรือโรงเรือน

Shopping Cart
Scroll to Top