I wanted a truly beginner-friendly IoT win: a no-solder build that shows live temperature & humidity on a web page you can open on your phone—plus a /json
endpoint that’s actually useful for future projects.
A tiny Wi-Fi Home Environment Monitor using Seeed XIAO ESP32S3 + Grove SHT31 on a Grove Shield for XIAO. It serves:
/
– clean web UI with live °C and %RH
/
– clean web UI with live °C and %RH
/json
– machine-readable values for integrations
/json
– machine-readable values for integrations
No soldering: Grove cable clicks in.
- No soldering: Grove cable clicks in.
Fast success: first readings in minutes.
- Fast success: first readings in minutes.
Real skills: I²C, Arduino IDE, serial debugging, Wi-Fi, simple web server.
- Real skills: I²C, Arduino IDE, serial debugging, Wi-Fi, simple web server.
Grows with you: add MQTT/Home Assistant later without rewriting everything.
- Grows with you: add MQTT/Home Assistant later without rewriting everything.
XIAO ESP32S3 (or ESP32S3-Plus)
- XIAO ESP32S3 (or ESP32S3-Plus)
Grove Shield for XIAO (SKU 113991254)
- Grove Shield for XIAO (SKU 113991254)
Grove Temp & Humidity Sensor SHT31 (SKU 101020212)
- Grove Temp & Humidity Sensor SHT31 (SKU 101020212)
Grove cable + USB-C cable
- Grove cable + USB-C cable
The SHT31 connects via I²C at 0x44 (on this shield SDA=D4→GPIO5 and SCL=D5→GPIO6).
- The SHT31 connects via I²C at 0x44 (on this shield SDA=D4→GPIO5 and SCL=D5→GPIO6).
The firmware reads every ~2 s, applies light EMA smoothing, then:
renders a local web page (responsive)
- renders a local web page (responsive)
exposes the same numbers as JSON
- exposes the same numbers as JSON
- The firmware reads every ~2 s, applies light EMA smoothing, then:renders a local web page (responsive)exposes the same numbers as JSON
Runs entirely offline on your 2.4 GHz Wi-Fi (or a phone hotspot).
- Runs entirely offline on your 2.4 GHz Wi-Fi (or a phone hotspot).
XIAO ESP32S3 pressed into Grove Shield.
- XIAO ESP32S3 pressed into Grove Shield.
SHT31 Grove cable into a port labeled I2C/IIC (not D/A/UART).
- SHT31 Grove cable into a port labeled I2C/IIC (not D/A/UART).
Boards Manager → install esp32 by Espressif.
- Boards Manager → install esp32 by Espressif.
Board: ESP32S3 Dev Module (or Seeed Studio XIAO ESP32S3).
- Board: ESP32S3 Dev Module (or Seeed Studio XIAO ESP32S3).
Library Manager → install Adafruit SHT31.
- Library Manager → install Adafruit SHT31.
Serial Monitor: 115200 baud.
- Serial Monitor: 115200 baud.
Upload a small scanner using Wire.begin(5, 6)
.You should see Found 0x44
.
Edit WIFI_SSID / WIFI_PASS and upload.Open http://<that-IP>/ for the UI and http://<that-IP>/json for raw data.
// XIAO ESP32S3 + Grove Shield I2C pins
Wire.begin(5, 6); // SDA=GPIO5 (D4), SCL=GPIO6 (D5)
if (!sht31.begin(0x44) && !sht31.begin(0x45)) {
Serial.println("SHT31 not found");
}
Full sketch includes a tiny web server: /
(UI) and /json
(API).
No I²C device: Use an I2C socket, reseat both ends, try the other I2C port, or swap the Grove cable.
- No I²C device: Use an I2C socket, reseat both ends, try the other I2C port, or swap the Grove cable.
Wi-Fi dots forever: ESP32S3 is 2.4 GHz only. Use a 2.4 GHz SSID or a phone hotspot; recheck SSID/PASS case.
- Wi-Fi dots forever: ESP32S3 is 2.4 GHz only. Use a 2.4 GHz SSID or a phone hotspot; recheck SSID/PASS case.
Browser shows “502 / proxy” on PC: turn off system proxy or open from your phone on the same Wi-Fi.
- Browser shows “502 / proxy” on PC: turn off system proxy or open from your phone on the same Wi-Fi.
Upload fails: close Serial Monitor before uploading; re-select the COM port.
- Upload fails: close Serial Monitor before uploading; re-select the COM port.
Add °C/°F toggle and a tiny live chart.
- Add °C/°F toggle and a tiny live chart.
Publish to MQTT or log to CSV.
- Publish to MQTT or log to CSV.
Print a small case and share the STL.
- Print a small case and share the STL.
Hardware: Seeed XIAO ESP32S3, Grove Shield, Grove SHT31.Libraries: esp32 Arduino core, Adafruit SHT31.
Comments