
คู่มือการต่อ PMS7003 & SHT31 กับ ESP32 ให้เสถียรและแม่นยำ
การสร้างสถานีวัดอากาศที่เชื่อถือได้ ไม่ได้ขึ้นอยู่กับแค่การเขียน Code แต่เริ่มตั้งแต่ Physical Connection และ Data Logic บทความนี้จะเจาะลึกวิธีการต่อเซนเซอร์ยอดนิยมสองตัวนี้เข้ากับ ESP32 อย่างถูกวิธี
1. การเชื่อมต่อทางฮาร์ดแวร์ (Hardware Connection)
A. SHT31 (Temperature & Humidity) - การเชื่อมต่อ I2C
SHT31 ใช้การสื่อสารแบบ I2C ซึ่งต้องระวังเรื่องแรงดันและที่อยู่ (Address)
- VCC: 3.3V (ห้ามต่อ 5V เพราะอาจทำให้เซนเซอร์พังในระยะยาว)
- GND: กราวด์ร่วมกับ ESP32
- SCL: ต่อเข้ากับ GPIO 22 (Default I2C SCL ของ ESP32)
- SDA: ต่อเข้ากับ GPIO 21 (Default I2C SDA ของ ESP32)
- คำแนะนำ: หากสายแพยาวเกิน 30 ซม. ควรต่อ Pull-up Resistor 4.7k ที่สาย SDA และ SCL เพื่อรักษาคุณภาพสัญญาณ
B. PMS7003 (Dust Sensor) - การเชื่อมต่อ UART
PMS7003 เป็นเซนเซอร์ที่มีพัดลมในตัว ต้องการกระแสไฟที่นิ่งและแรงดันที่ถูกต้อง
- VCC: 5V (พัดลมต้องการ 5V เพื่อรอบหมุนที่คงที่ในการดึงอากาศเข้า)
- GND: กราวด์ร่วมกับระบบ
- TX (PMS): ต่อเข้ากับ RX2 (GPIO 16) ของ ESP32
- RX (PMS): ต่อเข้ากับ TX2 (GPIO 17) ของ ESP32 (สำหรับส่งคำสั่ง Sleep/Wake)
- SET: ต่อเข้ากับ GPIO (Optional) สำหรับสั่ง Sleep Mode เพื่อยืดอายุการใช้งานพัดลม
2. ปัญหาที่พบบ่อย (Common Issues) และวิธีแก้ไข
ปัญหาที่ 1: ค่า SHT31 สูงกว่าความเป็นจริง (Self-Heating)
อาการ: อุณหภูมิที่วัดได้สูงกว่าปรอทวัดจริง 2-3°C
- สาเหตุ: เซนเซอร์ถูกวางใกล้ ESP32 มากเกินไป หรือเปิดใช้ Heater ในตัว SHT31 ตลอดเวลา
- วิธีแก้: * แยกเซนเซอร์ออกมาห่างจากตัว MCU หรือแหล่งจ่ายไฟ
- ตรวจสอบ Code ว่าไม่ได้เปิดคำสั่ง
wire.write(0x306D);(Heater ON) ทิ้งไว้โดยไม่จำเป็น
- ตรวจสอบ Code ว่าไม่ได้เปิดคำสั่ง
ปัญหาที่ 2: PMS7003 อ่านค่าได้ 0 ตลอดเวลา หรือ Checksum Error
อาการ: มีข้อมูลส่งมาแต่เป็น 0 หรือข้อมูลไม่สมบูรณ์
- สาเหตุ: 1. จ่ายไฟ 3.3V ให้ PMS7003 (พัดลมไม่หมุนหรือหมุนช้าเกินไป) 2. ต่อสาย TX/RX สลับกัน
- วิธีแก้: ตรวจสอบให้แน่ใจว่าใช้ไฟจากขา VIN/5V และเช็คความเร็ว Baud rate ให้ตรงที่ 9600 bps
ปัญหาที่ 3: เซนเซอร์รวนเมื่อทำงานไปนานๆ (I2C Freeze)
อาการ: ระบบค้างที่หน้าดึงค่าจาก SHT31
- สาเหตุ: สัญญาณรบกวนในสาย (Electrical Noise) ทำให้ I2C Bus ค้าง
- วิธีแก้: * เพิ่ม Capacitor 0.1 uF คร่อม VCC/GND ใกล้ตัวเซนเซอร์
- ใช้ Code ที่มีการจัดการ I2C Timeout หรือใช้คำสั่ง
Wire.setClock(100000);เพื่อลดความเร็วลง
- ใช้ Code ที่มีการจัดการ I2C Timeout หรือใช้คำสั่ง
3. การทำ Power Management (หัวใจสำคัญ)
ในการใช้งานจริง หากต้องการให้เซนเซอร์อยู่ได้นานหลายปี ไม่ควรเปิดพัดลม PMS7003 ทิ้งไว้ตลอด 24 ชม.
- Sleep Mode: สั่งขา SET ให้เป็น LOW เพื่อหยุดพัดลมและเลเซอร์
- Warm-up: ก่อนอ่านค่าฝุ่น ควรปลุก (Wake) เซนเซอร์ล่วงหน้าอย่างน้อย 30 วินาที เพื่อให้พัดลมหมุนคงที่และลมในห้องเครื่องนิ่งพอที่จะวัดค่าได้แม่นยำ
สรุปบทความ
การต่อ PMS7003 และ SHT31 ที่ถูกต้องไม่ใช่แค่การเสียบสายให้ครบ แต่คือการเข้าใจ Power Domain (3.3V vs 5V) และการจัดการ Signal Integrity (Pull-up & Decoupling) หากทำตามขั้นตอนนี้ สถานีวัดฝุ่นจะทำงานได้เสถียรและให้ข้อมูลที่เชื่อถือได้ระดับ Professional