Table of Contents

การใช้งานโมดูลเซ็นเซอร์ วัดอุณหภูมิและความชื้น SHT30 SHT31 SHT35 SHT40 SHT41 by massmore

โมดูลเซ็นเซอร์อุณหภูมิและความชื้น SHT30, SHT31, SHT35, SHT40, SHT41

ตัวเลือกสินค้า:

  1. SHT30
  2. SHT31
  3. SHT35
  4. SHT40
  5. SHT41

ข้อมูลทั่วไปสินค้า (Introduction)

ภาพรวมเทคโนโลยีเซ็นเซอร์จาก Sensirion

บริษัท Sensirion จากประเทศสวิตเซอร์แลนด์ ได้สร้างชื่อเสียงในฐานะผู้นำระดับโลกในอุตสาหกรรมเซ็นเซอร์วัดอุณหภูมิและความชื้นมาอย่างยาวนาน ด้วยประสบการณ์ที่สั่งสมมานานกว่าสองทศวรรษ  หัวใจสำคัญของความสำเร็จนี้คือเทคโนโลยีที่เป็นกรรมสิทธิ์เฉพาะอย่าง CMOSens® ซึ่งเป็นการปฏิวัติวงการโดยการผสานรวมองค์ประกอบการตรวจจับ (sensing element) เข้ากับวงจรประมวลผลสัญญาณแอนะล็อกและดิจิทัลไว้บนชิปซิลิคอน (CMOS) เพียงตัวเดียว แนวทางนี้ไม่เพียงแต่ช่วยลดขนาดของเซ็นเซอร์ลงได้อย่างมาก แต่ยังเพิ่มความน่าเชื่อถือ ความเสถียรในระยะยาว และความแม่นยำในการวัดค่าให้อยู่ในระดับสูงสุด ซึ่งเป็นรากฐานสำคัญของผลิตภัณฑ์เซ็นเซอร์ทุกรุ่นของบริษัท

แนะนำ Series SHT3x และ SHT4x

Serise SHT3x คือเซ็นเซอร์วัดอุณหภูมิและความชื้นรุ่นที่ 3 ซึ่งเป็นผู้สืบทอดความสำเร็จจาก SHT2x ที่ได้รับการยอมรับอย่างกว้างขวาง ได้สร้างมาตรฐานใหม่ให้กับอุตสาหกรรมด้วยประสิทธิภาพที่เพิ่มขึ้นและความชาญฉลาดในการประมวลผลสัญญาณ Sensirion ได้แบ่งกลุ่มผลิตภัณฑ์ในตระกูลนี้อย่างชัดเจนเพื่อตอบสนองความต้องการของตลาดที่แตกต่างกัน :

  • SHT30: รุ่นเริ่มต้นที่เน้นความคุ้มค่า (Low-cost version)
  • SHT31: รุ่นมาตรฐาน (Standard version) ที่ให้ความสมดุลระหว่างราคาและประสิทธิภาพ
  • SHT35: รุ่นประสิทธิภาพสูง (High-end version) สำหรับการใช้งานที่ต้องการความแม่นยำสูงสุด

Series SHT4x คือผลิตภัณฑ์เรือธงรุ่นล่าสุด (4th generation) ที่แสดงถึงวิวัฒนาการอีกขั้นของเทคโนโลยีเซ็นเซอร์จาก Sensirion เซ็นเซอร์ไม่ได้เป็นเพียงการปรับปรุงเล็กน้อยจากรุ่นก่อนหน้า แต่เป็นการออกแบบใหม่ที่เหนือกว่า SHT3x ในทุกมิติ จุดเด่นที่สำคัญคือขนาดที่เล็กลงอย่างมาก การใช้พลังงานที่ต่ำลงอย่างมีนัยสำคัญ และคุณสมบัติใหม่ๆ ที่ออกแบบมาเพื่อการใช้งานในสภาวะแวดล้อมที่ท้าทาย

การประยุกต์ใช้งานหลัก (Key Applications)

ด้วยความแม่นยำ ความน่าเชื่อถือ และคุณสมบัติที่หลากหลาย ทำให้เซ็นเซอร์ SHT3x และ SHT4x ถูกนำไปใช้งานอย่างแพร่หลายในหลากหลายอุตสาหกรรมและผลิตภัณฑ์ :

  • ระบบปรับอากาศและควบคุมสภาวะแวดล้อม (HVAC): สำหรับการควบคุมอุณหภูมิและความชื้นในอาคารเพื่อให้เกิดความสบายและประหยัดพลังงาน
  • สถานีตรวจวัดสภาพอากาศ (Weather Stations): ใช้ในการตรวจวัดข้อมูลสภาพอากาศภายนอกอาคารด้วยความแม่นยำสูง
  • ระบบอัตโนมัติในภาคอุตสาหกรรม (Industrial Automation): ควบคุมสภาวะแวดล้อมในกระบวนการผลิตที่ต้องการความแม่นยำของอุณหภูมิและความชื้น
  • อุปกรณ์ Smart Home และ Internet of Things (IoT): เป็นส่วนประกอบสำคัญในอุปกรณ์อัจฉริยะต่างๆ เช่น เครื่องฟอกอากาศ, ระบบควบคุมบ้านอัตโนมัติ
  • อุปกรณ์บันทึกข้อมูล (Data Loggers): สำหรับการบันทึกข้อมูลสิ่งแวดล้อมในระยะยาวเพื่องานวิจัยหรือการควบคุมคุณภาพ
  • อุปกรณ์อิเล็กทรอนิกส์แบบพกพา (Portable Devices): ด้วยขนาดที่เล็กและการใช้พลังงานต่ำ ทำให้เหมาะสำหรับอุปกรณ์ที่ใช้พลังงานจากแบตเตอรี่
  • การเกษตรและเรือนกระจก (Agriculture and Greenhouses): ใช้ในการควบคุมสภาพอากาศเพื่อเพิ่มผลผลิต

ข้อมูลทางเทคนิค (Specification)

ข้อมูลจำเพาะโดยละเอียดของตระกูล SHT3x

  • ความแม่นยำ (Accuracy):
    • SHT30: ความแม่นยำปกติ (Typical) สำหรับความชื้นสัมพัทธ์ ±2 %RH และสำหรับอุณหภูมิ ±0.3 ∘C
    • SHT31: ความแม่นยำปกติ (Typical) สำหรับความชื้นสัมพัทธ์ ±2 %RH และสำหรับอุณหภูมิ ±0.2 ∘C
    • SHT35: ความแม่นยำปกติ (Typical) สำหรับความชื้นสัมพัทธ์ ±1.5 %RH และสำหรับอุณหภูมิ ±0.1 ∘C
  • แรงดันไฟฟ้าใช้งาน (Supply Voltage): 2.15 V ถึง 5.5 V
  • การใช้พลังงาน (Power Consumption): กระแสไฟฟ้าใช้งานเฉลี่ย (Average supply current) ประมาณ 1.7 µA
  • เวลาตอบสนอง (Response Time): ค่าคงที่เวลา (τ63%) สำหรับการวัดความชื้นอยู่ที่ 8 วินาที
  • แพ็คเกจ (Package): ตัวถังแบบ DFN 8 ขา ขนาด 2.5 x 2.5 x 0.9 mm

ข้อมูลจำเพาะโดยละเอียดของตระกูล SHT4x

  • ความแม่นยำ (Accuracy):
    • SHT40/SHT41: ความแม่นยำปกติ (Typical) สำหรับความชื้นสัมพัทธ์ ±1.8 %RH และสำหรับอุณหภูมิ ±0.2 ∘C
  • แรงดันไฟฟ้าใช้งาน (Supply Voltage): 1.08 V ถึง 3.6 V
  • การใช้พลังงาน (Power Consumption): กระแสไฟฟ้าใช้งานเฉลี่ย (Average current) ที่ 1 การวัดต่อวินาที อยู่ที่ 0.4 µA และกระแสขณะพัก (Idle current) เพียง 80 nA
  • เวลาตอบสนอง (Response Time): ค่าคงที่เวลา (τ63%) สำหรับการวัดความชื้นอยู่ที่ 4 วินาที และสำหรับอุณหภูมิอยู่ที่ 2 วินาที
  • แพ็คเกจ (Package): ตัวถังแบบ DFN 4 ขา ขนาด 1.5 x 1.5 x 0.5 mm

คุณสมบัติพิเศษ: Heater และการป้องกัน (PTFE Membrane)

คุณสมบัติที่โดดเด่นที่สุดของ SHT4x คือการออกแบบมาเพื่อรับมือกับสภาพแวดล้อมที่ท้าทาย ซึ่งเป็นจุดที่เซ็นเซอร์รุ่นเก่ามักประสบปัญหา

  • Heater ในตัว (Integrated Heater): แม้ว่า SHT3x จะมี Heater แต่จุดประสงค์หลักคือเพื่อการตรวจสอบความน่าเชื่อถือของเซ็นเซอร์เท่านั้น ในทางตรงกันข้าม SHT4x มาพร้อมกับ Heater ที่ทรงพลังและใช้งานได้จริง โดยสามารถเลือกระดับความร้อนได้หลายระดับ ฟังก์ชันนี้มีประโยชน์อย่างยิ่งในสภาวะที่มีความชื้นสูงต่อเนื่องหรือเกิดการควบแน่น Heater จะช่วยเพิ่มอุณหภูมิที่ตัวเซ็นเซอร์ชั่วคราวเพื่อ “ไล่” ความชื้นที่เกาะอยู่ ทำให้การวัดค่ากลับมาแม่นยำดังเดิม
  • แผ่นกรอง PTFE (PTFE Membrane): เป็นตัวเลือกเสริมที่มีใน SHT4x แผ่นกรองนี้ทำหน้าที่เป็นเกราะป้องกันทางกายภาพ ไม่ให้ฝุ่น, ละอองน้ำ หรือมลพิษขนาดเล็กเข้าไปยังตัวเซ็นเซอร์ ทำให้เซ็นเซอร์สามารถทำงานได้อย่างน่าเชื่อถือในสภาพแวดล้อมที่สกปรกหรือรุนแรง และผ่านมาตรฐานการป้องกันระดับ IP67

เปรียบเทียบ (Comparison)

การเลือกรุ่นเซ็นเซอร์ที่เหมาะสมนั้นขึ้นอยู่กับข้อกำหนดด้านความแม่นยำ งบประมาณ และคุณสมบัติทางเทคนิคของแต่ละโครงการ การเปรียบเทียบคุณสมบัติระหว่างรุ่นต่างๆ จะช่วยให้สามารถตัดสินใจได้อย่างมีข้อมูล

การเปรียบเทียบภายใน SHT3x (SHT30 vs SHT31 vs SHT35)

ปัจจัยหลักที่ใช้ในการแบ่งแยกรุ่นต่างๆ ใน SHT3x คือระดับความคลาดเคลื่อน (Accuracy Tolerance) โดย SHT35 จะมีความแม่นยำสูงสุด ซึ่งแลกมากับราคาที่สูงขึ้น ในขณะที่ SHT30 เป็นรุ่นที่เข้าถึงง่ายที่สุด

ตารางที่ 1: เปรียบเทียบคุณสมบัติจำเพาะของ SHT3x

คุณสมบัติSHT30SHT31SHT35
ความแม่นยำความชื้น (Typical)±2 %RH±2 %RH±1.5 %RH
ความแม่นยำอุณหภูมิ (Typical)±0.3 ∘C±0.2 ∘C±0.1 ∘C
ช่วงการวัดอุณหภูมิ-40 ถึง 125 ∘C-40 ถึง 125 ∘C-40 ถึง 125 ∘C
ช่วงการวัดความชื้น0 ถึง 100 %RH0 ถึง 100 %RH0 ถึง 100 %RH
แรงดันไฟฟ้าใช้งาน2.15 V – 5.5 V2.15 V – 5.5 V2.15 V – 5.5 V
อินเทอร์เฟซI2CI2CI2C

การเปรียบเทียบภายใน SHT4x (SHT40 vs SHT41)

การแบ่งแยกรุ่นใน SHT4x ก็ใช้ความแม่นยำเป็นเกณฑ์หลักเช่นกัน ทุกรุ่นในนี้มีคุณสมบัติพื้นฐานที่เหนือกว่า SHT3x เช่น ขนาดที่เล็กกว่าและการใช้พลังงานที่ต่ำกว่ามาก

ตารางที่ 2: เปรียบเทียบคุณสมบัติจำเพาะของ SHT4x

คุณสมบัติSHT40SHT41
ความแม่นยำความชื้น (Typical)±1.8 %RH±1.8 %RH
ความแม่นยำอุณหภูมิ (Typical)±0.2 ∘C±0.2 ∘C
ช่วงการวัดอุณหภูมิ-40 ถึง 125 ∘C-40 ถึง 125 ∘C
ช่วงการวัดความชื้น0 ถึง 100 %RH0 ถึง 100 %RH
แรงดันไฟฟ้าใช้งาน1.08 V – 3.6 V1.08 V – 3.6 V
อินเทอร์เฟซI2CI2C

การเปรียบเทียบระหว่าง SHT3x และ SHT4x: การอัปเกรดที่สำคัญ

โดยทั่วไปแล้ว SHT4x ถือเป็นตัวเลือกที่เหนือกว่าในเกือบทุกด้าน ยกเว้นเพียงกรณีเดียวคือความต้องการเชื่อมต่อกับระบบ 5V โดยตรงโดยไม่ใช้วงจรปรับลดแรงดันไฟฟ้า   การเลือกใช้ SHT4x สำหรับโครงการใหม่เป็นทางเลือกที่สมเหตุสมผลอย่างยิ่ง เนื่องจากประสิทธิภาพที่สูงขึ้นในทุกมิติ ทั้งความแม่นยำ เวลาตอบสนองที่รวดเร็วกว่าเท่าตัว การใช้พลังงานที่ต่ำลงอย่างมาก และคุณสมบัติเพิ่มเติมที่ออกแบบมาเพื่อความทนทาน

ตารางที่ 3: เปรียบเทียบความแตกต่างที่สำคัญระหว่าง SHT3x และ SHT4x

คุณสมบัติSHT3xSHT4xประโยชน์ของการเปลี่ยนแปลง
ขนาดแพ็คเกจ (mm)2.5 x 2.5 x 0.91.5 x 1.5 x 0.5เล็กลงอย่างมาก ประหยัดพื้นที่บน PCB เหมาะสำหรับอุปกรณ์ขนาดเล็ก
แรงดันไฟฟ้าต่ำสุด (V)2.15 V1.08 Vประหยัดพลังงานสูงมาก เหมาะสำหรับอุปกรณ์ IoT ที่ใช้แบตเตอรี่
เวลาตอบสนองความชื้น ()8 วินาที4 วินาทีตอบสนองต่อการเปลี่ยนแปลงของความชื้นได้เร็วกว่า 2 เท่า
กระแสไฟฟ้าขณะพัก (Idle Current)~0.2 µA80 nAใช้พลังงานต่ำมากในโหมดสลีป ยืดอายุการใช้งานแบตเตอรี่
ฟังก์ชัน Heaterมี, สำหรับตรวจสอบความน่าเชื่อถือมี Heater ประสิทธิภาพสูง 3 ระดับป้องกันการควบแน่นและทำความสะอาดตัวเองได้ ทำงานได้ดีในที่ชื้นสูง
ตัวเลือกการป้องกันฝาครอบป้องกันแผ่นกรอง PTFE (IP67)ทนทานต่อฝุ่นและละอองน้ำ เหมาะกับสภาพแวดล้อมที่รุนแรง

Connection Diagram

การเชื่อมต่อเซ็นเซอร์กับบอร์ดไมโครคอนโทรลเลอร์ต่างๆ มีความคล้ายคลึงกัน แต่ต้องให้ความสำคัญกับระดับแรงดันไฟฟ้าที่ถูกต้อง

  • การเชื่อมต่อกับบอร์ด Arduino (Uno/Nano) :
    • VIN ของโมดูล -> 5V ของ Arduino
    • GND ของโมดูล -> GND ของ Arduino
    • SDA ของโมดูล -> A4 ของ Arduino
    • SCL ของโมดูล -> A5 ของ Arduino
  • การเชื่อมต่อกับบอร์ด ESP32 :
    • VDD ของโมดูล -> 3.3V ของ ESP32
    • GND ของโมดูล -> GND ของ ESP32
    • SDA ของโมดูล -> GPIO21 (SDA เริ่มต้น)
    • SCL ของโมดูล -> GPIO22 (SCL เริ่มต้น)

Interface Description

คำอธิบายขาเชื่อมต่อ (Pinout Description)

โมดูลเซ็นเซอร์แบบ Breakout board ที่พบได้ทั่วไปมักจะมีขาเชื่อมต่อมาตรฐาน 4 ขา ซึ่งมีหน้าที่ดังนี้ :

  • VDD / VIN: ขาสำหรับจ่ายไฟเลี้ยงให้กับโมดูล
    • SHT3x: รองรับแรงดันไฟฟ้า 2.15 V ถึง 5.5 V
    • SHT4x: รองรับแรงดันไฟฟ้า 1.08 V ถึง 3.6 V
  • GND: ขากราวด์ของวงจร ต้องเชื่อมต่อกับกราวด์ของไมโครคอนโทรลเลอร์
  • SDA (Serial Data): สายส่งข้อมูลสำหรับโปรโตคอล I2C
  • SCL (Serial Clock): สายสัญญาณนาฬิกาสำหรับโปรโตคอล I2C

หลักการสื่อสารแบบ I2C (I2C Interface Description)

เซ็นเซอร์ทั้งสองใช้อินเทอร์เฟซ I2C (Inter-Integrated Circuit) ในการสื่อสาร ซึ่งเป็นโปรโตคอลที่นิยมอย่างสูงในระบบสมองกลฝังตัวเนื่องจากใช้สายสัญญาณเพียง 2 เส้น

  • หลักการทำงาน: เป็นการสื่อสารแบบ Master-Slave โดยไมโครคอนโทรลเลอร์ทำหน้าที่เป็น Master และเซ็นเซอร์ทำหน้าที่เป็น Slave
  • I2C Address: อุปกรณ์แต่ละตัวบนบัส I2C จะต้องมี Address ที่ไม่ซ้ำกัน
    • SHT3x: มี Address เริ่มต้น (Default) คือ 0x44 และสามารถเลือกใช้ Address สำรองได้ที่ 0x45 (โดยการต่อขา ADDR เข้ากับ VDD) ทำให้สามารถใช้เซ็นเซอร์ 2 ตัวบนบัสเดียวกันได้
    • SHT4x: โมดูลส่วนใหญ่จะมี Address เริ่มต้นคือ 0x44 และบางรุ่นอาจมี Address อื่นๆ ให้เลือกใช้ หากต้องการใช้เซ็นเซอร์ SHT4x หลายตัวบนบัสเดียวกัน อาจจำเป็นต้องใช้อุปกรณ์เสริมที่เรียกว่า I2C Multiplexer

ตัวอย่างการใช้งาน (Examples)

การใช้งานร่วมกับ Arduino

ไลบรารีจาก Adafruit เป็นที่นิยมอย่างสูงและใช้งานง่าย ทำให้การเริ่มต้นกับเซ็นเซอร์เหล่านี้เป็นไปอย่างรวดเร็ว

  • การติดตั้งไลบรารี:
    1. เปิด Arduino IDE ไปที่ Tools > Manage Libraries...
    2. สำหรับ SHT3x: ค้นหา Adafruit SHT31 Library และกด Install
    3. สำหรับ SHT4x: ค้นหา Adafruit SHT4x และกด Install
    4. Arduino IDE อาจแจ้งให้ติดตั้งไลบรารีที่จำเป็นอื่นๆ เช่น Adafruit BusIO ให้ตอบรับการติดตั้งทั้งหมด

โปรแกรมตัวอย่าง SHT3x Arduino IDE

				
					#include <Wire.h>
#include "Adafruit_SHT31.h"

Adafruit_SHT31 sht31 = Adafruit_SHT31();

void setup() {
  Wire.begin(21,22); // for esp32
  Serial.begin(115200);
  while (!Serial) delay(10); // Wait for serial console to open

  Serial.println("SHT3x Test");
  if (!sht31.begin(0x44)) { // I2C address 0x44
    Serial.println("Couldn't find SHT3x sensor!");
    while (1) delay(1);
  }
}

void loop() {
  float t = sht31.readTemperature(); // Read temperature as Celsius
  float h = sht31.readHumidity(); // Read humidity as %RH

  if (! isnan(t)) { // check if 'is not a number'
    Serial.print("Temp *C = "); Serial.print(t);
  } else {
    Serial.println("Failed to read temperature");
  }

  if (! isnan(h)) {
    Serial.print("\t\tHum. % = "); Serial.println(h);
  } else {
    Serial.println("Failed to read humidity");
  }

  delay(1000);
}
				
			

โปรแกรมตัวอย่าง SHT4x Arduino IDE

				
					#include <Wire.h>
#include "Adafruit_SHT4x.h"

Adafruit_SHT4x sht4 = Adafruit_SHT4x();

void setup() {
  Wire.begin(21, 22); // for esp32
  Serial.begin(115200);
  while (!Serial) delay(10);

  Serial.println("SHT4x Test");
  if (!sht4.begin()) {
    Serial.println("Couldn't find SHT4x sensor");
    while (1) delay(1);
  }
}

void loop() {
  sensors_event_t humidity, temp;
  sht4.getEvent(&humidity, &temp); // Populate temp and humidity objects

  Serial.print("Temperature: "); Serial.print(temp.temperature); Serial.println(" *C");
  Serial.print("Humidity: "); Serial.print(humidity.relative_humidity); Serial.println(" %RH");

  delay(1000);
}
				
			

ตัวอย่างการประยุกต์ใช้งานกับบอร์ด ESP32 Breakout Board by Massmore

ตัวอย่างโปรแกรม GitHub
https://github.com/Massmore/SHT3x_SHT4x_SKU-0125_SKU-0216

ไลบรารีและไดรเวอร์จากผู้ผลิตและชุมชนนักพัฒนาเป็นแหล่งข้อมูลสำคัญสำหรับการนำเซ็นเซอร์ไปใช้งาน

สำหรับ SHT3x (SHT30, SHT31, SHT35)

การต่อวงจรใช้งาน Diagrams 

โปรแกรมตัวอย่าง การอ่านค่าเซ็นเซอร์ SHT31 และ SHT35 แสดงผลผ่านทางหน้าจอ TFT_LCD

				
					/*
 * โปรแกรม ESP32 อ่านค่า SHT30, SHT31
 * และแสดงผลบนจอ ST7789 (240x240) ด้วยไลบรารี TFT_eSPI
 */

#include <Wire.h>
#include <Adafruit_SHT31.h>
#include <TFT_eSPI.h>
#include <SPI.h>

// --- สร้าง Object สำหรับไลบรารี ---
TFT_eSPI tft = TFT_eSPI();  // สร้าง Object สำหรับจอ TFT
Adafruit_SHT31 sht30 = Adafruit_SHT31();
Adafruit_SHT31 sht31 = Adafruit_SHT31();

// --- ฟังก์ชันสำหรับวาดหน้าจอใหม่ทั้งหมด ---
void drawScreenLayout() {
  tft.fillScreen(TFT_BLACK); // เคลียร์จอเป็นสีดำ
  tft.setTextColor(TFT_WHITE, TFT_BLACK); // ตั้งค่าสีตัวอักษรเป็นขาว พื้นหลังดำ

  // วาดหัวข้อหลัก
  tft.setTextDatum(MC_DATUM); // จัดตำแหน่งข้อความให้อยู่กึ่งกลาง (Middle Center)
  tft.setTextSize(2);
  tft.drawString("SHT3x Sensor Monitor", tft.width() / 2, 15);

  // วาดเส้นแบ่ง
  tft.drawFastHLine(10, 35, tft.width() - 20, TFT_DARKGREY);

  // เตรียมพื้นที่สำหรับ Sensor 1 (SHT30)
  tft.setTextDatum(TL_DATUM); // จัดตำแหน่งข้อความชิดซ้ายบน (Top Left)
  tft.setTextSize(2);
  tft.setTextColor(TFT_CYAN);
  tft.drawString("SHT30 (0x44)", 20, 50);
  tft.setTextColor(TFT_WHITE);
  tft.drawString("Temp:", 20, 80);
  tft.drawString("Humi:", 20, 110);
  
  // เตรียมพื้นที่สำหรับ Sensor 2 (SHT31)
  tft.setTextColor(TFT_ORANGE);
  tft.drawString("SHT31 (0x45)", 20, 150);
  tft.setTextColor(TFT_WHITE);
  tft.drawString("Temp:", 20, 180);
  tft.drawString("Humi:", 20, 210);
}

void setup() {
  Serial.begin(115200);
  while (!Serial) delay(10);
  Serial.println("SHT3x + ST7789 Display Test");

  // --- เริ่มต้นการทำงานของจอ TFT ---
  tft.init();
  tft.setRotation(0); // ตั้งค่าการหมุนจอ (0, 1, 2, 3)
  drawScreenLayout(); // วาด Layout พื้นฐานของหน้าจอ

  // --- เริ่มต้นการทำงานของ I2C และเซ็นเซอร์ ---
  Wire.begin(21,22);

  if (!sht30.begin(0x44)) {
    Serial.println("Failed to find SHT30");
    tft.setTextColor(TFT_RED);
    tft.drawString("SHT30 FAIL", 120, 95);
  } else {
    Serial.println("SHT30 Found!");
  }

  if (!sht31.begin(0x45)) {
    Serial.println("Failed to find SHT31");
    tft.setTextColor(TFT_RED);
    tft.drawString("SHT31 FAIL", 120, 195);
  } else {
    Serial.println("SHT31 Found!");
  }
}

void loop() {
  // อ่านค่าจากเซ็นเซอร์
  float t30 = sht30.readTemperature();
  float h30 = sht30.readHumidity();
  float t31 = sht31.readTemperature();
  float h31 = sht31.readHumidity();

  // ตั้งค่าขนาดและสีตัวอักษรสำหรับแสดงค่า
  tft.setTextDatum(TL_DATUM);
  tft.setTextSize(3);
  tft.setTextColor(TFT_WHITE, TFT_BLACK); // สีตัวอักษรขาว, พื้นหลังดำ (เพื่อลบของเก่า)

  // --- แสดงผลค่าของ SHT30 ---
  if (!isnan(t30)) {
    // สร้าง String พร้อมจัดรูปแบบ
    String tempStr30 = String(t30, 1) + " C"; // ทศนิยม 1 ตำแหน่ง
    // วาด String ลงบนจอ (x, y)
    tft.drawString(tempStr30, 110, 80);
  }
  if (!isnan(h30)) {
    String humiStr30 = String(h30, 1) + " %";
    tft.drawString(humiStr30, 110, 110);
  }

  // --- แสดงผลค่าของ SHT31 ---
  if (!isnan(t31)) {
    String tempStr31 = String(t31, 1) + " C";
    tft.drawString(tempStr31, 110, 180);
  }
  if (!isnan(h31)) {
    String humiStr31 = String(h31, 1) + " %";
    tft.drawString(humiStr31, 110, 210);
  }

  delay(2000); // รอ 2 วินาทีก่อนอัปเดตค่าใหม่
}
				
			

วิดีโออธิบายการใช้งานและเปรียบเทียบระหว่าง SHT30/SHT31/SHT35

สำหรับ SHT4x (SHT40, SHT41)

การต่อใช้งาน Diagrams

โปรแกรมตัวอย่าง การอ่านค่าเซ็นเซอร์ SHT40 และ SHT41 แสดงผลผ่านทางหน้าจอ TFT_LCD

				
					/*
 * โปรแกรม ESP32 อ่านค่า SHT41 จำนวน 2 ตัว
 * โดยใช้ Hardware I2C 2 บัส (TwoWire) และแสดงผลบนจอ ST7789
 */

#include <Wire.h>
#include <Adafruit_SHT4x.h>
#include <TFT_eSPI.h>
#include <SPI.h>

// --- สร้าง Object สำหรับจอ TFT ---
TFT_eSPI tft = TFT_eSPI();

// --- สร้าง Object สำหรับ I2C บัสที่สอง (Controller 1) ---
// บัสแรกเราจะใช้ "Wire" ที่เป็นค่าเริ่มต้น
TwoWire I2Ctwo = TwoWire(1);

// --- สร้าง Object สำหรับเซ็นเซอร์แต่ละตัว แยกกัน ---
Adafruit_SHT4x sht4x_bus1 = Adafruit_SHT4x();
Adafruit_SHT4x sht4x_bus2 = Adafruit_SHT4x();

// --- กำหนดขา GPIO สำหรับบัสที่สอง ---
const int I2C2_SDA_PIN = 25;
const int I2C2_SCL_PIN = 26;

// --- ฟังก์ชันวาด Layout หน้าจอ ---
void drawScreenLayout() {
  tft.fillScreen(TFT_BLACK);
  tft.setTextColor(TFT_WHITE, TFT_BLACK);
  tft.setTextDatum(MC_DATUM);
  tft.setTextSize(2);
  tft.drawString("SHT4x Monitor", tft.width() / 2, 15);
  tft.drawFastHLine(10, 35, tft.width() - 20, TFT_DARKGREY);
  
  // Layout สำหรับเซ็นเซอร์ตัวที่ 1
  tft.setTextDatum(TL_DATUM);
  tft.setTextSize(2);
  tft.setTextColor(TFT_CYAN);
  tft.drawString("SHT40 Sensor(0x44)", 20, 50);
  tft.setTextColor(TFT_WHITE);
  tft.drawString("Temp:", 20, 80);
  tft.drawString("Humi:", 20, 110);
  
  // Layout สำหรับเซ็นเซอร์ตัวที่ 2
  tft.setTextColor(TFT_ORANGE);
  tft.drawString("SHT41 Sensor(0x44)", 20, 150);
  tft.setTextColor(TFT_WHITE);
  tft.drawString("Temp:", 20, 180);
  tft.drawString("Humi:", 20, 210);
}

void setup() {
  Serial.begin(115200);
  Serial.println("Dual I2C Bus SHT41 Test");

  tft.init();
  tft.setRotation(0);
  drawScreenLayout();

  // --- เริ่มต้นการทำงานของ I2C ทั้งสองบัส ---
  Wire.begin(); // เริ่มต้นบัส 0 บนขาดีฟอลต์ (21, 22)
  I2Ctwo.begin(I2C2_SDA_PIN, I2C2_SCL_PIN); // เริ่มต้นบัส 1 บนขาที่กำหนด

  Serial.println("I2C Bus 0 (Wire) and Bus 1 (I2Ctwo) initialized.");

  // --- เริ่มต้นเซ็นเซอร์ตัวที่ 1 บนบัส 0 ---
  // การส่ง &Wire เข้าไปเป็นการระบุบัสอย่างชัดเจน
  if (!sht4x_bus1.begin(&Wire)) {
    Serial.println("Failed to find SHT41 on Bus 0");
    tft.drawString("FAIL", 120, 95);
  } else {
    Serial.println("SHT41 on Bus 0 Found!");
  }

  // --- เริ่มต้นเซ็นเซอร์ตัวที่ 2 บนบัส 1 ---
  if (!sht4x_bus2.begin(&I2Ctwo)) {
    Serial.println("Failed to find SHT41 on Bus 1");
    tft.drawString("FAIL", 120, 195);
  } else {
    Serial.println("SHT41 on Bus 1 Found!");
  }
}

void loop() {
  sensors_event_t humidity1, temp1;
  sensors_event_t humidity2, temp2;

  // อ่านค่าจากเซ็นเซอร์ทั้งสองตัว
  sht4x_bus1.getEvent(&humidity1, &temp1);
  sht4x_bus2.getEvent(&humidity2, &temp2);

  tft.setTextDatum(TL_DATUM);
  tft.setTextSize(3);
  tft.setTextColor(TFT_WHITE, TFT_BLACK);

  // --- แสดงผลค่าของเซ็นเซอร์ตัวที่ 1 ---
  if (!isnan(temp1.temperature)) {
    String tempStr = String(temp1.temperature, 1) + " C";
    tft.drawString(tempStr, 110, 80);
  }
  if (!isnan(humidity1.relative_humidity)) {
    String humiStr = String(humidity1.relative_humidity, 1) + " %";
    tft.drawString(humiStr, 110, 110);
  }

  // --- แสดงผลค่าของเซ็นเซอร์ตัวที่ 2 ---
  if (!isnan(temp2.temperature)) {
    String tempStr = String(temp2.temperature, 1) + " C";
    tft.drawString(tempStr, 110, 180);
  }
  if (!isnan(humidity2.relative_humidity)) {
    String humiStr = String(humidity2.relative_humidity, 1) + " %";
    tft.drawString(humiStr, 110, 210);
  }

  delay(2000);
}
				
			

แสดงความคิดเห็น