บทความ: ESP32 BME688 Gas Sensor - เซนเซอร์ตรวจจับก๊าซ AI วัดคุณภาพอากาศ

เรียนรู้วิธีใช้งาน BME688 ซีเซนเซอร์อัจฉริยะจาก Bosch ที่มาพร้อม AI สำหรับตรวจจับก๊าซ VOC และวัดคุณภาพอากาศอย่างแม่นยำ เชื่อมต่อกับ ESP32 และ CynoIoT Platform

📅 13 มีนาคม 2026⏱️ 25 นาที🎯 ระดับกลาง
4-in-1
เซนเซอร์
AI
Built-in
I2C
Interface
~฿600
ราคาเซนเซอร์

🔍 ภาพรวม BME688 Gas Sensor

BME688 เป็นเซนเซอร์อัจฉริยะรุ่นล่าสุดจาก Bosch ที่มาพร้อมเทคโนโลยี AI สำหรับตรวจจับก๊าซ โดยเฉพาะ Volatile Organic Compounds (VOCs) และ Volatile Sulfur Compounds (VSCs) ซึ่งเป็นก๊าซที่เกิดจากการเผาไหม้ การสลายตัวของสารเคมี และกิจกรรมของมนุษย์

เซนเซอร์ตัวนี้รวมทุกอย่างไว้ในชิปเดียว:

  • Temperature - วัดอุณหภูมิ
  • Humidity - วัดความชื้น
  • Pressure - วัดความดันบรรยากาศ
  • Gas Sensing - ตรวจจับก๊าซ VOC ด้วย AI

💡 เกร็ดความรู้: BME688 เป็นเซนเซอร์ตัวแรกของโลกที่มี AI built-in สำหรับการวิเคราะห์ก๊าซ สามารถฝึกโมเดล AI ของคุณเองเพื่อตรวจจับกลิ่นเฉพาะได้!

✨ คุณสมบัติเด่นของ BME688

🤖 AI-Powered Gas Detection

ใช้เทคโนโลยี AI ในการวิเคราะห์รูปแบบก๊าซ สามารถแยกแยะประเภทก๊าซได้หลากหลาย เหมาะสำหรับแอปพลิเคชันที่ต้องการความแม่นยำสูง

🌡️ 4-in-1 Sensor

วัดอุณหภูมิ (-40 ถึง 85°C), ความชื้น (0-100%), ความดัน (300-1100 hPa), และก๊าซในชิปเดียว ประหยัดพื้นที่และต้นทุน

⚡ Ultra-Low Power

โหมดประหยัดพลังงาน ใช้กระแสเพียง 0.5 µA ในโหมด sleep เหมาะสำหรับโปรเจกต์แบตเตอรี่

🔌 I2C Interface

ใช้งานง่ายด้วยบัส I2C เชื่อมต่อกับ ESP32, Arduino, หรือไมโครคอนโทรลเลอร์อื่นๆ

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

Hardware

  • ESP32 Board หรือ Arduino (แนะนำ ESP32)
  • BME688 Sensor Module (~฿600)
  • Jumper Wires ( female-to-male)
  • Breadboard (ไม่บังคับ)

Software

  • Arduino IDE หรือ PlatformIO
  • BSEC2 Library (Bosch)
  • Adafruit BME688 Library
  • CynoIoT Account (ฟรี)

💡 หมายเหตุ: BME688 มี 2 เวอร์ชัน: แบบ Breakout Board (ใช้ง่าย) และแบบ Chip (ต้องบัดกรี) แนะนำให้ใช้ Breakout Board สำหรับผู้เริ่มต้น

🔌 การต่อสาย BME688 กับ ESP32

BME688 PinESP32 Pinหมายเหตุ
VIN / VCC3.3Vใช้ 3.3V เท่านั้น
GNDGNDGround
SCLGPIO 22I2C Clock
SDAGPIO 21I2C Data

⚠️ คำเตือน: อย่าเชื่อมต่อ BME688 กับ 5V เด็ดขาด! อาจทำให้เซนเซอร์เสียหายได้ ใช้เฉพาะ 3.3V เท่านั้น

📚 การติดตั้ง Library

เราจะใช้ 2 Library หลัก:

1. Adafruit BME688 Library

เปิด Arduino IDE → ไปที่ Sketch → Include Library → Manage Libraries
ค้นหา: "Adafruit BME688" → ติดตั้ง

2. Adafruit Unified Sensor

เปิด Arduino IDE → ไปที่ Sketch → Include Library → Manage Libraries
ค้นหา: "Adafruit Unified Sensor" → ติดตั้ง

3. BSEC2 Library (Optional, สำหรับ AI Features)

ดาวน์โหลดจาก GitHub และติดตั้งแบบ手动

💻 โค้ดพื้นฐาน: อ่านค่า BME688

#include <Wire.h>
#include <Adafruit_BME688.h>

// สร้างออบเจกต์เซนเซอร์
Adafruit_BME688 bme;

// ตั้งค่า I2C address (เริ่มต้นคือ 0x77)
// ถ้าไม่ได้ ลองเปลี่ยนเป็น 0x76

void setup() {
  Serial.begin(115200);
  delay(1000);  // รอให้ Serial เริ่มทำงาน
  
  Serial.println("BME688 Gas Sensor Test");
  
  // เริ่มต้นใช้งาน I2C
  Wire.begin();
  
  // เริ่มต้นใช้งาน BME688
  if (!bme.begin()) {
    Serial.println("ไม่พบเซนเซอร์ BME688! ตรวจสอบการต่อสาย");
    while (1);
  }
  
  // ตั้งค่าความละเอียด (oversampling)
  bme.setTemperatureOversampling(BME680_OS_8X);
  bme.setHumidityOversampling(BME680_OS_2X);
  bme.setPressureOversampling(BME680_OS_4X);
  
  // ตั้งค่าการอ่านค่าก๊าซ
  bme.setIIRFilterSize(BME680_FILTER_SIZE_3);
  bme.setGasHeater(320, 150);  // 320°C นาน 150ms
  
  Serial.println("เริ่มต้นใช้งานสำเร็จ!");
}

void loop() {
  // บอกเซนเซอร์ให้เริ่มวัดค่า
  if (!bme.performReading()) {
    Serial.println("ไม่สามารถอ่านค่าได้");
    return;
  }
  
  // อ่านค่าต่างๆ
  Serial.println("--------- ข้อมูลเซนเซอร์ ---------");
  Serial.print("อุณหภูมิ: ");
  Serial.print(bme.temperature);
  Serial.println(" °C");
  
  Serial.print("ความชื้น: ");
  Serial.print(bme.humidity);
  Serial.println(" %");
  
  Serial.print("ความดัน: ");
  Serial.print(bme.pressure / 100.0);
  Serial.println(" hPa");
  
  Serial.print("ค่าก๊าซ: ");
  Serial.print(bme.gas_resistance);
  Serial.println(" Ohms");
  
  Serial.print("ดัชนีคุณภาพอากาศ (IAQ): ");
  // คำนวณ IAQ แบบง่าย (ยิ่งน้อยยิ่งดี)
  float iaq = calculateIAQ(bme.gas_resistance, bme.humidity);
  Serial.print(iaq);
  Serial.println(" (0-500)");
  
  Serial.println("-------------------------------");
  Serial.println();
  
  delay(2000);  // อ่านทุกๆ 2 วินาที
}

// ฟังก์ชันคำนวณ IAQ แบบง่าย
float calculateIAQ(float gasResistance, float humidity) {
  // นี่เป็นการคำนวณแบบง่ายๆ
  // ค่าที่ดีควรอยู่ระหว่าง 0-100
  // ยิ่งก๊าซมาก ยิ่งแย่
  
  float iaq = 50000.0 / gasResistance;
  
  // ปรับค่าตามความชื้น
  if (humidity > 60 || humidity < 30) {
    iaq *= 1.2;
  }
  
  return iaq;
}

🌫️ การตรวจจับก๊าซ VOC

BME688 สามารถตรวจจับก๊าซ VOC ได้หลากหลายประเภท:

  • 🏭 สารจากโรงงาน - เบนซิน, โทลูอีน, ไซลีน
  • 🏠 ก๊าซในบ้าน - ก๊าซหุงต้ม, ควันบุหรี่, น้ำมัน
  • 🌿 ก๊าศจากธรรมชาติ - จากพืช, ดิน
  • 👃 กลิ่นร่างกาย - เหงื่อ, ลมหายใจ

💡 เกร็ดความรู้: ค่า Gas Resistance ที่สูงแปลว่าอากาศสะอาด (ก๊าีน้อย) ส่วนค่าที่ต่ำแปลว่ามีก๊าีเยอะ (อากาศไม่ดี)

โค้ดตรวจจับคุณภาพอากาศ

// ฟังก์ชันตรวจสอบคุณภาพอากาศ
String checkAirQuality(float gasResistance) {
  // ค่า gas resistance หน่วยเป็น Ohm
  // ยิ่งค่ามาก อากาศยิ่งดี
  
  if (gasResistance > 100000) {
    return "ดีมาก ✅";  // Excellent
  } else if (gasResistance > 50000) {
    return "ดี 👍";  // Good
  } else if (gasResistance > 20000) {
    return "ปานกลาง 😐";  // Moderate
  } else if (gasResistance > 10000) {
    return "แย่ ⚠️";  // Poor
  } else {
    return "อันตราย 🚨";  // Hazardous
  }
}

// ใช้งานใน loop()
void loop() {
  // ... โค้ดอ่านค่าเซนเซอร์ ...
  
  String quality = checkAirQuality(bme.gas_resistance);
  Serial.print("คุณภาพอากาศ: ");
  Serial.println(quality);
  
  // แจ้งเตือนถ้าอากาศแย่
  if (bme.gas_resistance < 10000) {
    Serial.println("⚠️ เตือน: อากาศไม่ดี! เปิดระบายอากาศด่วน");
    // ส่งแจ้งเตือนไปยัง CynoIoT ได้ที่นี่
  }
  
  delay(2000);
}

🔗 การเชื่อมต่อกับ CynoIoT Platform

เชื่อมต่อ BME688 กับ CynoIoT Platform เพื่อ:

  • 📊 ตรวจสอบข้อมูลแบบ Real-time
  • 📈 ดูกราฟประวัติคุณภาพอากาศ
  • 🔔 รับแจ้งเตือนเมื่ออากาศแย่
  • 📱 ตรวจสอบผ่านมือถือ

ตัวอย่างโค้ดส่งข้อมูลเข้า CynoIoT

#include <WiFi.h>
#include <HTTPClient.h>

// ตั้งค่า WiFi
const char* ssid = "YOUR_WIFI_SSID";
const char* password = "YOUR_WIFI_PASSWORD";

// ตั้งค่า CynoIoT
const char* cynoiotUrl = "https://api.cynoiot.com/sensor/data";
const char* apiKey = "YOUR_CYNOIOT_API_KEY";

void sendToCynoIoT(float temp, float hum, float pres, float gas) {
  if (WiFi.status() != WL_CONNECTED) {
    Serial.println("WiFi ไม่ได้เชื่อมต่อ");
    return;
  }
  
  HTTPClient http;
  http.begin(cynoiotUrl);
  http.addHeader("Content-Type", "application/json");
  http.addHeader("Authorization", apiKey);
  
  // สร้าง JSON payload
  String payload = "{";
  payload += "\"temperature\":" + String(temp) + ",";
  payload += "\"humidity\":" + String(hum) + ",";
  payload += "\"pressure\":" + String(pres) + ",";
  payload += "\"gas\":" + String(gas) + ",";
  payload += "\"timestamp\":" + String(millis());
  payload += "}";
  
  // ส่งข้อมูล
  int httpResponseCode = http.POST(payload);
  
  if (httpResponseCode > 0) {
    Serial.println("ส่งข้อมูลสำเร็จ!");
  } else {
    Serial.println("ส่งข้อมูลไม่สำเร็จ: " + String(httpResponseCode));
  }
  
  http.end();
}

void setup() {
  // ... โค้ดตั้งค่าเซนเซอร์ ...
  
  // เชื่อมต่อ WiFi
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("WiFi เชื่อมต่อแล้ว!");
}

void loop() {
  // ... โค้ดอ่านค่าเซนเซอร์ ...
  
  // ส่งข้อมูลไป CynoIoT ทุกๆ 30 วินาที
  static unsigned long lastSend = 0;
  if (millis() - lastSend > 30000) {
    sendToCynoIoT(bme.temperature, bme.humidity, 
                  bme.pressure, bme.gas_resistance);
    lastSend = millis();
  }
  
  delay(2000);
}

💡 แนวโปรเจกต์ที่น่าสนใจ

🏠 ระบบตรวจจับคุณภาพอากาศภายในบ้าน

ติดตั้งในห้องนั่งเล่น/ห้องนอน เพื่อตรวจสอบคุณภาพอากาศและแจ้งเตือนเมื่ออากาศแย่

🏭 โปรเจกต์ Smart Factory

ตรวจสอบมลพิษในโรงงาน ตรวจจับก๊าซเคมี และแจ้งเตือนอันตราย

🌱 ระบบควบคุมความชื้นในเรือนกระจก

ตรวจสอบและควบคุมความชื้น/อุณหภูมิในเรือนกระจกอัตโนมัติ

👃 เครื่องตรวจจับกลิ่นอัจฉริยะ

ฝึกโมเดล AI เพื่อตรวจจับกลิ่นเฉพาะ (เช่น กลิ่นไหม้, กลิ่นสารเคมี)

🏊 ระบบตรวจสอบคุณภาพน้ำ

ใช้ BME688 ตรวจสอบความชื้นและก๊าีรอบๆ แหล่งน้ำ

🚗 Air Quality Logger สำหรับรถยนต์

บันทึกข้อมูลคุณภาพอากาศระหว่างเดินทาง วิเคราะห์เส้นทางที่มีมลพิษ

🔧 การแก้ปัญหาที่พบบ่อย

ไม่พบเซนเซอร์ (Sensor not found)

  • • ตรวจสอบการต่อสาย (SCL/SDA)
  • • ลองเปลี่ยน I2C address (0x77 → 0x76)
  • • ตรวจสอบว่าใช้ 3.3V (ไม่ใช่ 5V)
  • • ลองใช้ pull-up resistors (4.7kΩ)

ค่าก๊าซผิดปกติ (Gas reading incorrect)

  • • ต้องให้เวลาเซนเซอร์ warm-up (10-30 นาที)
  • • อย่าสัมผัสเซนเซอร์โดยตรง
  • • หลีกเลี่ยงการสัมผัสกับแสงแดดโดยตรง
  • • ปรับค่า Gas Heater temperature

ค่าอ่านไม่แม่นยำ

  • • Calibrate เซนเซอร์ (ดูใน datasheet)
  • • ปรับ oversampling ให้เหมาะสม
  • • อ่านค่าเฉลี่ยหลายๆ ครั้ง

อ่านค่าได้ครั้งเดียวแล้วหยุด

  • • BME688 ต้องใช้เวลาในการวัดก๊าี (200-300ms)
  • • เพิ่ม delay ระหว่างการอ่าน
  • • ใช้ performReading() ทุกครั้ง

🎉 สรุป

ในบทความนี้เราได้เรียนรู้:

  • ภาพรวมและคุณสมบัติของ BME688 Gas Sensor
  • การต่อสายและติดตั้ง Library
  • โค้ดพื้นฐานสำหรับอ่านค่าเซนเซอร์
  • การตรวจจับก๊าี VOC และคำนวณ IAQ
  • การเชื่อมต่อกับ CynoIoT Platform

บทความหน้า: จะมาดูโปรเจกต์ระบบตรวจจับก๊าีแบบ Real-time พร้อม Dashboard บน CynoIoT!

C
CynoIoT

แพลตฟอร์ม IoT ครบวงจรสำหรับคนไทย ช่วยให้คุณสร้างโปรเจกต์ IoT ได้ง่ายๆ ด้วยเซนเซอร์คุณภาพสูงและระบบจัดการที่ใช้งานง่าย

ติดตามเรา

© 2026 CynoIoT. All rights reserved.