ESP32 + SDS011 วัด PM2.5/PM10 แล้วส่งขึ้น Cacti เก็บกราฟย้อนหลัง

อยากวัด PM2.5 รอบบ้านเอง? ESP32 + SDS011 ส่งค่าขึ้นกราฟได้ทุก 5 นาที

เวลาพูดถึง PM2.5 เรามักเปิดแอปแล้วดูค่าจากสถานีตรวจวัดใกล้บ้าน แต่ถ้าอยากลองวัดสภาพอากาศ ในพื้นที่ของตัวเองแบบ Maker ล่ะ?

โปรเจกต์ Air Pollution Monitoring ของผู้ใช้ Hackaday.io ชื่อ niriho ใช้ ESP32 + SDS011 ทำ Sensor Node สำหรับอ่าน PM2.5 และ PM10, แสดงค่าบน OLED, ส่งข้อมูลผ่าน Wi-Fi ไปยัง Server และใช้ Cacti ทำกราฟย้อนหลัง

จุดน่าสนใจคือมันไม่ใช่แค่ “ต่อ Sensor แล้ว Serial Print” แต่เป็น Pipeline ครบตั้งแต่ Sensor ไปจนถึง Historical Dashboard พร้อม Sleep Cycle เพื่อไม่ให้ SDS011 ทำงานตลอดเวลา

เครื่องวัด PM2.5 และ PM10 ที่ประกอบจาก ESP32 SDS011 และ OLED
ชุด Air Pollution Monitor จากโปรเจกต์ต้นฉบับ ประกอบด้วย ESP32, SDS011, OLED และชุดจ่ายไฟ ก่อนส่งข้อมูลไปเก็บบน Server
Key Takeaways
  • ESP32 อ่านค่า PM2.5 และ PM10 จาก SDS011 ผ่าน UART
  • OLED ใช้แสดงค่าฝุ่นและสถานะของระบบในเครื่อง
  • ESP32 เชื่อม Wi-Fi และ Sync เวลาผ่าน NTP
  • Code ใช้ Flow: Wake SDS011 → Read → Upload → Sleep
  • ข้อมูลถูกส่งด้วย HTTP GET ไปยัง IIS/.NET Server
  • Cacti ใช้เก็บและสร้างกราฟย้อนหลัง
  • Instructions เดิมสลับ SDA/SCL ของ OLED กับ Source Code ต้องระวัง
  • ระบบนี้เหมาะกับ DIY/Trend Monitoring ไม่ควรตีความเป็น Regulatory-grade Monitor
Controller ESP32
Particle Sensor SDS011
Measurement PM2.5 + PM10
Dashboard Cacti

โปรเจกต์นี้ทำอะไร?

เป้าหมายของโปรเจกต์คือ สร้าง Node สำหรับ Monitor ฝุ่น PM2.5 และ PM10 แล้วเก็บข้อมูลเป็นกราฟย้อนหลัง แทนการอ่านค่าจาก Sensor เฉพาะเวลาที่เสียบคอมพิวเตอร์

แผนผังการทำงาน ESP32 SDS011 OLED และ Cacti server
Workflow จาก Project ต้นฉบับ: ESP32 อ่าน SDS011, แสดงบน OLED, ต่อ Local Network และส่งข้อมูลไปให้ Cacti Server

ระบบจึงแบ่งได้เป็นสามส่วน:

Sensor Node

ESP32 + SDS011 + OLED สำหรับอ่านและแสดงค่าฝุ่น

Data Transport

Wi-Fi + HTTP GET สำหรับส่งค่าจาก Sensor ไป Server

History

IIS/.NET + Text Files + Cacti สำหรับเก็บและสร้างกราฟย้อนหลัง

SDS011 วัด PM2.5 และ PM10 ยังไง?

SDS011 particulate matter sensor สำหรับวัด PM2.5 และ PM10
SDS011 เป็น Particle Sensor ที่โปรเจกต์ใช้วัด PM2.5 และ PM10 ก่อนส่งค่าผ่าน UART ไปยัง ESP32

SDS011 ใช้หลักการ Optical Scattering: มีแหล่งกำเนิดแสงภายใน Sensor และตรวจแสงที่กระเจิงจากอนุภาคในอากาศ เพื่อนำมาประเมิน Particulate Matter

รายการ ข้อมูลจาก SDS011 datasheet-derived reference
Output PM2.5 และ PM10
Measurement Range 0.0–999.9 µg/m³
Input Voltage 5 V
Response Time 1 second
Serial Output Frequency 1 ครั้งต่อวินาที
Relative Error 10% ตาม Specification ที่ Source อ้างอิง
Specification ไม่เท่ากับ Reference-grade Measurement
Sensor ราคาประหยัดเหมาะกับการดู Trend และการทดลองแบบ Maker แต่ไม่ควรสรุปว่าให้ผลเทียบเท่าสถานีตรวจวัดมาตรฐาน โดยไม่มี Calibration / Validation เพิ่มเติม
SDS011 พร้อมสายและ USB adapter จากโปรเจกต์ต้นฉบับ
ชุด SDS011 พร้อมสายและ Adapter ที่ผู้สร้างใช้ในโปรเจกต์ต้นฉบับ

Architecture ตั้งแต่ Sensor ถึง Cacti

Data Flow แบบย่อ

SDS011
PM2.5 / PM10
→
ESP32
UART + OLED + Wi-Fi
→
IIS / .NET
HTTP Endpoint
→
Cacti
Historical Graph

ESP32 ไม่ได้ทำ Data Logging ระยะยาวเอง แต่ทำหน้าที่เป็น Sensor Node: อ่านค่า, ใส่ข้อมูลลง Display, แล้ว Push Measurement ไปยัง Server

ต้องใช้อุปกรณ์อะไรบ้าง?

อุปกรณ์ หน้าที่
ESP32 Controller, Wi-Fi, NTP และส่งข้อมูล
SDS011 วัด PM2.5 / PM10
OLED แสดง Measurement และสถานะระบบ
Power Cables / Supply จ่ายไฟให้ชุดทดลอง
Windows Server รัน IIS/.NET Data Collector และ Cacti ตาม Build เดิม
ESP32 development board ที่ใช้ใน Air Pollution Monitoring Project
ESP32 Development Board ที่ผู้สร้างใช้เป็น Controller หลักของระบบ
OLED display ที่ใช้ร่วมกับ ESP32
OLED สำหรับแสดง PM2.5, PM10, เวลา และสถานะระบบ
ESP32 board จากรายการอุปกรณ์ของโปรเจกต์
ESP32 Board ใน Build ต้นฉบับ; ผู้สร้างเตือนว่า Board Variant อาจต่างกัน
การต่อสายจ่ายไฟในชุด ESP32 SDS011
ภาพการต่อชุดจ่ายไฟจาก Instructions ต้นฉบับ

Wiring ESP32 กับ SDS011 ผ่าน UART

การต่อ UART ระหว่าง SDS011 กับ ESP32 TX2 และ RX2
Instructions ต้นฉบับให้ต่อ SDS011 RX เข้ากับ ESP32 TX2 และ SDS011 TX เข้ากับ ESP32 RX2
SDS011 ESP32 ตามต้นฉบับ
RX TX2
TX RX2
Power 5 V ตาม SDS011 Specification
Ground Common GND
Source ไม่ได้ล็อก GPIO Number ของ RX2/TX2 สำหรับ Board ทุก Variant
Code ใช้ HardwareSerial port(2) แต่ ESP32 Board แต่ละรุ่นอาจมี Pin Mapping ต่างกัน จึงควรตรวจ Pinout ของ Board ที่ใช้จริง แทนการเดา GPIO จากชื่อ RX2/TX2

OLED Wiring มี Conflict ใน Source ต้องระวัง

ภาพการต่อ OLED กับ ESP32 จาก Air Pollution Monitoring Project
ภาพ Wiring OLED จาก Instructions ต้นฉบับ แต่ข้อความกำกับ SDA/SCL ขัดกับ Source Code ที่ใช้งานจริง

Instructions ปี 2019 เขียนว่า:

  • SCL → D21
  • SDA → D22

แต่ Code ใช้:

SSD1306Wire display(0x3c, 21, 22);

และ Constructor ของ ThingPulse SSD1306Wire เรียง Parameter เป็น:

address, sda, scl

ดังนั้น Wiring ที่สอดคล้องกับ Code คือ:
  • OLED SDA → GPIO21
  • OLED SCL → GPIO22
จุดนี้เป็น Conflict ใน Source เดิม จึงไม่ควร Copy Wiring Text ปี 2019 โดยไม่ตรวจ Code

VCC ของ OLED ใน Build ต้นฉบับถูกต่อกับ 3 V ของ ESP32 และ Ground ต่อร่วมกัน

Arduino ESP32 Setup: อะไรจากปี 2019 ที่ควรอัปเดต?

Build Instructions เดิม ใช้ Arduino IDE และเพิ่ม ESP32 ผ่าน Boards Manager ซึ่ง Concept ยังใช้ได้

แต่ URL Package Index ใน Tutorial ปี 2019 เป็น URL รุ่นเก่า ขณะที่ Official Espressif Documentation ปัจจุบัน ใช้ Stable Package Index ชุดใหม่

แนวทางปี 2026
เปิด Official Arduino-ESP32 Installation Documentation แล้วใช้ Stable Release Link ที่ Espressif ระบุในเอกสารปัจจุบัน ก่อนติดตั้งแพ็กเกจผ่าน Boards Manager

หลังติดตั้งให้เลือก Board ที่ตรงกับ ESP32 Hardware จริง ไม่ควรเลือก “ESP32 Pico Kit” เพียงเพราะ Tutorial เก่าเคยใช้ชื่อดังกล่าว

Arduino IDE Preferences จาก Tutorial ESP32 ปี 2019
หน้าจอ Preferences จาก Tutorial ต้นฉบับปี 2019; UI ของ Arduino IDE รุ่นใหม่อาจแตกต่างจากภาพนี้
ช่อง Additional Board Manager URLs ใน Arduino IDE รุ่นที่ใช้ในปี 2019
ตำแหน่ง Additional Board Manager URLs ใน Arduino IDE รุ่นที่ผู้สร้างใช้
Arduino IDE Boards Manager จาก Tutorial ปี 2019
ขั้นตอนเปิด Boards Manager จาก Tutorial เดิม
การติดตั้ง ESP32 by Espressif Systems ใน Arduino Boards Manager
ผู้สร้างติดตั้ง ESP32 Platform ผ่าน Boards Manager

ทำไมผู้สร้างต้องแก้ SDS011 Sleep Library?

Instructions ระบุชัดว่า SDS011 Library ที่ผู้สร้างใช้ในตอนนั้น มีปัญหากับ Sleep Function

ผู้สร้างจึงแก้ Function และแนบ Library Pack ที่แก้ไว้แล้วเป็น libraries.rar ในหน้า Hackaday.io

อย่าสรุปว่า SDS011 Library ทุกตัวใช้แทนกันได้ทันที
Original Firmware ถูกพัฒนาคู่กับ Library ที่ผู้สร้างแก้ Sleep Function ไว้ หากเปลี่ยน Library หรือ Version ต้องตรวจ API และ Sleep/Wake Behaviour ใหม่

หนึ่งรอบของ Firmware ทำอะไรบ้าง?

1 Connect Wi-Fi
ESP32 เชื่อม Network ที่กำหนดไว้
2 Sync Time
ใช้ NTP Client ดึงเวลา
3 Wake SDS011
ปลุก Sensor ก่อนเริ่มอ่านค่า
4 Read PM2.5 / PM10
อ่าน Measurement ผ่าน SDS011 Library
5 Upload
ส่งค่า PM10 และ PM2.5 ไปยัง HTTP Endpoint
6 OLED Update
แสดงค่าและเวลาในเครื่อง
7 Sleep SDS011
สั่ง Sensor เข้าสู่ Sleep
8 Wait
Firmware ต้นฉบับรอประมาณ 5 นาทีแล้วเริ่มรอบใหม่
Code ยังมี Restart Workaround
Source Code Restart ESP32 หลังทำ Update ครบจำนวนหนึ่งเพราะผู้สร้างพบปัญหาเครื่องค้าง จุดนี้เป็น Workaround ของ Build ต้นฉบับ ไม่ใช่ Requirement ปกติของ ESP32 หรือ SDS011

ดู Code Wake → Read → Sleep จาก Project จริง

Snippet ด้านล่างตัดมาจาก esp32_sds011_V2.ino ใน GitHub ของผู้สร้าง เพื่อให้เห็น Core Sensor Flow โดยไม่คัดลอก Firmware ทั้งไฟล์

SDS011 Wake / Read / Sleep
my_sds.wakeup();
delay(2500);

err = my_sds.read(&p25, &p10);

/* Project sends values to its remote server here */

my_sds.sleep();
Snippet นี้ไม่ใช่ Firmware ฉบับเต็ม
Wi-Fi, NTP, HTTP, Error Handling, OLED และ Delay Logic อยู่ใน Source Code เต็มบน GitHub

ส่ง PM2.5/PM10 ไป Server ผ่าน HTTP GET

Firmware ต้นฉบับ สร้าง HTTP Request แยกสำหรับ:

  • PM10
  • PM2.5

แล้วเรียก WebService ให้เขียน Measurement ลง File ที่ Server

Upload Flow

PM2.5
PM10
→
ESP32
HTTPClient
→
WebService
CreateFile
→
Sensor Files
Server IP ใน Code ต้นฉบับเป็นค่าตัวอย่างที่ผู้สร้างระบุให้เปลี่ยน
ไม่ควร Copy Address/Port ใน Firmware เดิม ไปใช้เป็น Server Endpoint จริงโดยตรง

IIS / .NET Server ทำหน้าที่อะไร?

Backend ของ Project เดิม ไม่ได้ใช้ Cloud IoT Platform แต่ใช้ Windows Server ที่ประกอบด้วย:

  • IIS
  • .NET WebService
  • Text Files
  • PowerShell
  • Cacti

WebService รับ Filename และ Content จาก HTTP Request แล้วเขียน Measurement ลง Directory ที่ Cacti จะนำไปใช้ต่อ

สิทธิ์ Folder เป็นส่วนหนึ่งของ Build
Instructions เดิมระบุว่า IIS User ต้องมี Write Permission ใน Destination Folder ไม่เช่นนั้น WebService จะไม่สามารถสร้างหรืออัปเดตไฟล์ได้

ทำไม Sensor Offline แล้ว PowerShell เขียนค่า 0?

Project มี PowerShell Script ตรวจ Sensor Files และหาก File ไม่ถูก Update ภายในประมาณ 15 นาที Script จะเขียน 0 ลงไป

จุดประสงค์ของผู้สร้างคือ ไม่อยากให้กราฟเป็นเส้นตรงเดิม จนดูเหมือน Sensor ยังทำงานอยู่

แต่ 0 ตรงนี้คือ Failure Marker ไม่ใช่ Measurement จริง
ถ้าเอาข้อมูลไปวิเคราะห์ต่อ ต้องแยกให้ได้ว่า PM2.5 = 0 มาจาก Sensor จริง หรือถูก Script เขียนแทนเพราะ Sensor Offline

สำหรับระบบ Data Logging ใหม่ การใช้ State เช่น Missing / Stale / Offline แยกจาก Measurement จะลดความเสี่ยงในการตีความผิด แต่แนวทางนี้เป็นข้อเสนอด้าน Data Quality ไม่ใช่สิ่งที่ Source เดิม Implement ไว้

สร้างกราฟ PM2.5/PM10 ด้วย Cacti

Workflow ฝั่ง Cacti ใน Tutorial แบ่งเป็นขั้นหลัก ๆ:

  1. สร้าง Data Input Method สำหรับ PM2.5 และ PM10
  2. สร้าง Data Source Template
  3. สร้าง Graph Template
  4. สร้าง Graph สำหรับ Sensor
  5. ชี้ Data Source ไปยัง File ที่ WebService เขียนไว้
  6. รอ Cacti Poll หลายรอบก่อนกราฟเริ่มแสดงข้อมูล
หน้าจอสร้าง Data Input Method สำหรับ PM2.5 และ PM10 ใน Cacti
ตัวอย่าง Data Input Method จาก Cacti Environment ของผู้สร้างในปี 2019
Screenshot เป็น UI จาก Environment ปี 2019
เมนูหรือหน้าตาของ Cacti รุ่นปัจจุบัน อาจไม่ตรงกับภาพทุกจุด ควรใช้ภาพนี้เพื่อเข้าใจ Workflow และตรวจ Documentation ของ Version ที่ติดตั้งจริง
การตั้งค่า Data Source Template PM10 ใน Cacti
ตัวอย่าง Data Source Template สำหรับ PM10
การตั้งค่า Data Source Template PM2.5 ใน Cacti
ตัวอย่าง Data Source Template สำหรับ PM2.5
การสร้าง Graph Template Air Pollution ใน Cacti
การสร้าง Graph Template สำหรับ Air Pollution
รายละเอียด Graph Template สำหรับ PM2.5 และ PM10
การเพิ่ม Data Source เข้า Graph Template
การตั้งค่า Graph Input ใน Cacti Air Pollution Template
Graph Input Configuration จาก Tutorial ต้นฉบับ
หน้าจอ Create New Graphs ใน Cacti
ขั้นตอนเลือก Air Pollution Graph Template เพื่อสร้างกราฟ
หน้าจอตั้งค่ากราฟ PM2.5 และ PM10 ใน Cacti
Configuration ก่อนสร้างกราฟจริง
การกำหนดไฟล์ข้อมูลให้ Data Source ใน Cacti
ระบุตำแหน่ง File ที่เก็บค่าจาก Sensor
หน้า Graph ของ Cacti หลังสร้าง Air Pollution graph
ไปยังหน้า Graph หลังสร้าง Data Source และ Template แล้ว
List View สำหรับเลือก Air Pollution graph ใน Cacti
List View สำหรับเลือกกราฟที่สร้างไว้

ผลลัพธ์คือกราฟ PM2.5/PM10 ย้อนหลัง

กราฟย้อนหลัง PM2.5 และ PM10 ใน Cacti จาก ESP32 SDS011
Historical Graph จาก Cacti หลังระบบได้รับ Measurement จาก ESP32/SDS011 หลายรอบ

Instructions เตือนว่า Cacti ต้อง Poll ข้อมูลหลายรอบ ก่อนกราฟจะเริ่มแสดงผล จึงไม่ควรคาดหวังว่า สร้าง Graph เสร็จแล้วจะเห็น History ทันที

ข้อจำกัดของ SDS011 และเรื่องความชื้น

Reference ที่รวบรวมข้อมูลจาก SDS011 Datasheet ระบุ Relative Error ที่ 10% และ Humidity Working Range อยู่ถึงประมาณ 70%

ความชื้นสูงสามารถทำให้ Reading ไม่น่าเชื่อถือมากขึ้น
ดังนั้นหากใช้ Sensor Outdoor หรือในสภาพอากาศชื้น ไม่ควรมองค่าจาก SDS011 เป็น Ground Truth โดยอัตโนมัติ

สิ่งที่เหมาะกับ Project นี้มากกว่า คือใช้ดู:

  • Trend ตามเวลา
  • ความแตกต่างระหว่าง Location
  • ช่วงที่ค่าฝุ่นเพิ่มหรือลด
  • การทดลอง IoT / Data Logging

หากต้องใช้ข้อมูลเพื่อการตัดสินใจที่สำคัญ ควรเทียบกับสถานีหรือเครื่องมืออ้างอิง ที่เหมาะกับงานนั้น

Security: HTTP GET แบบต้นฉบับไม่ควรเปิดตรงออก Internet

Project ปี 2019 ใช้ Plain HTTP GET สำหรับส่ง Filename และ Measurement ไปยัง WebService

Source เดิมไม่ได้แสดง:

  • TLS / HTTPS
  • Device Authentication
  • API Key
  • Request Signing
  • Input Validation Architecture แบบ Modern API
ถ้าทดลองตาม Architecture เดิม ให้ใช้บน Lab / Trusted Network
ไม่ควร Forward HTTP Data Collector ออก Public Internet โดยตรง โดยไม่มี Authentication, TLS และ Access Control

สำหรับระบบใหม่ ควรออกแบบ Server Endpoint ให้ Validate Filename / Content และจำกัดสิทธิ์ของ Device แต่รายละเอียดดังกล่าวเป็น Modern Security Recommendation ไม่ใช่ Feature ที่ Source ปี 2019 ระบุว่ามีอยู่แล้ว

ถ้าทำ Project นี้ใหม่ในปี 2026 ต้องตรวจอะไรบ้าง?

จุดที่ต้องตรวจ เหตุผล
Arduino-ESP32 Installation Package Index ใน Tutorial ปี 2019 เก่าแล้ว ให้ยึด Official Espressif Docs ปัจจุบัน
Board Selection เลือก Board/Variant ให้ตรงกับ ESP32 ที่ใช้จริง
SDS011 Library Original Build ใช้ Library ที่แก้ Sleep Function
OLED SDA/SCL Instructions กับ Source Code ขัดกัน; Code ใช้ SDA 21 / SCL 22
UART Pin Mapping ตรวจ Pinout ตาม ESP32 Board จริง
Timezone Code เดิม Hard-code NTP Offset สำหรับ Environment ของผู้สร้าง
Server Security Plain HTTP Endpoint เดิมไม่เหมาะกับการเปิด Public Internet
Offline Data ค่า 0 จาก PowerShell อาจหมายถึง Sensor Offline ไม่ใช่ PM = 0
Cacti UI Screenshot เป็น UI จาก Environment ปี 2019

Source Code และไฟล์ต้นฉบับ

FAQ: ESP32 + SDS011 Air Quality Monitor

1. โปรเจกต์นี้วัดอะไร?

SDS011 ส่งค่า PM2.5 และ PM10 ให้ ESP32 อ่านและบันทึก

2. SDS011 ติดต่อกับ ESP32 ผ่านอะไร?

ผ่าน UART โดยต้นฉบับต่อ SDS011 RX ไป TX2 และ SDS011 TX ไป RX2

3. RX2/TX2 คือ GPIO ไหน?

Source ไม่ได้ล็อก GPIO Number สำหรับ ESP32 Board ทุก Variant จึงควรตรวจ Pinout ของ Board ที่ใช้งานจริง

4. OLED ต่อ SDA/SCL ที่ GPIO ไหน?

Source Code และ SSD1306Wire Constructor สอดคล้องกับ SDA = GPIO21 และ SCL = GPIO22 แม้ Instructions เดิมจะเขียนสองขานี้สลับกัน

5. SDS011 ใช้ไฟเท่าไร?

Reference ที่อ้าง SDS011 Datasheet ระบุ Input Voltage 5 V

6. ESP32 ส่งข้อมูลทุกกี่นาที?

Project ต้นฉบับใช้ Loop ที่รอประมาณ 5 นาที ก่อนเริ่ม Measurement รอบใหม่

7. SDS011 ทำงานตลอดเวลาหรือไม่?

Firmware ต้นฉบับใช้ Wake → Read → Sleep ในแต่ละ Measurement Cycle

8. ทำไมต้องใช้ Modified SDS011 Library?

ผู้สร้างระบุว่า Library ที่ใช้เดิม มีปัญหากับ Sleep Function จึงแก้ Function และแนบ Library Pack ไว้กับ Project

9. ส่งข้อมูลไป Cacti โดยตรงหรือไม่?

ไม่ ESP32 ส่งค่าไปยัง IIS/.NET WebService ก่อน จากนั้น Measurement ถูกเขียนเป็น File ให้ Cacti นำไปสร้างกราฟ

10. ใช้ HTTPS หรือไม่?

Firmware ต้นฉบับใช้ Plain HTTP GET และ Source ไม่ได้ระบุ TLS หรือ Device Authentication

11. เปิด Server Endpoint ออก Internet ได้เลยหรือไม่?

ไม่ควรทำตาม Architecture เดิมโดยตรง หากไม่มี Authentication, TLS และ Access Control ที่เหมาะสม

12. ทำไมกราฟบางช่วงอาจเป็น 0?

PowerShell Script ของ Project เขียนค่า 0 หาก Sensor File ไม่ถูกอัปเดตภายในประมาณ 15 นาที ดังนั้น 0 อาจเป็น Offline Marker ไม่ใช่ Measurement จริง

13. SDS011 แม่นแค่ไหน?

Reference ที่อ้าง SDS011 Specification ระบุ Relative Error 10% แต่ Measurement จริงยังขึ้นกับ Environment และเงื่อนไขการใช้งาน

14. ความชื้นมีผลกับ SDS011 หรือไม่?

Reference SDS011 ที่ใช้ในบทความ เตือนว่าความชื้นสูงกว่า Working Range สามารถทำให้ Reading ไม่น่าเชื่อถือ

15. ใช้แทนสถานีวัด PM2.5 ทางการได้หรือไม่?

Source ไม่ได้รองรับ Claim ดังกล่าว Project นี้เหมาะกับ DIY Monitoring, Trend Analysis และการเรียนรู้ IoT มากกว่า

16. ต้อง Restart ESP32 ทุก 5 รอบหรือไม่?

ไม่ใช่ ESP32 Requirement แต่เป็น Workaround ที่ผู้สร้างใส่ไว้เพราะ Build ของเขา มีอาการค้างหลังทำงานหลายรอบ

17. Tutorial ปี 2019 ใช้กับ Arduino IDE ปัจจุบันได้เหมือนเดิมหรือไม่?

Concept ยังใช้ได้ แต่ Board Manager URL, UI, Board Package และ Library Version ควรตรวจจาก Official Documentation ปัจจุบัน

18. ต้องใช้ Cacti หรือไม่?

Build ต้นฉบับใช้ Cacti สำหรับ Logging และ Graphing แต่ Source ไม่ได้กำหนดว่า ESP32/SDS011 ต้องใช้ Cacti เท่านั้น

สิ่งที่น่าสนใจไม่ใช่แค่ Sensor แต่คือ Data Pipeline ทั้งระบบ

ESP32 + SDS011 เป็นคู่ที่เข้าใจง่ายสำหรับการเริ่มทดลอง Air Quality Monitoring เพราะ ESP32 มี Wi-Fi ในตัว ส่วน SDS011 ส่ง PM2.5/PM10 ออกมาให้ระบบนำไปใช้งานต่อได้

แต่ Project นี้น่าสนใจขึ้น เพราะผู้สร้างไม่ได้หยุดที่การอ่าน Sensor เขาพา Measurement ตั้งแต่ UART, OLED, Wi-Fi, HTTP, Windows Server ไปจนถึง Historical Graph ใน Cacti

ขณะเดียวกัน Source เก่าก็แสดงให้เห็นบทเรียนสำคัญ: Wiring Documentation อาจผิด, Library อาจมี Bug, Sensor Offline ต้องแยกจากค่าจริง และ Architecture ที่ใช้ Plain HTTP เมื่อปี 2019 ควรถูกทบทวนด้าน Security หากนำกลับมาสร้างใหม่ในปี 2026

ถ้ามองในมุม Maker นี่จึงเป็น Project ที่ดีสำหรับเรียนพร้อมกันทั้ง Sensor Interface, ESP32 Networking, Data Logging และ Dashboard โดยไม่จำเป็นต้องเริ่มจากระบบ Cloud ขนาดใหญ่

โปรเจกต์นี้มีหลายขั้น แนะนำอ่านต้นฉบับควบคู่กัน

References / แหล่งข้อมูลต้นฉบับ

กำลังทำ ESP32, Air Quality หรือ IoT Sensor Project?

โปรเจกต์นี้เป็นตัวอย่างที่ดี ของการเชื่อม Sensor, Display, Wi-Fi และ Data Logging ให้ทำงานเป็นระบบเดียว

หากกำลังเลือก ESP32, Development Board, Sensor หรือ Module สามารถสอบถามทีม GlobalByte เรื่องบอร์ดหรืออุปกรณ์ที่เหมาะกับ Project ได้

Disclaimer: บทความนี้เป็นการสรุปและเรียบเรียงจากแหล่งข้อมูลภาษาอังกฤษ อาจมีความคลาดเคลื่อน กรุณาตรวจสอบ Source ต้นฉบับก่อนลงมือทำ โปรเจกต์ต้นฉบับสร้างในปี 2019 จึงมี Arduino IDE, Board Manager URL, Library และ Cacti UI ที่อาจแตกต่างจาก Software ปัจจุบัน Instructions เดิมระบุ OLED SCL=D21 / SDA=D22 แต่ Source Code และ ThingPulse SSD1306Wire Constructor สอดคล้องกับ SDA=GPIO21 / SCL=GPIO22 จึงควรตรวจ Wiring กับ Code และ Board จริงอีกครั้ง Original Build ใช้ SDS011 Library ที่ผู้สร้างแก้ Sleep Function เอง และ Firmware มี Restart Workaround ที่ไม่ใช่ Requirement ปกติของ ESP32 ระบบ Server ต้นฉบับส่งข้อมูลผ่าน Plain HTTP GET โดย Source ไม่ได้ระบุ TLS หรือ Device Authentication จึงไม่ควรเปิด Endpoint ดังกล่าวสู่ Public Internet โดยตรง PowerShell ของ Project ใช้ค่า 0 เป็น Marker เมื่อ Sensor ไม่อัปเดตประมาณ 15 นาที ดังนั้นค่า 0 ใน Dataset อาจไม่ได้หมายถึง PM จริงเท่ากับศูนย์ SDS011 เหมาะกับ DIY / Trend Monitoring และบทความนี้ไม่ได้อ้างว่า Sensor สามารถใช้แทนเครื่องมือหรือสถานีตรวจวัดมาตรฐานได้

 

แท็ก


Blog posts