Accurate temperature & humidity sensor on a compact I²C breakout (GY-SHT31-D). Perfect for ESP32/ESP8266/Raspberry Pi projects. Ready-to-use ESPHome and Arduino examples show the SHT31 connected to an ESP32 with an SSD1306 OLED display.
| Sensor | SHT31 |
| Interface | I²C (SDA, SCL) |
| Voltage | 3.3V (some breakouts support 5V VCC) — check module |
| Accuracy | ±0.3°C (typ) temperature, ±2% RH (typ) humidity |
| Operating Range | Temperature: −40…125°C; Humidity: 0–100% RH |
| Package | GY-SHT31-D breakout board |
| Condition | New |
Typical wiring for an ESP32 (I²C):
Confirm your breakout VCC voltage. Many SHT31 modules are 3.3V; some breakouts accept 5V on VCC but still use 3.3V logic. Always connect common ground and avoid powering sensors from different floating supplies.
# ESPHome YAML — ESP32 reading SHT31 and showing on SSD1306 OLED
esphome:
name: sht31_node
platform: ESP32
board: esp32dev
wifi:
ssid: "YOUR_SSID"
password: "YOUR_PASSWORD"
logger:
api:
ota:
i2c:
sda: 21
scl: 22
scan: true
sensor:
- platform: sht3x
temperature:
name: "SHT31 Temperature"
id: sht_temperature
humidity:
name: "SHT31 Humidity"
id: sht_humidity
update_interval: 30s
font:
- file: "fonts/Roboto-Regular.ttf"
id: font_reg
size: 12
- file: "fonts/Roboto-Regular.ttf"
id: font_big
size: 24
display:
- platform: ssd1306_i2c
model: "SSD1306 128x64"
address: 0x3C
lambda: |-
it.printf(0, 0, id(font_reg), "SHT31 Sensor");
it.printf(0, 18, id(font_big), "%.1f°C", id(sht_temperature).state);
it.printf(0, 44, id(font_reg), "RH: %.1f %%", id(sht_humidity).state);
update_interval: 10s
Notes: change Wi-Fi creds and I²C pins as needed. Update OLED address if it's 0x3D. Upload fonts or use built-in fonts.
// Arduino (ESP32) — SHT31 + SSD1306 example
#include <Wire.h>
#include <Adafruit_SHT31.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
Adafruit_SHT31 sht31 = Adafruit_SHT31();
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
void setup() {
Serial.begin(115200);
Wire.begin(21, 22); // SDA = 21, SCL = 22 (ESP32)
if (!sht31.begin(0x44)) {
Serial.println("Couldn't find SHT31");
while (1) delay(1);
}
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println("SSD1306 allocation failed");
while(1) delay(1);
}
display.clearDisplay();
display.setTextColor(SSD1306_WHITE);
}
void loop() {
float t = sht31.readTemperature();
float h = sht31.readHumidity();
if (!isnan(t)) Serial.print("Temp: "), Serial.println(t);
if (!isnan(h)) Serial.print("Hum: "), Serial.println(h);
display.clearDisplay();
display.setTextSize(1);
display.setCursor(0,0);
display.println("SHT31 Readings");
display.setTextSize(2);
display.setCursor(0,18);
if (isnan(t) || isnan(h)) {
display.println("Sensor error");
} else {
display.printf("%.1f C", t);
display.setTextSize(1);
display.setCursor(0,44);
display.printf("RH: %.1f %%", h);
}
display.display();
delay(5000);
}
Notes: Install Adafruit SHT31 and SSD1306 libraries. Confirm sensor address (0x44 or 0x45) and I²C wiring.
Ships from UK. International shipping via Global Shipping Programme. 30-day returns accepted. policy.