สร้างสถานีตรวจวัดอากาศ DIY ด้วย Arduino Uno R4 WiFi และ BME280

เรียนรู้วิธีสร้างสถานีตรวจวัดอากาศแบบเชื่อมต่ออินเทอร์เน็ต วัดอุณหภูมิ ความชื้น และความดันอากาศ พร้อมส่งข้อมูลแบบ real-time ไปยัง CynoIoT Platform

25 มีนาคม 2026 15 นาที ระดับเริ่มต้น

🎯 ภาพรวมโปรเจกต์

สถานีตรวจวัดอากาศ DIY นี้เป็นโปรเจกต์ IoT เริ่มต้นที่เหมาะสำหรับผู้เริ่มต้น ใช้ Arduino Uno R4 WiFi ซึ่งเป็นไมโครคอนโทรลเลอร์รุ่นล่าสุดจาก Arduino ที่มาพร้อมกับความสามารถในการเชื่อมต่อ WiFi ในตัว ร่วมกับเซ็นเซอร์ BME280 ที่สามารถวัดอุณหภูมิ ความชื้น และความดันอากาศได้อย่างแม่นยำ

✨ จุดเด่นของโปรเจกต์

  • วัดอุณหภูมิแม่นยำ ±1°C
  • วัดความชื้นสัมพัทธ์ ±3%
  • วัดความดันอากาศ ±1 hPa
  • เชื่อมต่อ WiFi ส่งข้อมูล real-time
  • ใช้งานร่วมกับ CynoIoT Platform
  • ติดตั้งง่าย ไม่ต้องบัดกรี

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

Hardware

อุปกรณ์ รายละเอียด ราคาโดยประมาณ
Arduino Uno R4 WiFi ไมโครคอนโทรลเลอร์ + WiFi ~฿850
BME280 Sensor เซ็นเซอร์วัดอุณหภูมิ/ความชื้น/ความดัน ~฿180
Jumper Wires สายเชื่อมต่อ (M-F) ~฿40
Breadboard บอร์ดทดลอง (ไม่บังคับ) ~฿50
USB Cable สาย USB Type-C ~฿60

Software

  • Arduino IDE 2.x (ฟรี)
  • Adafruit BME280 Library
  • Arduino Uno R4 WiFi Board Package
  • CynoIoT Account (ฟรี)

💡 เคล็ดลับ: Arduino Uno R4 WiFi ใช้ชิป Renesas RA4M1 32-bit ARM Cortex-M4 ซึ่งเร็วกว่า Arduino Uno รุ่นเดิม (8-bit) ถึง 16 เท่า!

🔌 การต่อวงจร

การต่อ BME280 เข้ากับ Arduino Uno R4 WiFi นั้นง่ายมาก เพราะใช้通信 protocol I2C ซึ่งต้องการเพียง 2 สายเท่านั้น

BME280 Pin Arduino Uno R4 WiFi Pin สีสาย
VIN (3.3V) 3.3V แดง
GND GND ดำ
SCL SCL (D3) น้ำเงิน
SDA SDA (D2) เขียว

📌 หมายเหตุสำคัญ

  • ⚠️ ต้องใช้ 3.3V เท่านั้น ห้ามต่อ 5V เด็ดขาดเพราะจะทำให้เซ็นเซอร์เสียหาย
  • BME280 บางรุ่นอาจมี ADDR pin เพื่อเลือก I2C address (0x76 หรือ 0x77)
  • ถ้าใช้ BME280 breakout board ที่มี voltage regulator สามารถต่อ 3.3V หรือ 5V ก็ได้

💻 การติดตั้งซอฟต์แวร์

ขั้นตอนที่ 1: ติดตั้ง Arduino IDE

  1. 1

    ดาวน์โหลด Arduino IDE 2.x

    ไปที่ arduino.cc/en/software และดาวน์โหลดเวอร์ชันสำหรับระบบปฏิบัติการของคุณ

  2. 2

    ติดตั้งและเปิด Arduino IDE

    ติดตั้งตามปกติและเปิดโปรแกรม

ขั้นตอนที่ 2: เพิ่ม Board Package

  1. 1

    เปิด Board Manager

    ไปที่ Tools → Board → Boards Manager

  2. 2

    ค้นหาและติดตั้ง

    พิมพ์ arduino uno r4 แล้วกดติดตั้ง "Arduino Uno R4 WiFi Boards" จาก Arduino

ขั้นตอนที่ 3: ติดตั้ง BME280 Library

  1. 1

    เปิด Library Manager

    ไปที่ Tools → Manage Libraries

  2. 2

    ค้นหาและติดตั้ง

    พิมพ์ adafruit bme280 แล้วกดติดตั้งจาก Adafruit

  3. 3

    ติดตั้ง dependencies

    ติดตั้ง Adafruit Unified Sensor ด้วย (ถ้า Arduino IDE ถาม)

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

นี่คือโค้ดสำหรับอ่านค่าจาก BME280 และแสดงผลทาง Serial Monitor พร้อมคำอธิบายภาษาไทยทุกบรรทัด

// สถานีตรวจวัดอากาศ Arduino Uno R4 WiFi + BME280
// เชื่อมต่อ CynoIoT Platform
// 25 มีนาคม 2026

#include <Wire.h>              // ไลบรารีสำหรับ I2C communication
#include <Adafruit_Sensor.h>     // ไลบรารีเซ็นเซอร์จาก Adafruit
#include <Adafruit_BME280.h>    // ไลบรารี BME280

#include <WiFiS3.h>             // ไลบรารี WiFi สำหรับ Arduino Uno R4 WiFi

// ========== การตั้งค่า WiFi ==========
const char* ssid = "YOUR_WIFI_SSID";        // ชื่อ WiFi ของคุณ
const char* password = "YOUR_WIFI_PASSWORD"; // รหัสผ่าน WiFi

// ========== การตั้งค่า CynoIoT ==========
const char* cynoiotServer = "api.cynoiot.com";
const int cynoiotPort = 80;
const char* cynoiotApiKey = "YOUR_CYNOIOT_API_KEY"; // API Key จาก CynoIoT

// ========== สร้างออบเจ็กต์ ==========
Adafruit_BME280 bme;  // สร้างออบเจ็กต์ BME280
WiFiClient client;    // สร้างออบเจ็กต์ WiFi client

// ตัวแปรสำหรับจับเวลา
unsigned long lastTime = 0;
const long sendDataInterval = 5000;  // ส่งข้อมูลทุก 5 วินาที (5000 ms)

void setup() {
  // เริ่มต้น Serial communication
  Serial.begin(9600);
  
  // รอให้ Serial พร้อม (เฉพาะตอนเชื่อมต่อ USB)
  while (!Serial && millis() < 3000);
  
  Serial.println(F("===================================="));
  Serial.println(F("  สถานีตรวจวัดอากาศ Arduino Uno R4 WiFi"));
  Serial.println(F("  BME280 Weather Station"));
  Serial.println(F("====================================\n"));

  // เริ่มต้นเซ็นเซอร์ BME280
  Serial.print(F("กำลังเริ่มต้น BME280..."));
  
  // BME280 ใช้ I2C address 0x77 (หรือ 0x76 บางรุ่น)
  if (!bme.begin(0x77)) {
    // ถ้าเริ่มต้นไม่สำเร็จ ลอง address อื่น
    if (!bme.begin(0x76)) {
      Serial.println(F(" ไม่พบเซ็นเซอร์ BME280!"));
      Serial.println(F("ตรวจสอบการต่อสาย"));
      while (1) delay(10);  // หยุดทำงาน
    }
  }
  
  Serial.println(F(" เริ่มต้นสำเร็จ!\n"));

  // เชื่อมต่อ WiFi
  connectToWiFi();

  Serial.println(F("\nเริ่มต้นสถานีตรวจวัดอากาศ..."));
  Serial.println(F("------------------------------------\n"));
}

void loop() {
  // ตรวจสอบเวลาสำหรับส่งข้อมูล
  unsigned long currentTime = millis();
  
  if (currentTime - lastTime >= sendDataInterval) {
    lastTime = currentTime;
    
    // อ่านค่าจากเซ็นเซอร์
    readSensorData();
    
    // ส่งข้อมูลไป CynoIoT
    sendToCynoIoT();
  }
  
  // รอสักครู่ก่อนวนลูปใหม่
  delay(100);
}

// ========== ฟังก์ชันเชื่อมต่อ WiFi ==========
void connectToWiFi() {
  Serial.print(F("กำลังเชื่อมต่อ WiFi: "));
  Serial.print(ssid);

  // เริ่มต้น WiFi ในโหมด Station
  WiFi.begin(ssid, password);

  // รอจนกว่าจะเชื่อมต่อสำเร็จ
  int attempts = 0;
  while (WiFi.status() != WL_CONNECTED && attempts < 20) {
    delay(500);
    Serial.print(F("."));
    attempts++;
  }

  // ตรวจสอบสถานะการเชื่อมต่อ
  if (WiFi.status() == WL_CONNECTED) {
    Serial.println(F("\n✓ เชื่อมต่อ WiFi สำเร็จ!"));
    Serial.print(F("  IP Address: "));
    Serial.println(WiFi.localIP());
    Serial.print(F("  Signal Strength: "));
    Serial.print(WiFi.RSSI());
    Serial.println(F(" dBm"));
  } else {
    Serial.println(F("\n✗ ไม่สามารถเชื่อมต่อ WiFi ได้"));
    Serial.println(F("  ตรวจสอบชื่อและรหัสผ่าน WiFi"));
  }
  
  Serial.println();
}

// ========== ฟังก์ชันอ่านค่าเซ็นเซอร์ ==========
void readSensorData() {
  Serial.println(F("---------- ข้อมูลล่าสุด ----------"));

  // อ่านค่าอุณหภูมิ (เซลเซียส)
  float temperature = bme.readTemperature();
  Serial.print(F("🌡️  อุณหภูมิ: "));
  Serial.print(temperature, 1);  // แสดง 1 ตำแหน่งทศนิยม
  Serial.println(F(" °C"));

  // อ่านค่าความชื้นสัมพัทธ์ (เปอร์เซ็นต์)
  float humidity = bme.readHumidity();
  Serial.print(F("💧 ความชื้น: "));
  Serial.print(humidity, 1);
  Serial.println(F(" %"));

  // อ่านค่าความดันอากาศ (เฮกโตปาสกาล)
  float pressure = bme.readPressure() / 100.0F;  // แปลงจาก Pa เป็น hPa
  Serial.print(F("🔵 ความดัน: "));
  Serial.print(pressure, 1);
  Serial.println(F(" hPa"));

  // คำนวณค่าความสูงจากความดัน (เมตร)
  float altitude = bme.readAltitude(1013.25);  // ใช้ความดันมาตรฐานที่ระดับน้ำทะเล
  Serial.print(F("⛰️  ความสูง: "));
  Serial.print(altitude, 1);
  Serial.println(F(" ม.รทก."));

  Serial.println(F("------------------------------------"));
}

// ========== ฟังก์ชันส่งข้อมูลไป CynoIoT ==========
void sendToCynoIoT() {
  // ตรวจสอบว่าเชื่อมต่อ WiFi อยู่หรือไม่
  if (WiFi.status() != WL_CONNECTED) {
    Serial.println(F("⚠️  WiFi ไม่ได้เชื่อมต่ออยู่ กำลังเชื่อมต่อใหม่..."));
    connectToWiFi();
    return;
  }

  // อ่านค่าเซ็นเซอร์อีกครั้งเพื่อส่งข้อมูลล่าสุด
  float temperature = bme.readTemperature();
  float humidity = bme.readHumidity();
  float pressure = bme.readPressure() / 100.0F;

  // เชื่อมต่อไปยัง CynoIoT Server
  Serial.print(F("กำลังเชื่อมต่อ CynoIoT..."));
  
  if (client.connect(cynoiotServer, cynoiotPort)) {
    Serial.println(F(" สำเร็จ!"));

    // สร้าง JSON payload
    String payload = "{";
    payload += "\"temperature\":" + String(temperature, 1) + ",";
    payload += "\"humidity\":" + String(humidity, 1) + ",";
    payload += "\"pressure\":" + String(pressure, 1) + ",";
    payload += "\"device\":\"arduino-uno-r4-wifi\"";
    payload += "}";

    // ส่ง HTTP POST request
    client.println("POST /api/v1/sensor-data HTTP/1.1");
    client.println("Host: " + String(cynoiotServer));
    client.println("Content-Type: application/json");
    client.println("X-API-Key: " + String(cynoiotApiKey));
    client.println("Content-Length: " + String(payload.length()));
    client.println("Connection: close");
    client.println();
    client.println(payload);

    Serial.print(F("📤 ส่งข้อมูล: "));
    Serial.println(payload);

    // รอ response จาก server (เพื่อการ debug)
    unsigned long timeout = millis();
    while (client.available() == 0) {
      if (millis() - timeout > 5000) {
        Serial.println(F("⏱️  หมดเวลาคอบ response"));
        client.stop();
        return;
      }
    }

    // อ่าน response
    while (client.available()) {
      String line = client.readStringUntil('\r');
      Serial.print(line);
    }

    client.stop();
    Serial.println(F("\n✓ ส่งข้อมูลสำเร็จ!"));
  } else {
    Serial.println(F(" ล้มเหลว!"));
    Serial.println(F("⚠️  ไม่สามารถเชื่อมต่อ CynoIoT Server ได้"));
  }

  Serial.println();
}

✅ การใช้งาน

  1. แก้ไข WiFi credentials (บรรทัด 16-17)
  2. แก้ไข CynoIoT API Key (บรรทัด 22)
  3. อัปโหลดโค้ดไปยัง Arduino
  4. เปิด Serial Monitor (115200 baud)
  5. ดูผลลัพธ์และยืนยันการเชื่อมต่อ CynoIoT

🌐 การเชื่อมต่อ CynoIoT Platform

CynoIoT Platform ช่วยให้คุณเก็บข้อมูล แสดงผล และวิเคราะห์ข้อมูลจากเซ็นเซอร์ได้อย่างง่ายดาย

ขั้นตอนที่ 1: สมัครบัญชี CynoIoT

  1. 1

    ไปที่ CynoIoT

    เข้าไปที่ cynoiot.com และสมัครใช้งานฟรี

  2. 2

    สร้างโปรเจกต์ใหม่

    สร้างโปรเจกต์สำหรับสถานีตรวจวัดอากาศ

  3. 3

    รับ API Key

    คัดลอก API Key จากหน้าตั้งค่าโปรเจกต์

ขั้นตอนที่ 2: สร้าง Dashboard

  1. 1

    เพิ่ม Widget

    เพิ่ม Gauge chart สำหรับอุณหภูมิ ความชื้น และความดัน

  2. 2

    ตั้งค่า Alert

    ตั้งค่าการแจ้งเตือนเมื่ออุณหภูมิสูงเกินกว่าที่กำหนด

  3. 3

    ดูข้อมูลแบบ Real-time

    ดูข้อมูลล่าสุดและกราฟประวัติ

💎 ฟีเจอร์ขั้นสูง

  • • ส่งการแจ้งเตือนไปยัง LINE / Telegram
  • • ส่งออกข้อมูลเป็น CSV / Excel
  • • เชื่อมต่อกับ IFTTT / Zapier
  • • แชทด้วย AI สำหรับวิเคราะห์ข้อมูล

✅ การทดสอบ

ขั้นตอนที่ 1: ทดสอบเซ็นเซอร์

  1. เปิด Serial Monitor (Tools → Serial Monitor)
  2. ตั้ง baud rate เป็น 9600
  3. ดูผลลัพธ์ — ควรแสดงอุณหภูมิ ความชื้น และความดัน
  4. ลมเป่าเซ็นเซอร์เพื่อดูการเปลี่ยนแปลงของค่า

ขั้นตอนที่ 2: ทดสอบ WiFi

  1. ตรวจสอบข้อความ "เชื่อมต่อ WiFi สำเร็จ!"
  2. บันทึก IP Address ที่ได้
  3. ping IP address จากคอมพิวเตอร์
  4. ตรวจสอบความแรงสัญญาณ (dBm)

ขั้นตอนที่ 3: ทดสอบ CynoIoT

  1. ตรวจสอบข้อความ "ส่งข้อมูลสำเร็จ!"
  2. เข้าไปที่ Dashboard บน CynoIoT
  3. ตรวจสอบว่าข้อมูลปรากฏหรือไม่
  4. ดูกราฟและประวัติข้อมูล

🎯 ค่าที่คาดหวัง

  • • อุณหภูมิ: 25-35°C (ภายในห้อง)
  • • ความชื้น: 40-80% RH
  • • ความดัน: ~1013 hPa (ความดันมาตรฐาน)
  • • WiFi สัญญาณ: -30 ถึง -80 dBm

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

1 ไม่พบเซ็นเซอร์ BME280

อาการ:

แสดงข้อความ "ไม่พบเซ็นเซอร์ BME280!"

สาเหตุที่เป็นไปได้:

  • ต่อสายไม่ถูกต้อง
  • เซ็นเซอร์เสีย
  • I2C address ไม่ถูกต้อง
  • ต่อ 5V แทน 3.3V (เซ็นเซอร์อาจเสีย)

วิธีแก้ไข:

  1. ตรวจสอบการต่อสายทุกขา
  2. ลองเปลี่ยน I2C address (0x76 หรือ 0x77)
  3. ใช้สาย jumper สายใหม่
  4. ลองเซ็นเซอร์ตัวอื่น

2 เชื่อมต่อ WiFi ไม่ได้

อาการ:

แสดงข้อความ "ไม่สามารถเชื่อมต่อ WiFi ได้"

สาเหตุที่เป็นไปได้:

  • ชื่อหรือรหัสผ่านผิด
  • ระยะห่างจาก Router ไกลเกินไป
  • WiFi รองรับเฉพาะ 2.4GHz
  • มีการ block MAC address

วิธีแก้ไข:

  1. ตรวจสอบชื่อและรหัสผ่าน WiFi
  2. ย้าย Arduino ให้ใกล้ Router
  3. ตรวจสอบว่า Router รองรับ 2.4GHz
  4. ปิด-เปิด WiFi Router อีกครั้ง

3 ส่งข้อมูลไป CynoIoT ไม่ได้

อาการ:

แสดงข้อความ "ไม่สามารถเชื่อมต่อ CynoIoT Server ได้"

สาเหตุที่เป็นไปได้:

  • API Key ผิด
  • ไม่ได้เชื่อมต่ออินเทอร์เน็ต
  • Server ปิดปรับปรุง
  • Firewall บล็อกการเชื่อมต่อ

วิธีแก้ไข:

  1. ตรวจสอบ API Key
  2. ตรวจสอบสถานะการเชื่อมต่ออินเทอร์เน็ต
  3. ลอง ping ไปที่ api.cynoiot.com
  4. ติดต่อฝ่ายสนับสนุน CynoIoT

4 ค่าอุณหภูมิ/ความชื้นผิดปกติ

อาการ:

ค่าที่ได้สูงหรือต่ำผิดปกติมาก

สาเหตุที่เป็นไปได้:

  • เซ็นเซอร์ร้อนเกินไป (จาก Arduino)
  • แสงแดดส่องโดนตรงๆ
  • เซ็นเซอร์อยู่ใกล้แหล่งความร้อน
  • เซ็นเซอร์ต้องการสอบเทียน

วิธีแก้ไข:

  1. ย้ายเซ็นเซอร์ห่างจาก Arduino
  2. ใช้สายยาวขึ้น
  3. หลีกเลี่ยงแสงแดดโดยตรง
  4. สอบเทียนเซ็นเซอร์หากจำเป็น

🎉 สรุป

ยินดีด้วย! คุณเพิ่งสร้างสถานีตรวจวัดอากาศ IoT ด้วย Arduino Uno R4 WiFi และ BME280 สามารถวัดอุณหภูมิ ความชื้น และความดันอากาศได้อย่างแม่นยำ และส่งข้อมูลไปยัง CynoIoT Platform เพื่อเก็บและวิเคราะห์ข้อมูลได้

🚀 แนวคิดต่อยอด

เพิ่มเซ็นเซอร์

  • • Rain sensor (เซ็นเซอร์ฝน)
  • • UV sensor (เซ็นเซอร์แสง UV)
  • • Wind sensor (เซ็นเซอร์ลม)
  • • Soil moisture (ความชื้นในดิน)

ฟีเจอร์เพิ่มเติม

  • • หน้าจอแสดงผล (OLED)
  • • แบตเตอรี่สำรอง
  • • กล่องกันฝุ่นน้ำ (IP65)
  • • Solar panel ชาร์จ

อัตโนมัติฉลาด

  • • เปิดปิดพัดลมอัตโนมัติ
  • • รดน้ำต้นไม้อัตโนมัติ
  • • ปิดม่านบังแดด
  • • แจ้งเตือน LINE/Telegram

โปรเจกต์ที่เกี่ยวข้อง

  • • บอตรดน้ำอัตโนมัติ
  • • Smart Home Controller
  • • ระบบควบคุมโรงเรือน
  • • Air Quality Monitor
CynoIoT LogoCynoIoT

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

ช่องทางติดตาม

© 2026 CynoIoT. All rights reserved.