สวัสดีครับนักศึกษาทุกคน ในบทที่แล้วเราพา ESP32 เชื่อมต่อ WiFi ได้สำเร็จแล้ว วันนี้เราจะมาหา “ข้อมูลจริง” เพื่อเตรียมส่งขึ้นระบบ Cloud กันครับ
เซนเซอร์ที่นักศึกษาอิเล็กทรอนิกส์ทุกคนต้องเคยผ่านมือคือ DHT11 (สีฟ้า) หรือ DHT22 (สีขาว) ซึ่งทำหน้าที่วัดอุณหภูมิและความชื้นในอากาศ แต่การจะอ่านค่าจากมันนั้นไม่ง่ายเหมือนการอ่านค่า Analog (บทที่ 6) เพราะมันใช้การส่งข้อมูลแบบดิจิทัลที่มีรูปแบบเฉพาะตัว (Digital Signal)
ดังนั้น บทนี้เราจะมาเรียนรู้วิธีลัดและวิธีที่ถูกต้อง คือการใช้ Library (ชุดคำสั่งสำเร็จรูป) ที่ผู้เชี่ยวชาญเขียนไว้ให้แล้ว มาช่วยให้เราเขียนโค้ดได้ง่ายขึ้นครับ
1. รู้จักกับ DHT11 vs DHT22
แม้หน้าตาจะคล้ายกัน แต่สเปกต่างกันพอสมควรครับ:
- DHT11 (สีฟ้า): ราคาถูก, วัดอุณหภูมิได้ 0-50°C (ความแม่นยำ ±2°C), ความชื้น 20-80% -> เหมาะสำหรับการเรียนรู้เบื้องต้น

- DHT22 (สีขาว): ราคาแพงกว่า, วัดได้กว้างกว่า -40 ถึง 80°C (แม่นยำ ±0.5°C), ความชื้น 0-100% -> เหมาะสำหรับงานจริง/โรงเรือน

2. วิธีติดตั้ง Library (สำคัญมาก!)
ก่อนจะเขียนโค้ด เราต้องติดตั้ง “เครื่องมือแปลภาษา” ของ DHT11 ลงใน Arduino IDE ก่อนครับ
- เปิดโปรแกรม Arduino IDE
- ไปที่เมนู Sketch > Include Library > Manage Libraries… (หรือกดปุ่มรูปหนังสือซ้อนกันแถบซ้ายมือ)
- ในช่องค้นหา พิมพ์คำว่า
DHT sensor library - มองหาชื่อ “DHT sensor library by Adafruit”
- กดปุ่ม INSTALL
- ข้อควรระวัง: ถ้ามีหน้าต่างเด้งขึ้นมาถามว่าให้ลง “Dependencies” (เช่น Adafruit Unified Sensor) ด้วยไหม? ให้กด Install ALL (ลงทั้งหมด) ไม่งั้นจะคอมไพล์ไม่ผ่านครับ

3. การต่อวงจร (Wiring)
เซนเซอร์ DHT11 ที่ขายกันมักจะมาในรูปแบบ “โมดูล” (มีแผ่นวงจร PCB เล็กๆ รองรับ) ซึ่งจะมี 3 ขา:
- VCC (+): ต่อเข้าไฟ 3.3V (หรือ 5V ก็ได้ แต่ ESP32 แนะนำ 3.3V)
- DATA (Out): ต่อเข้าขา GPIO ของ ESP32 (ในที่นี้เราจะใช้ GPIO 15)
- GND (-): ต่อเข้า GND
หมายเหตุ: หากนักศึกษาใช้ DHT11 แบบตัวเปล่าๆ (4 ขา) ต้องต่อตัวต้านทาน Pull-up 10kΩ ระหว่างขา VCC กับขา Data ด้วย แต่ถ้าเป็นโมดูลสำเร็จรูป ส่วนใหญ่จะมีมาให้แล้วครับ
4. โค้ดโปรแกรมอ่านค่าอุณหภูมิ
#include "DHT.h" // เรียกใช้ Library
#define DHTPIN 15 // ขา GPIO ที่ต่อกับขา Data ของเซนเซอร์
#define DHTTYPE DHT11 // กำหนดรุ่นเซนเซอร์ (ถ้าใช้สีขาวให้แก้เป็น DHT22)
// ประกาศ Object ชื่อ dht
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(115200);
Serial.println("DHT11 Test!");
dht.begin(); // เริ่มต้นการทำงานของเซนเซอร์
}
void loop() {
// รอสัก 2 วินาที (DHT11 อ่านค่าถี่เกินไปไม่ได้)
delay(2000);
// อ่านค่าความชื้น
float h = dht.readHumidity();
// อ่านค่าอุณหภูมิ (Celsius)
float t = dht.readTemperature();
// ตรวจสอบว่าอ่านค่าสำเร็จไหม (Check if any reads failed)
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
return; // จบรอบนี้ไปก่อน เริ่ม loop ใหม่
}
// แสดงผลทาง Serial Monitor
Serial.print("Humidity: ");
Serial.print(h);
Serial.print(" %");
Serial.print(" | ");
Serial.print("Temperature: ");
Serial.print(t);
Serial.println(" °C");
}
5. ปัญหาที่พบบ่อย (Troubleshooting)
- ขึ้นว่า “Failed to read…”:
- เช็คสายไฟว่าหลวมหรือไม่?
- เสียบขาถูกไหม? (บางยี่ห้อเรียงขาไม่เหมือนกัน ให้ดูสกรีนบนบอร์ด S, -, + เป็นหลัก)
- เลือก
DHTTYPEในโค้ดผิดรุ่นหรือไม่?
- ค่าอุณหภูมิเพี้ยนเวอร์:
- สายยาวเกินไปหรือไม่? (สาย Data ไม่ควรยาวเกิน 20 เมตร)
- ไฟเลี้ยงไม่พอ (ลองเปลี่ยนจาก 3.3V เป็น 5V ดูเฉพาะขา VCC)
สรุปท้ายบท
การใช้ Library ช่วยให้ชีวิตนักพัฒนา IoT ง่ายขึ้นมากครับ แทนที่จะต้องมานั่งเขียนโค้ดจับเวลาสัญญาณระดับไมโครวินาที เราแค่สั่ง dht.readTemperature() ก็ได้ค่ามาใช้งานเลย
ภารกิจต่อไป: ตอนนี้เรามีครบองค์ประกอบแล้วครับ
- เชื่อมต่อเน็ตได้ (จากบทที่ 8)
- มีข้อมูลอุณหภูมิ (จากบทที่ 9)
ในบทความหน้า เราจะนำสองอย่างนี้มารวมกัน เพื่อ “ส่งข้อมูลอุณหภูมิขึ้นสู่เว็บไซต์” ผ่านโปรโตคอลพื้นฐานที่สุดของโลกอินเทอร์เน็ต นั่นคือ HTTP GET/POST ครับ เตรียมตัวให้พร้อม!
หมายเหตุ:
- ผมเน้นเรื่องการกด Install ALL ตอนลง Library เพราะเป็นจุดที่มือใหม่ตกม้าตายบ่อยที่สุด (ลงไม่ครบแล้ว Compile Error)
