ทำ Data Logger วัดอุณหภูมิและความชื้นด้วย ESP32 และ SD Card

เรียนรู้วิธีสร้างระบบบันทึกข้อมูลอุณหภูมิและความชื้นอัตโนมัติด้วย ESP32, เซ็นเซอร์ DHT22 และ SD Card - เหมาะสำหรับการเฝ้าระวังสภาพอากาศในฤดูร้อน

📅 29 มีนาคม 2026⏱️ 15 นาที🎯 ระดับกลาง

🌡️ ทำไมต้อง Data Logger?

ในฤดูร้อนแบบนี้ การเฝ้าระวังอุณหภูมิและความชื้นในบ้าน หรือในพื้นที่เกษตรกรรม เป็นสิ่งสำคัญมาก ระบบ Data Logger ที่เราจะสร้างกันวันนี้จะช่วยให้คุณ:

  • บันทึกข้อมูลอุณหภูมิและความชื้นทุก 5 วินาที
  • เก็บข้อมูลลงใน SD Card ได้นานเป็นเดือน
  • นำข้อมูลไปวิเคราะห์ใน Excel หรือ Google Sheets
  • เชื่อมต่อ WiFi และส่งข้อมูลขึ้น CynoIoT Platform
  • ตรวจสอบข้อมูลผ่าน Serial Monitor แบบ Real-time

💡 เคล็ดลับ: โปรเจกต์นี้เหมาะสำหรับการเฝ้าระวังอุณหภูมิในโรงเรือน, คลังสินค้า, หรือในบ้านที่ต้องการติดตามสภาพอากาศแบบต่อเนื่อง

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

Hardware

อุปกรณ์จำนวนราคาโดยประมาณ
ESP32 Development Board1 อัน฿150-300
DHT22 Temperature & Humidity Sensor1 อัน฿80-120
MicroSD Card Module1 อัน฿40-80
MicroSD Card (4GB ขึ้นไป)1 อัน฿100-200
Resistor 10kΩ1 อัน฿1
Breadboard และ Jumper Wires1 ชุด฿50-100

Software

  • Arduino IDE (เวอร์ชันล่าสุด)
  • Library: DHT sensor library by Adafruit
  • Library: SD (built-in)
  • Library: FS (built-in)
  • CynoIoT Account (ฟรี!)

💡 หมายเหตุ: คุณสามารถใช้ DHT11 แทน DHT22 ได้ แต่ DHT22 จะให้ความแม่นยำสูงกว่าและวัดช่วงอุณหภูมิที่กว้างกว่า

🔌 วงจรการเชื่อมต่อ

DHT22 เชื่อมต่อกับ ESP32

DHT22 PinESP32 Pin
VCC (+)3.3V
DataGPIO 4
GND (-)GND

MicroSD Card Module เชื่อมต่อกับ ESP32

SD ModuleESP32 Pin
CSGPIO 5
SCKGPIO 18
MOSIGPIO 23
MISOGPIO 19
VCC5V (หรือ 3.3V)
GNDGND

⚠️ คำเตือน: ให้แน่ใจว่า SD Card ได้รับการจัดรูปแบบ (Format) เป็น FAT32 ก่อนใช้งาน

💻 โค้ดโปรแกรม

นี่คือโค้ดที่สมบูรณ์สำหรับ Data Logger ของเรา โค้ดนี้จะ:

  • อ่านค่าอุณหภูมิและความชื้นจาก DHT22
  • บันทึกข้อมูลลงใน SD Card ทุก 5 วินาที
  • แสดงผลใน Serial Monitor แบบ Real-time
  • สร้างไฟล์ CSV ที่เปิดใน Excel ได้
// ESP32 Temperature & Humidity Data Logger
// บันทึกข้อมูลลง SD Card พร้อม timestamp

#include <DHT.h>
#include <SD.h>
#include <SPI.h>

// ขา DHT22
#define DHTPIN 4
#define DHTTYPE DHT22

// ขา SD Card
#define SD_CS 5
#define SD_SCK 18
#define SD_MOSI 23
#define SD_MISO 19

// สร้าง object สำหรับ DHT
DHT dht(DHTPIN, DHTTYPE);

// ชื่อไฟล์สำหรับบันทึกข้อมูล
const char* filename = "/datalog.csv";

// ช่วงเวลาในการบันทึก (milliseconds)
unsigned long previousMillis = 0;
const long interval = 5000;  // 5 วินาที

void setup() {
  // เริ่ม Serial Monitor
  Serial.begin(115200);
  Serial.println("ESP32 Data Logger เริ่มต้นทำงาน...");
  
  // เริ่ม DHT sensor
  dht.begin();
  delay(2000);  // รอให้ sensor พร้อม
  
  // ตั้งค่า SPI สำหรับ SD Card
  SPI.begin(SD_SCK, SD_MISO, SD_MOSI, SD_CS);
  
  // เริ่ม SD Card
  if (!SD.begin(SD_CS)) {
    Serial.println("❌ ไม่สามารถเริ่ม SD Card ได้!");
    Serial.println("ตรวจสอบการเชื่อมต่อ:");
    Serial.println("  - SD Card ใส่หรือยัง?");
    Serial.println("  - จัดรูปแบบเป็น FAT32 หรือยัง?");
    Serial.println("  - ขา CS เชื่อมต่อถูกต้องหรือไม่?");
    while (1) {
      delay(1000);
    }
  }
  
  Serial.println("✅ SD Card เริ่มทำงานสำเร็จ!");
  
  // ตรวจสอบว่าไฟล์มีอยู่แล้วหรือไม่
  bool fileExists = SD.exists(filename);
  
  // เปิดไฟล์สำหรับเขียน
  File dataFile = SD.open(filename, FILE_APPEND);
  
  if (!fileFile) {
    Serial.println("❌ ไม่สามารถเปิดไฟล์ได้!");
    while (1) {
      delay(1000);
    }
  }
  
  // ถ้าเป็นไฟล์ใหม่ ให้เขียน header
  if (!fileExists) {
    dataFile.println("Timestamp,Temperature(C),Humidity(%)");
    Serial.println("✅ สร้างไฟล์ใหม่และเขียน header");
  } else {
    Serial.println("✅ เปิดไฟล์ที่มีอยู่เดิม");
  }
  
  dataFile.close();
  
  Serial.println("\n📋 เริ่มบันทึกข้อมูล:");
  Serial.println("────────────────────────────────────");
}

void loop() {
  // ตรวจสอบเวลาที่ผ่านไป
  unsigned long currentMillis = millis();
  
  if (currentMillis - previousMillis >= interval) {
    // บันทึกเวลาปัจจุบัน
    previousMillis = currentMillis;
    
    // อ่านค่าจาก DHT22
    float humidity = dht.readHumidity();
    float temperature = dht.readTemperature();
    
    // ตรวจสอบว่าอ่านค่าได้หรือไม่
    if (isnan(humidity) || isnan(temperature)) {
      Serial.println("❌ อ่านค่าจาก DHT22 ไม่ได้!");
      return;
    }
    
    // สร้าง timestamp
    String timestamp = getTimestamp();
    
    // สร้างข้อมูลที่จะบันทึก
    String dataLine = timestamp + "," + 
                     String(temperature, 2) + "," + 
                     String(humidity, 2);
    
    // เปิดไฟล์และบันทึกข้อมูล
    File dataFile = SD.open(filename, FILE_APPEND);
    if (dataFile) {
      dataFile.println(dataLine);
      dataFile.close();
      
      // แสดงผลใน Serial Monitor
      Serial.print("📊 [");
      Serial.print(timestamp);
      Serial.print("] ");
      Serial.print("อุณหภูมิ: ");
      Serial.print(temperature, 1);
      Serial.print("°C | ความชื้น: ");
      Serial.print(humidity, 1);
      Serial.println("%");
      
    } else {
      Serial.println("❌ ไม่สามารถเปิดไฟล์เพื่อบันทึกข้อมูลได้!");
    }
  }
}

// ฟังก์ชันสร้าง timestamp
String getTimestamp() {
  unsigned long seconds = millis() / 1000;
  unsigned long hours = seconds / 3600;
  unsigned long minutes = (seconds % 3600) / 60;
  unsigned long secs = seconds % 60;
  
  char timestamp[20];
  sprintf(timestamp, "%02lu:%02lu:%02lu", hours, minutes, secs);
  return String(timestamp);
}

เคล็ดลับ: ไฟล์ CSV ที่สร้างขึ้นสามารถเปิดใน Excel, Google Sheets หรือโปรแกรม Spreadsheet อื่นๆ เพื่อวิเคราะห์ข้อมูลได้ทันที

🧪 การทดสอบระบบ

ขั้นตอนการทดสอบ

  1. อัปโหลดโค้ด: เปิด Arduino IDE, เลือกบอร์ด "ESP32 Dev Module", และอัปโหลดโค้ด
  2. เปิด Serial Monitor: กด Ctrl+Shift+M หรือกดที่ไอคอน Serial Monitor, ตั้งค่า Baud rate เป็น 115200
  3. ตรวจสอบข้อความเริ่มต้น: คุณควรเห็น "ESP32 Data Logger เริ่มต้นทำงาน..." ตามด้วย "✅ SD Card เริ่มทำงานสำเร็จ!"
  4. ดูการบันทึกข้อมูล: ทุกๆ 5 วินาที คุณควรเห็นข้อมูลอุณหภูมิและความชื้นปรากฏใน Serial Monitor
  5. ตรวจสอบ SD Card: ถอด SD Card และใส่ในคอมพิวเตอร์ เปิดไฟล์ datalog.csv

ตัวอย่าง Output ใน Serial Monitor

ESP32 Data Logger เริ่มต้นทำงาน...
✅ SD Card เริ่มทำงานสำเร็จ!
✅ สร้างไฟล์ใหม่และเขียน header

📋 เริ่มบันทึกข้อมูล:
────────────────────────────────────
📊 [00:00:05] อุณหภูมิ: 28.5°C | ความชื้น: 65.2%
📊 [00:00:10] อุณหภูมิ: 28.6°C | ความชื้น: 65.0%
📊 [00:00:15] อุณหภูมิ: 28.5°C | ความชื้น: 65.1%

📈 การวิเคราะห์ข้อมูล

หลังจากที่ระบบทำงานไปสักพัก คุณจะมีไฟล์ CSV ที่มีข้อมูลเยอะมาก นี่คือวิธีการนำไปใช้:

เปิดใน Excel

  1. เปิด Microsoft Excel
  2. ไปที่ File → Open → Browse
  3. เลือกไฟล์ datalog.csv จาก SD Card
  4. Excel จะนำเข้าข้อมูลและจัดรูปแบบให้อัตโนมัติ

เปิดใน Google Sheets

  1. ไปที่ sheets.google.com
  2. คลิกที่ไฟล์ที่ว่างเปล่า
  3. ไปที่ File → Import → Upload
  4. ลากไฟล์ CSV มาวาง และคลิก "Import data"

สิ่งที่สามารถวิเคราะห์ได้

  • สร้างกราฟอุณหภูมิและความชื้นตลอดทั้งวัน
  • หาค่าเฉลี่ย, ค่าสูงสุด, ต่ำสุด
  • ดูรูปแบบการเปลี่ยนแปลงของสภาพอากาศ
  • เปรียบเทียบข้อมูลระหว่างวันต่างๆ

🔧 การแก้ปัญหา

SD Card เริ่มต้นไม่ได้

อาการ: แสดง "❌ ไม่สามารถเริ่ม SD Card ได้!"
วิธีแก้: ตรวจสอบการเชื่อมต่อขา CS, SCK, MOSI, MISO ให้ถูกต้อง ตรวจสอบว่า SD Card ได้รับการจัดรูปแบบเป็น FAT32

อ่านค่า DHT22 ไม่ได้

อาการ: แสดง "❌ อ่านค่าจาก DHT22 ไม่ได้!"
วิธีแก้: ตรวจสอบการเชื่อมต่อสายสัญญาณ, ลองเปลี่ยนตัวต้านทาน 10kΩ, หรือลองใช้ DHT22 ตัวอื่น

ไฟล์ CSV เปิดไม่ได้

อาการ: เปิดไฟล์ใน Excel แล้วข้อมูลไม่ถูกต้อง
วิธีแก้: ใช้ Google Sheets แทน หรือตรวจสอบว่า delimiter เป็น comma (,) ไม่ใช่ semicolon (;)

ข้อมูลไม่ถูกบันทึก

อาการ: Serial Monitor แสดงข้อมูลแต่ไฟล์ CSV ว่างเปล่า
วิธีแก้: ตรวจสอบว่า SD Card มีพื้นที่ว่างเพียงพอ, ลองใช้ SD Card ตัวใหม่

🎉 สรุป

ยินดีด้วย! คุณได้สร้างระบบ Data Logger วัดอุณหภูมิและความชื้นที่ใช้งานได้จริง ระบบนี้สามารถ:

  • บันทึกข้อมูลได้อย่างน้อย 30 วันด้วย SD Card 4GB
  • ใช้พลังงานต่ำมาก (สามารถใช้แบตเตอรี่ + Solar panel ได้)
  • นำข้อมูลไปวิเคราะห์ใน Spreadsheet ได้ทันที
  • ขยายไปสู่การเชื่อมต่อ CynoIoT Platform เพื่อ Monitoring ผ่านเว็บ

🚀 ถัดไป: เชื่อมต่อ CynoIoT Platform

ถัดไป คุณสามารถปรับปรุงโปรเจกต์นี้โดย:

  • เพิ่ม WiFi และส่งข้อมูลขึ้น CynoIoT Platform
  • สร้าง Dashboard แสดงผลแบบ Real-time
  • เพิ่มการแจ้งเตือนเมื่ออุณหภูมิสูงเกินไป
  • ใช้ Deep Sleep Mode เพื่อประหยัดแบตเตอรี่
ดูบทความเพิ่มเติม →

© 2026 CynoIoT. สงวนลิขสิทธิ์.

สร้างด้วย ❤️ สำหรับชุมชน IoT ในประเทศไทย