• ติดตามบน
สอนต่อ ESP32 อ่านค่าอุณหภูมิและความชื้นด้วย DHT11 สำหรับมือใหม่

สอนต่อ ESP32 อ่านค่าอุณหภูมิและความชื้นด้วย DHT11 สำหรับมือใหม่

Chalothorn Kosakul 10 กรกฎาคม 2569 65 ครั้ง

วิธีต่อ ESP32 กับ DHT11 อ่านค่าอุณหภูมิและความชื้นแบบละเอียด (เข้าใจง่ายใน 5 นาที!)

เหมาะสำหรับนักเรียน นักศึกษา และผู้เริ่มต้นศึกษา IoT (Internet of Things)

สวัสดีครับนักเรียน นักศึกษา ทุกคน! วันนี้เราจะมาเรียนรู้วิธีการเขียนโปรแกรมอ่านค่าอุณหภูมิและความชื้นจากเซนเซอร์ยอดฮิตอย่าง DHT11 โดยใช้บอร์ดไมโครคอนโทรลเลอร์ ESP32 กันครับ

บทความนี้จะพาทำแบบ Step-by-Step พร้อมอธิบายโค้ดทุกบรรทัดอย่างละเอียด เพื่อให้เข้าใจหลักการและสามารถนำไปประยุกต์ใช้กับโปรเจกต์ของตัวเองได้จริงครับ เช่น ระบบรดน้ำต้นไม้อัตโนมัติ หรือระบบเปิด-ปิดพัดลมตามอุณหภูมิ

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

  • บอร์ด ESP32 (รุ่นใดก็ได้ เช่น ESP32 NodeMCU)
  • เซนเซอร์ DHT11 (แนะนำแบบที่เป็น Module 3 ขา เพราะมีตัวต้านทาน Pull-up ในตัว)
  • สายไฟจัมเปอร์ (Jumper Wires) แบบ Female-to-Female
  • สาย USB สำหรับต่อ ESP32 เข้ากับคอมพิวเตอร์

2. การต่อวงจร (Wiring Diagram)


การต่อสายระหว่าง ESP32 กับ DHT11 (แบบ Module 3 ขา) ทำได้ง่าย ๆ ตามตารางนี้เลยครับ:

ขาของ DHT11ต่อเข้ากับขาของ ESP32อธิบายเพิ่มเติม
VCC (+)3V3 หรือ VINขาจ่ายไฟเลี้ยง (รองรับ 3.3V - 5V)
GND (-)GNDขากราวด์ร่วม
DATA (OUT)GPIO 5ขาส่งสัญญาณข้อมูล (เปลี่ยนเป็นขาอื่นได้)
โน้ตสำคัญ: หากใช้ DHT11 แบบ 4 ขาดิบ ๆ ที่ไม่ใช่ Module จำเป็นต้องต่อตัวต้านทาน 10kΩ คร่อมระหว่างขา VCC กับขา DATA เพื่อเป็น Pull-up Resistor แต่ถ้าใช้แบบ Module 3 ขา สามารถต่อตรงตามตารางได้เลยครับ

3. การเตรียมโปรแกรม Arduino IDE

  1. เปิดโปรแกรม Arduino IDE
  2. ไปที่เมนู SketchInclude LibraryManage Libraries...
  3. ในช่องค้นหา ให้พิมพ์ว่า DHT sensor library ของ Adafruit แล้วกด Install
  4. ระบบอาจจะมีหน้าต่างเตือนให้ติดตั้ง Library เสริมชื่อ Adafruit Unified Sensor ให้กด Install All

4. โค้ดโปรแกรม (Source Code)

คัดลอกโค้ดด้านล่างนี้ไปวางในโปรแกรม Arduino IDE 

#include "DHT.h"

#define DHTPIN 5     
#define DHTTYPE DHT11   

DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(115200);
  Serial.println(F("DHT11 test!"));

  dht.begin();
}

void loop() {
  delay(2000);

  float h = dht.readHumidity();
  float t = dht.readTemperature();

  if (isnan(h) || isnan(t)) {
    Serial.println(F("Failed to read from DHT sensor!"));
    return;
  }

  Serial.print(F("Humidity: "));
  Serial.print(h);
  Serial.print(F("%  Temperature: "));
  Serial.print(t);
  Serial.println(F("°C"));
}

5. อธิบายโค้ดแบบเจาะลึกทุกบรรทัด

ส่วนที่ 1: การเรียกใช้งาน Library และกำหนดค่าเริ่มต้น

#include "DHT.h"
• เป็นการดึงคำสั่งสำเร็จรูปจาก Library เข้ามา ทำให้เราไม่ต้องเขียนโค้ดซับซ้อนเพื่อแกะสัญญาณดิจิทัลจากเซนเซอร์เอง

#define DHTPIN 5 และ #define DHTTYPE DHT11
DHTPIN 5: บอกบอร์ด ESP32 ว่าเราต่อขาสัญญาณ (DATA) ไว้ที่ช่อง GPIO 5
DHTTYPE DHT11: ระบุรุ่นเซนเซอร์ให้ถูกต้อง (เนื่องจาก Library นี้รองรับทั้ง DHT11, DHT22 และ AM2302)

DHT dht(DHTPIN, DHTTYPE);
• สร้างวัตถุ (Object) ชื่อว่า dht ขึ้นมา โดยส่งค่าขาและรุ่นของเซนเซอร์ที่เราตั้งไว้เข้าไป เพื่อเอาไว้ใช้เรียกคำสั่งอ่านค่าในฟังก์ชันถัดไป

ส่วนที่ 2: ฟังก์ชัน setup() (ทำงานครั้งเดียวตอนเปิดเครื่อง)

Serial.begin(115200);
• เปิดช่องทางการสื่อสารแบบ Serial เพื่อส่งข้อมูลไปแสดงผลบนหน้าจอคอมพิวเตอร์ ด้วยความเร็ว (Baud rate) 115200

dht.begin();
• สั่งให้เซนเซอร์เตรียมพร้อมเริ่มต้นทำงาน

ส่วนที่ 3: ฟังก์ชัน loop() (ทำงานวนซ้ำไปเรื่อย ๆ)

delay(2000);
• หน่วงเวลา 2 วินาทีก่อนอ่านค่าใหม่ เนื่องจาก DHT11 ต้องการเวลาในการแปลงสัญญาณ การอ่านถี่เกินไปจะทำให้ค่าเพี้ยน

float h = dht.readHumidity(); และ float t = dht.readTemperature();
• สั่งอ่านค่าความชื้นเก็บไว้ในตัวแปร h และอุณหภูมิเก็บไว้ในตัวแปร t โดยใช้ข้อมูลชนิด float เพราะต้องการเก็บค่าเป็นทศนิยม

if (isnan(h) || isnan(t)) { ... }
• ตรวจสอบว่าค่าที่อ่านได้ "ไม่ใช่ตัวเลข" (Is Not a Number) หรือไม่ หากเกิดจากสายหลุดหรือเซนเซอร์มีปัญหา โปรแกรมจะแจ้งเตือนและข้ามรอบนั้นไปทันที

Serial.print(...)
• สั่งพล็อตค่าอุณหภูมิและความชื้นที่อ่านได้ออกไปยังหน้าจอ Serial Monitor

6. ไอเดียการนำไปประยุกต์ใช้ต่อ (Challenge)

เมื่อน้อง ๆ สามารถอ่านค่าพื้นฐานได้แล้ว ลองนำแนวคิดนี้ไปประยุกต์และพัฒนาต่อยอดเป็นโปรเจกต์ของตัวเองดูนะครับ เช่น:

  1. ระบบเตือนภัยความร้อน: เขียนเงื่อนไข if (t > 35) เพื่อให้ ESP32 สั่งเปิดเสียง Buzzer เตือนภัย หรือเปิดไฟ LED สีแดง
  2. ระบบโรงเรือนอัจฉริยะ: ใช้คำสั่งตรวจสอบความชื้น if (h < 60) ให้ไปเปิด Relay ควบคุมปั๊มน้ำพ่นหมอกเพื่อเพิ่มความชื้นอัตโนมัติ
  3. โปรเจกต์ IoT เต็มรูปแบบ: ส่งค่าตัวแปร t และ h เข้าแอปพลิเคชันอย่าง Blynk หรือส่งแจ้งเตือนผ่าน LINE Notify เพื่อดูค่าสภาพแวดล้อมในห้องได้จากทุกที่ทั่วโลก
แท็กที่เกี่ยวข้อง :

แชร์บทความนี้