
โมดูลเซ็นเซอร์อุณหภูมิและความชื้น SHT30, SHT31, SHT35, SHT40, SHT41
ตัวเลือกสินค้า:
- SHT30
- SHT31
- SHT35
- SHT40
- 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
คุณสมบัติ | SHT30 | SHT31 | SHT35 |
ความแม่นยำความชื้น (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 %RH | 0 ถึง 100 %RH | 0 ถึง 100 %RH |
แรงดันไฟฟ้าใช้งาน | 2.15 V – 5.5 V | 2.15 V – 5.5 V | 2.15 V – 5.5 V |
อินเทอร์เฟซ | I2C | I2C | I2C |
การเปรียบเทียบภายใน SHT4x (SHT40 vs SHT41)
การแบ่งแยกรุ่นใน SHT4x ก็ใช้ความแม่นยำเป็นเกณฑ์หลักเช่นกัน ทุกรุ่นในนี้มีคุณสมบัติพื้นฐานที่เหนือกว่า SHT3x เช่น ขนาดที่เล็กกว่าและการใช้พลังงานที่ต่ำกว่ามาก
ตารางที่ 2: เปรียบเทียบคุณสมบัติจำเพาะของ SHT4x
คุณสมบัติ | SHT40 | SHT41 |
ความแม่นยำความชื้น (Typical) | ±1.8 %RH | ±1.8 %RH |
ความแม่นยำอุณหภูมิ (Typical) | ±0.2 ∘C | ±0.2 ∘C |
ช่วงการวัดอุณหภูมิ | -40 ถึง 125 ∘C | -40 ถึง 125 ∘C |
ช่วงการวัดความชื้น | 0 ถึง 100 %RH | 0 ถึง 100 %RH |
แรงดันไฟฟ้าใช้งาน | 1.08 V – 3.6 V | 1.08 V – 3.6 V |
อินเทอร์เฟซ | I2C | I2C |
การเปรียบเทียบระหว่าง SHT3x และ SHT4x: การอัปเกรดที่สำคัญ
โดยทั่วไปแล้ว SHT4x ถือเป็นตัวเลือกที่เหนือกว่าในเกือบทุกด้าน ยกเว้นเพียงกรณีเดียวคือความต้องการเชื่อมต่อกับระบบ 5V โดยตรงโดยไม่ใช้วงจรปรับลดแรงดันไฟฟ้า การเลือกใช้ SHT4x สำหรับโครงการใหม่เป็นทางเลือกที่สมเหตุสมผลอย่างยิ่ง เนื่องจากประสิทธิภาพที่สูงขึ้นในทุกมิติ ทั้งความแม่นยำ เวลาตอบสนองที่รวดเร็วกว่าเท่าตัว การใช้พลังงานที่ต่ำลงอย่างมาก และคุณสมบัติเพิ่มเติมที่ออกแบบมาเพื่อความทนทาน
ตารางที่ 3: เปรียบเทียบความแตกต่างที่สำคัญระหว่าง SHT3x และ SHT4x
คุณสมบัติ | SHT3x | SHT4x | ประโยชน์ของการเปลี่ยนแปลง |
ขนาดแพ็คเกจ (mm) | 2.5 x 2.5 x 0.9 | 1.5 x 1.5 x 0.5 | เล็กลงอย่างมาก ประหยัดพื้นที่บน PCB เหมาะสำหรับอุปกรณ์ขนาดเล็ก |
แรงดันไฟฟ้าต่ำสุด (V) | 2.15 V | 1.08 V | ประหยัดพลังงานสูงมาก เหมาะสำหรับอุปกรณ์ IoT ที่ใช้แบตเตอรี่ |
เวลาตอบสนองความชื้น (τ63%) | 8 วินาที | 4 วินาที | ตอบสนองต่อการเปลี่ยนแปลงของความชื้นได้เร็วกว่า 2 เท่า |
กระแสไฟฟ้าขณะพัก (Idle Current) | ~0.2 µA | 80 nA | ใช้พลังงานต่ำมากในโหมดสลีป ยืดอายุการใช้งานแบตเตอรี่ |
ฟังก์ชัน Heater | มี, สำหรับตรวจสอบความน่าเชื่อถือ | มี Heater ประสิทธิภาพสูง 3 ระดับ | ป้องกันการควบแน่นและทำความสะอาดตัวเองได้ ทำงานได้ดีในที่ชื้นสูง |
ตัวเลือกการป้องกัน | ฝาครอบป้องกัน | แผ่นกรอง PTFE (IP67) | ทนทานต่อฝุ่นและละอองน้ำ เหมาะกับสภาพแวดล้อมที่รุนแรง |
Connection Diagram
การเชื่อมต่อเซ็นเซอร์กับบอร์ดไมโครคอนโทรลเลอร์ต่างๆ มีความคล้ายคลึงกัน แต่ต้องให้ความสำคัญกับระดับแรงดันไฟฟ้าที่ถูกต้อง
- การเชื่อมต่อกับบอร์ด Arduino (Uno/Nano) :
VIN
ของโมดูล ->5V
ของ ArduinoGND
ของโมดูล ->GND
ของ ArduinoSDA
ของโมดูล ->A4
ของ ArduinoSCL
ของโมดูล ->A5
ของ Arduino
- การเชื่อมต่อกับบอร์ด ESP32 :
VDD
ของโมดูล ->3.3V
ของ ESP32GND
ของโมดูล ->GND
ของ ESP32SDA
ของโมดูล ->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
- SHT3x: มี Address เริ่มต้น (Default) คือ
ตัวอย่างการใช้งาน (Examples)
การใช้งานร่วมกับ Arduino
ไลบรารีจาก Adafruit เป็นที่นิยมอย่างสูงและใช้งานง่าย ทำให้การเริ่มต้นกับเซ็นเซอร์เหล่านี้เป็นไปอย่างรวดเร็ว
- การติดตั้งไลบรารี:
- เปิด Arduino IDE ไปที่
Tools > Manage Libraries...
- สำหรับ SHT3x: ค้นหา
Adafruit SHT31 Library
และกด Install - สำหรับ SHT4x: ค้นหา
Adafruit SHT4x
และกด Install - Arduino IDE อาจแจ้งให้ติดตั้งไลบรารีที่จำเป็นอื่นๆ เช่น
Adafruit BusIO
ให้ตอบรับการติดตั้งทั้งหมด
- เปิด Arduino IDE ไปที่
โปรแกรมตัวอย่าง SHT3x Arduino IDE
#include
#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
#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
#include
#include
#include
// --- สร้าง 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
#include
#include
#include
// --- สร้าง 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);
}

Reference & Document
Github : https://github.com/Massmore/SHT3x_SHT4x_SKU-0125_SKU-0216
Datasheet :
– SHT3x : https://sensirion.com/media/documents/213E6A3B/63A5A569/Datasheet_SHT3x_DIS.pdf
– SHT4x : https://sensirion.com/media/documents/C43ACD8C/67BD838A/HT_DS_Datasheet_SHT4xA_3.pdf