ต่อ SHT41 สองตัวกับ Raspberry Pi Pico ยังไง เมื่อ I²C Address ชนกัน?
อยากวัดอุณหภูมิและความชื้นสองจุดพร้อมกัน แต่ SHT41 สองตัวที่ใช้ใน Project นี้ตอบอยู่ที่ Address 0x44 เหมือนกัน ถ้าเอาไปต่อบน I²C Bus เดียวกันตรง ๆ Controller ก็แยกไม่ออกว่ากำลังคุยกับ Sensor ตัวไหน
Project ของ AkashWave RF แก้ปัญหานี้ด้วยจุดแข็งของ Raspberry Pi Pico: RP2040 มี I²C Controller สองชุด จึงแยก SHT41 ตัวแรกไปไว้บน I²C0 และตัวที่สองไปไว้บน I²C1 โดยไม่ต้องเปลี่ยน Address ของ Sensor
จากนั้น Pico อ่าน Temperature และ Relative Humidity จากทั้งสองตัว คำนวณ Heat Index และแสดงข้อมูลบน OLED 128×64 โดยระบบยังตรวจได้ด้วยว่า Sensor ตัวไหนถูกถอดออก และสามารถกลับมาอ่านใหม่เมื่อเสียบ Sensor กลับเข้าไป
- SHT41 สองตัวใน Project ใช้ I²C Address 0x44 เหมือนกัน
- Raspberry Pi Pico มี I²C Controller สองชุด จึงแยก Sensor ไปคนละ Bus ได้
- I²C0 ใช้ GPIO4 / GPIO5 และแชร์ Bus กับ OLED ที่ Address 0x3C
- I²C1 ใช้ GPIO10 / GPIO11 สำหรับ SHT41 ตัวที่สอง
- ใช้งาน Sensor เพียงตัวเดียวก็ได้ ระบบจะให้ Sensor ที่ยังเชื่อมต่อทำงานต่อ
- Code ใช้ High Precision Mode และปิด Heater ของ SHT41
- OLED แสดง Temperature, Humidity และ Heat Index ของ Sensor ทั้งสองฝั่ง
- ผลเปรียบเทียบ SHT41 กับ DHT22 เป็นการทดลองของผู้สร้าง ไม่ใช่ Benchmark สำหรับ Sensor ทุกตัว
Project นี้ทำอะไร?
ระบบนี้เป็น Dual-sensor Temperature, Humidity และ Heat Index Monitor โดยใช้ SHT41 สูงสุดสองตัว และจอ OLED 128×64 หนึ่งจอ
จุดเด่นของ Project ไม่ใช่เพียงการอ่าน Sensor สองตัว แต่คือการแก้ปัญหา Address ชนกัน โดยใช้ Hardware I²C สองชุดที่มีอยู่บน RP2040 แทนการเพิ่ม I²C Multiplexer หรือพยายามเปลี่ยน Address ของ Sensor
ปัญหาใหญ่: SHT41 สองตัวใช้ Address เดียวกัน
I²C ใช้ Address เพื่อระบุว่า Controller ต้องการสื่อสารกับ Device ตัวใดบน Bus
ใน Code ของ Project SHT41 ทั้งสองตัวถูกตรวจที่: 0x44
ถ้าเอา Sensor สองตัวที่ตอบ Address เดียวกัน ไปวางบน Bus เดียวกัน Pico จะไม่สามารถเลือกคุยกับ Sensor ทีละตัวด้วย Address อย่างเดียวได้
ไม่เปลี่ยน Address แต่แยก Sensor ไปอยู่คนละ Hardware I²C Controller
Raspberry Pi Pico แก้ปัญหาด้วย I²C0 + I²C1
RP2040 มี Hardware I²C Controller สองชุด คือ I²C0 และ I²C1
Project จึงกำหนด:
| Bus | SDA | SCL | Device |
|---|---|---|---|
| I²C0 / Wire | GPIO4 | GPIO5 | SHT41 #1 + OLED |
| I²C1 / Wire1 | GPIO10 | GPIO11 | SHT41 #2 |
OLED สามารถแชร์ I²C0 กับ Sensor #1 ได้ เพราะ OLED ใช้ Address 0x3C ขณะที่ SHT41 ใน Project ใช้ 0x44
SHT41 #2 @ 0x44 → I²C1
Hardware ที่ต้องใช้
- SHT41 จำนวน 1 หรือ 2 ตัว
- Raspberry Pi Pico
- Male-to-Male Jumper Cable
- OLED 128×64
- Breadboard
- USB Cable
Circuit Diagram และ Pin ที่ใช้
| อุปกรณ์ | Bus | Pin ที่ Code กำหนด | Address |
|---|---|---|---|
| SHT41 #1 | I²C0 | SDA GPIO4 / SCL GPIO5 | 0x44 |
| OLED | I²C0 | แชร์ SDA/SCL กับ I²C0 | 0x3C |
| SHT41 #2 | I²C1 | SDA GPIO10 / SCL GPIO11 | 0x44 |
Pin Mapping ในตารางยึดจาก Arduino Code ที่ผู้สร้างให้ไว้ ส่วนรายละเอียด Power Wiring ควรตรวจจาก Schematic ต้นฉบับและ Module ที่ใช้งานจริง
Architecture ของ Dual SHT41 Monitor
SHT41 #2 → Wire1 / I²C1 → Pico
Software สร้าง Object Sensor แยกเป็น: sht1 และ sht2
ตอน Setup ระบบจะเริ่ม I²C0 และ I²C1 แยกกัน แล้วตรวจว่ามี Device ที่ Address 0x44 อยู่บนแต่ละ Bus หรือไม่
เมื่อเจอ Sensor Code จะกำหนด:
SHT4X_HIGH_PRECISIONSHT4X_NO_HEATER
ถ้าใช้ SHT41 แค่ตัวเดียวได้ไหม?
ได้
Project ถูกเขียนให้ตรวจ Sensor แต่ละ Bus แยกกัน ถ้า Sensor ตัวใดไม่พบ Sensor อีกตัวจะยังอ่านและแสดงค่าต่อไป
ใน Code จริง บริเวณของ Sensor ที่หาย จะแสดงข้อความ:
ERROR
ดังนั้นผู้ใช้ไม่จำเป็นต้องมี SHT41 สองตัว ถึงจะทดลอง Project นี้ได้
Code ตรวจ Sensor หลุดและต่อกลับอย่างไร?
จุดที่น่าสนใจคือ Sensor Presence ไม่ได้ถูกตรวจเฉพาะตอน Boot
ในทุก Loop Code เรียก: devicePresent() เพื่อตรวจ Address 0x44 บน Bus ของ Sensor แต่ละตัว
หาก Sensor หายไป Flag เช่น sensor1_ok จะถูกเปลี่ยนเป็น false
และหาก Sensor ถูกเสียบกลับ Code จะลอง begin() ใหม่และพิมพ์ข้อความใน Serial เช่น:
วิธีนี้ทำให้ Prototype รับมือกับการถอดและเสียบ Sensor กลับ ได้ดีกว่า Code แบบที่ตรวจ Hardware เพียงครั้งเดียวตอน Startup
SHT41 วัดอะไร และสเปกจาก Sensirion เป็นอย่างไร?
SHT41 เป็น Digital Temperature และ Humidity Sensor ของ Sensirion ที่ใช้ I²C Interface และได้รับ Factory Calibration
| Specification | SHT41 ตาม Sensirion |
|---|---|
| Typical Relative Humidity Accuracy | ±1.8 %RH |
| Typical Temperature Accuracy | ±0.2°C |
| Relative Humidity Range | 0–100 %RH |
| Operating Temperature | -40 ถึง 125°C |
| Supply Voltage | 1.08–3.6 V |
| Interface | I²C |
| Calibration | Factory calibration |
SHT41 vs DHT22 ในการทดลองนี้ต่างกันอย่างไร?
ผู้สร้างนำ:
- DHT22 จำนวน 2 ตัว
- SHT41 จำนวน 2 ตัว
มาทดลองพร้อมกัน และรายงานว่า DHT22 สองตัว ให้ค่าต่างกันสังเกตได้มากกว่า ขณะที่ SHT41 สองตัวให้ค่าคล้ายกันมาก และบางช่วงให้ค่าเท่ากัน
Heat Index ใน Project คืออะไร?
นอกจาก Temperature และ Relative Humidity Code ยังสร้างค่า Heat Index สำหรับ Sensor แต่ละตัว
Function: computeHeatIndexC() จะรับ Temperature °C และ Humidity จากนั้นแปลง Temperature เป็น Fahrenheit ใช้สมการที่เขียนไว้ใน Source Code แล้วแปลงผลลัพธ์กลับเป็น Celsius
OLED แสดงข้อมูลอะไร?
จอถูกแบ่งครึ่งเป็น Sensor 1 และ Sensor 2 ด้วยเส้นกลางแนวตั้ง
แต่ละฝั่งแสดง:
- T: Temperature
- H: Relative Humidity
- HI: Heat Index
หาก Sensor ตัวใดหาย ฝั่งนั้นจะเปลี่ยนเป็นข้อความ Error ขณะที่อีกฝั่งยังอัปเดตตามปกติ
ท้าย Loop มี delay(1000) จึงมีช่วงรอประมาณหนึ่งวินาทีระหว่างรอบของ Main Loop แต่ไม่ควรเรียกว่า Sampling Rate 1 Hz แบบแม่นยำ เพราะการอ่าน Sensor, Serial และ OLED ใช้เวลาเพิ่มด้วย
Source Code สำหรับ Dual SHT41 Monitor
Library หลักที่ Source ใช้:
- Wire
- Adafruit_SHT4x
- Adafruit_GFX
- Adafruit_SSD1306
#include <Wire.h>
#include <Adafruit_SHT4x.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
// ---------- I2C Pins ----------
#define I2C0_SDA 4
#define I2C0_SCL 5
#define I2C1_SDA 10
#define I2C1_SCL 11
// ---------- OLED ----------
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_ADDRESS 0x3C
Adafruit_SSD1306 display(
SCREEN_WIDTH,
SCREEN_HEIGHT,
&Wire,
-1
);
// ---------- Sensor Objects ----------
Adafruit_SHT4x sht1;
Adafruit_SHT4x sht2;
bool sensor1_ok = false;
bool sensor2_ok = false;
// ---------- Heat Index ----------
float computeHeatIndexC(float tempC, float humidity)
{
float tempF = tempC * 9.0 / 5.0 + 32.0;
float hiF =
-42.379 +
2.04901523 * tempF +
10.14333127 * humidity -
0.22475541 * tempF * humidity -
0.00683783 * tempF * tempF -
0.05481717 * humidity * humidity +
0.00122874 * tempF * tempF * humidity +
0.00085282 * tempF * humidity * humidity -
0.00000199 * tempF * tempF *
humidity * humidity;
return (hiF - 32.0) * 5.0 / 9.0;
}
// ---------- Check Sensor Presence ----------
bool devicePresent(TwoWire &bus, uint8_t address)
{
bus.beginTransmission(address);
return (bus.endTransmission() == 0);
}
// ---------- OLED Display ----------
void updateOLED(
bool sensor1_present,
float temp1,
float hum1,
float HI1,
bool sensor2_present,
float temp2,
float hum2,
float HI2)
{
display.clearDisplay();
// ---------- SENSOR 1 ----------
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.println("SENSOR 1");
display.drawLine(0, 9, 63, 9, SSD1306_WHITE);
if (sensor1_present)
{
display.setCursor(0, 14);
display.print("T:");
display.print(temp1, 1);
display.println(" C");
display.setCursor(0, 29);
display.print("H:");
display.print(hum1, 1);
display.println(" %");
display.setCursor(0, 44);
display.print("HI:");
display.print(HI1, 1);
display.println(" C");
}
else
{
display.setCursor(5, 27);
display.println("SENSOR");
display.setCursor(4, 39);
display.println("ERROR");
}
// ---------- SENSOR 2 ----------
display.setCursor(68, 0);
display.println("SENSOR 2");
display.drawLine(64, 9, 127, 9, SSD1306_WHITE);
if (sensor2_present)
{
display.setCursor(68, 14);
display.print("T:");
display.print(temp2, 1);
display.println(" C");
display.setCursor(68, 29);
display.print("H:");
display.print(hum2, 1);
display.println(" %");
display.setCursor(68, 44);
display.print("HI:");
display.print(HI2, 1);
display.println(" C");
}
else
{
display.setCursor(73, 27);
display.println("SENSOR");
display.setCursor(72, 39);
display.println("ERROR");
}
// ---------- Divider ----------
display.drawLine(64, 0, 64, 63, SSD1306_WHITE);
display.display();
}
void setup()
{
pinMode(6, OUTPUT);
Serial.begin(115200);
delay(2000);
Serial.println();
Serial.println("========================================");
Serial.println(" Dual SHT41 Monitor - Raspberry Pi Pico ");
Serial.println("========================================");
// -------- I2C0 --------
Wire.setSDA(I2C0_SDA);
Wire.setSCL(I2C0_SCL);
Wire.begin();
// -------- I2C1 --------
Wire1.setSDA(I2C1_SDA);
Wire1.setSCL(I2C1_SCL);
Wire1.begin();
// -------- OLED --------
if (!display.begin(
SSD1306_SWITCHCAPVCC,
OLED_ADDRESS))
{
Serial.println("OLED NOT detected");
}
else
{
display.setRotation(0);
display.clearDisplay();
display.setTextColor(SSD1306_WHITE);
display.setTextSize(1);
display.setCursor(22, 20);
display.println("DUAL SHT41");
display.setCursor(28, 35);
display.println("MONITOR");
display.display();
delay(1000);
}
delay(200);
// -------- Sensor 1 --------
if (devicePresent(Wire, 0x44))
{
if (sht1.begin(&Wire))
{
sht1.setPrecision(SHT4X_HIGH_PRECISION);
sht1.setHeater(SHT4X_NO_HEATER);
sensor1_ok = true;
Serial.println("Sensor #1 Found on I2C0");
}
}
if (!sensor1_ok)
{
Serial.println("Sensor #1 NOT detected");
}
// -------- Sensor 2 --------
if (devicePresent(Wire1, 0x44))
{
if (sht2.begin(&Wire1))
{
sht2.setPrecision(SHT4X_HIGH_PRECISION);
sht2.setHeater(SHT4X_NO_HEATER);
sensor2_ok = true;
Serial.println("Sensor #2 Found on I2C1");
}
}
if (!sensor2_ok)
{
Serial.println("Sensor #2 NOT detected");
}
}
void loop()
{
digitalWrite(6, HIGH);
Serial.println();
Serial.println("================================");
float temp1_display = 0;
float hum1_display = 0;
float HI1_display = 0;
float temp2_display = 0;
float hum2_display = 0;
float HI2_display = 0;
bool sensor1_present = false;
bool sensor2_present = false;
// ---------- SENSOR 1 ----------
if (devicePresent(Wire, 0x44))
{
if (!sensor1_ok)
{
if (sht1.begin(&Wire))
{
sht1.setPrecision(SHT4X_HIGH_PRECISION);
sht1.setHeater(SHT4X_NO_HEATER);
sensor1_ok = true;
Serial.println("Sensor #1 Reconnected");
}
}
sensors_event_t hum1, temp1;
sht1.getEvent(&hum1, &temp1);
float HI1 = computeHeatIndexC(
temp1.temperature,
hum1.relative_humidity
);
sensor1_present = true;
temp1_display = temp1.temperature;
hum1_display = hum1.relative_humidity;
HI1_display = HI1;
Serial.println("SENSOR #1 (I2C0)");
Serial.print("Temperature : ");
Serial.print(temp1.temperature, 2);
Serial.println(" C");
Serial.print("Humidity : ");
Serial.print(hum1.relative_humidity, 2);
Serial.println(" %");
Serial.print("Heat Index : ");
Serial.print(HI1, 2);
Serial.println(" C");
}
else
{
sensor1_ok = false;
Serial.println("SENSOR #1 (I2C0)");
Serial.println(">>> DISCONNECTED <<<");
}
Serial.println();
// ---------- SENSOR 2 ----------
if (devicePresent(Wire1, 0x44))
{
if (!sensor2_ok)
{
if (sht2.begin(&Wire1))
{
sht2.setPrecision(SHT4X_HIGH_PRECISION);
sht2.setHeater(SHT4X_NO_HEATER);
sensor2_ok = true;
Serial.println("Sensor #2 Reconnected");
}
}
sensors_event_t hum2, temp2;
sht2.getEvent(&hum2, &temp2);
float HI2 = computeHeatIndexC(
temp2.temperature,
hum2.relative_humidity
);
sensor2_present = true;
temp2_display = temp2.temperature;
hum2_display = hum2.relative_humidity;
HI2_display = HI2;
Serial.println("SENSOR #2 (I2C1)");
Serial.print("Temperature : ");
Serial.print(temp2.temperature, 2);
Serial.println(" C");
Serial.print("Humidity : ");
Serial.print(hum2.relative_humidity, 2);
Serial.println(" %");
Serial.print("Heat Index : ");
Serial.print(HI2, 2);
Serial.println(" C");
}
else
{
sensor2_ok = false;
Serial.println("SENSOR #2 (I2C1)");
Serial.println(">>> DISCONNECTED <<<");
}
Serial.println("================================");
updateOLED(
sensor1_present,
temp1_display,
hum1_display,
HI1_display,
sensor2_present,
temp2_display,
hum2_display,
HI2_display
);
delay(1000);
}
OLED กลับหัวต้องแก้อะไร?
มี Detail เล็ก ๆ ที่ Source อธิบายไม่ตรงกับ Code Listing และควรรู้ก่อน Copy Code
ใน Code ที่เผยแพร่มี:
display.setRotation(0);แต่ท้าย Tutorial ผู้สร้างอธิบายว่า Prototype ของเขาติดจอ OLED กลับหัว จึงใช้:
display.setRotation(2);หากติด OLED ตาม Orientation ปกติ ค่าที่เหมาะสมจึงขึ้นกับการติดตั้งจริง ไม่ควร Copy Rotation โดยไม่ดูจอของตัวเอง
ดูการทดลอง SHT41, DHT22 และการประกอบจริง
Video ของผู้สร้างรวมทั้ง Circuit Explanation, การใช้งาน Dual SHT41 และการทดลองเปรียบเทียบกับ DHT22
เปิด Schematic PDF ต้นฉบับ
ถ้าต้องการ Build ตามจริง แนะนำเปิด Schematic PDF ควบคู่กับ Code และ Circuit Diagram เพื่อเช็ก Connection ของ Module ที่ใช้งานจริง
เปิด Schematic PDF ต้นฉบับFAQ: Dual SHT41 กับ Raspberry Pi Pico
1. ทำไม SHT41 สองตัวต่อ I²C Bus เดียวกันไม่ได้ใน Project นี้?
เพราะ Code ใช้ SHT41 ที่ Address 0x44 เหมือนกันทั้งสองตัว จึงแยกไปใช้ I²C0 และ I²C1
2. Raspberry Pi Pico มี I²C กี่ชุด?
RP2040 มี Hardware I²C Controller สองชุด ซึ่ง Project ใช้เป็น I²C0 และ I²C1
3. I²C0 ใช้ Pin ไหนใน Code นี้?
GPIO4 เป็น SDA และ GPIO5 เป็น SCL
4. I²C1 ใช้ Pin ไหน?
GPIO10 เป็น SDA และ GPIO11 เป็น SCL
5. OLED อยู่บน Bus ไหน?
OLED ใช้ Wire / I²C0 ร่วมกับ SHT41 #1 โดย OLED ใช้ Address 0x3C
6. ใช้ SHT41 แค่ตัวเดียวได้ไหม?
ได้ Code รองรับกรณีที่อีก Sensor ไม่เชื่อมต่อ และ Sensor ที่เหลือยังอ่านค่าและแสดงผลได้
7. ถอด Sensor ระหว่างทำงานได้ไหม?
Code ตรวจ Presence ใน Loop และมี Logic สำหรับตรวจการ Disconnect / Reconnect ของ Sensor
8. SHT41 วัด Heat Index ได้โดยตรงหรือไม่?
ไม่ SHT41 วัด Temperature และ Relative Humidity ส่วน Heat Index ถูกคำนวณจาก Formula ใน Firmware
9. SHT41 แม่นกว่า DHT22 แน่นอนหรือไม่?
ในการทดลองของผู้สร้าง SHT41 สองตัวให้ค่าคล้ายกันมากกว่า DHT22 สองตัว แต่ Source ไม่ได้เป็น Benchmark ขนาดใหญ่ จึงไม่ควรขยายผลเป็นข้อสรุปทุกสถานการณ์
10. SHT41 มี Accuracy เท่าไร?
Sensirion ระบุ Typical RH Accuracy ±1.8 %RH และ Typical Temperature Accuracy ±0.2°C สำหรับ SHT41 แต่เป็น Specification ของ Sensor IC ไม่ใช่การรับรอง Accuracy ของ Prototype ทั้งระบบ
11. Project ใช้ Heater ของ SHT41 หรือไม่?
ไม่ Code ตั้ง SHT4X_NO_HEATER สำหรับ Sensor ทั้งสองตัว
12. Code ใช้ Precision Mode ไหน?
ใช้ SHT4X_HIGH_PRECISION
13. OLED Address เท่าไร?
Code กำหนดไว้ที่ 0x3C
14. ทำไมจอ OLED อาจกลับหัว?
ผู้สร้างติด OLED กลับหัวใน Prototype และกล่าวถึงการใช้ setRotation(2) แต่ Code Listing ที่ให้มาใช้ setRotation(0) จึงต้องปรับตาม Orientation จริง
15. SHT41 ใน Project นี้คือ SHT41I Industrial Variant หรือไม่?
Source ไม่ได้ระบุ Part Number ที่ยืนยันว่าเป็น SHT41I จึงไม่ควรเปลี่ยนชื่อ Sensor ในบทความให้เป็น SHT41I
สรุป: จุดเด่นของ Project นี้ไม่ใช่แค่ Sensor แม่นขึ้น แต่คือการแก้ I²C Address ชนกันแบบตรงไปตรงมา
ถ้ามองภายนอก Project นี้คือ Temperature และ Humidity Monitor ที่มี Sensor สองตัวกับ OLED หนึ่งจอ
แต่ในมุม Embedded จุดที่มีประโยชน์กว่าคือ การใช้ Hardware I²C สองชุดของ Raspberry Pi Pico เพื่อจัดการ Device ที่มี Address เหมือนกัน โดยไม่ต้องเพิ่ม Multiplexer
Code ยังเพิ่ม Logic ตรวจ Sensor หลุด, Reconnect, High Precision Measurement, Heat Index Calculation และแบ่ง OLED เป็นสองฝั่ง ทำให้ Project นี้เหมาะกับคนที่อยากก้าวจาก “อ่าน Sensor ตัวเดียว” ไปสู่ Multi-sensor System ที่จัดการ Error ได้จริงมากขึ้น
ส่วนการเปรียบเทียบกับ DHT22 ควรมองเป็นผลการทดลองของ Creator มากกว่าคำตัดสินว่า Sensor ตัวหนึ่ง “ดี” หรือ “แย่” ในทุก Application
Project นี้มีทั้ง Code, Circuit และ Video แนะนำดู Source ควบคู่กัน
หากต้องการสร้างตามจริง ควรตรวจ Circuit Diagram, Schematic PDF, Source Code และ Part Number ของ SHT41 Module ที่ใช้งาน ก่อนต่อ Hardware
อ่าน Tutorial Dual SHT41 ฉบับเต็มจาก Instructables
References / แหล่งข้อมูลต้นฉบับ
- Instructables — Dual SHT41 Temperature & Humidity Monitor With Raspberry Pi Pico
- Sensirion — SHT41 Product Information
- Raspberry Pi — RP2040 Technical Specifications
- Instructables — Dual SHT41 Raspberry Pi Pico OLED Schematic
- YouTube / AkashWave RF — SHT41 vs DHT22 and Dual SHT41 Monitor
อยากลองทำ Environmental Monitoring บน Raspberry Pi Pico?
ถ้ากำลังทดลอง Raspberry Pi Pico, Temperature / Humidity Sensor, OLED, Breadboard หรืออุปกรณ์สำหรับ Multi-sensor Project สามารถสอบถามทีม Globalbyte เรื่องบอร์ดและอุปกรณ์ที่เหมาะกับงานได้
ก่อนเลือก Sensor ควรตรวจ Part Number, I²C Address, Supply Voltage และ Interface ของ Module ให้ตรงกับ Architecture ที่ต้องการ
ค่า Accuracy, Operating Range และ Supply Voltage ที่กล่าวถึงเป็น Specification ของ SHT41 Sensor จาก Sensirion ไม่ใช่ผล Calibration ของ Module หรือ Prototype ทั้งระบบใน Tutorial
การทดลองเปรียบเทียบ SHT41 กับ DHT22 ใช้ Sensor อย่างละสองตัวตามการทดลองของผู้สร้าง และไม่มีข้อมูล Statistical Benchmark ขนาดใหญ่ จึงไม่ควรใช้ผลดังกล่าวสรุป Performance ของ Sensor ทุกตัวหรือทุก Application
ชื่อ Tutorial และ Video ใช้คำว่า Industrial Grade แต่ Source ไม่ได้ระบุ Part Number ที่ยืนยันว่า Module เป็น SHT41I ซึ่งเป็น Industrial-oriented Product Family แยกต่างหากของ Sensirion บทความนี้จึงคงชื่อ Sensor เป็น SHT41 ตาม Source เท่านั้น
Heat Index ใน Project เป็นค่าที่ Firmware คำนวณจาก Temperature และ Relative Humidity ไม่ใช่ค่าที่ SHT41 วัดโดยตรง และ Source ไม่ได้ให้ Accuracy หรือ Validation Range ของ Heat Index Formula สำหรับการใช้งานด้าน Safety
Source มีความไม่สอดคล้องเรื่อง OLED Rotation: Code Listing ใช้ setRotation(0) ขณะที่คำอธิบายท้าย Tutorial กล่าวถึง setRotation(2) สำหรับ Prototype ที่ติด OLED กลับหัว จึงควรตั้งค่าตาม Orientation ของจอจริง
Schematic PDF มีให้จาก Source ต้นฉบับ แต่บทความนี้ไม่ได้สร้างหรือเพิ่มเติม Power Wiring, Pull-up Value, Module Current, Total Power Consumption, Battery Runtime, Heat Index Accuracy, Thailand Availability หรือ Stock ที่ Source ไม่ได้ระบุ