Temperature and Humidity Sensor Node Design
Table
| Net | ESP32-C3 pin | Firmware name |
|---|---|---|
| I2C_SDA | GPIO4 | SDA_PIN |
| I2C_SCL | GPIO5 | SCL_PIN |
| STATUS_LED | GPIO7 | STATUS_LED_PIN |
| USB_DN | GPIO18 | Native USB D− |
| USB_DP | GPIO19 | Native USB D+ |
| ESP_BOOT_IO9 | GPIO9 | BOOT strap / button |
| ESP_BOOT_IO8 | GPIO8 | Download strap pull-up |
| ESP_BOOT_IO2 | GPIO2 | Boot recommendation pull-up |
Ini
[env:esp32-c3-devkitm-1] platform = espressif32 board = esp32-c3-devkitm-1 framework = arduino monitor_speed = 115200 lib_deps = sensirion/Sensirion I2C SHT4x build_flags = -D ARDUINO_USB_MODE=1 -D ARDUINO_USB_CDC_ON_BOOT=1
Cpp
#include <Arduino.h> #include <Wire.h> #include <WiFi.h> #include <SensirionI2CSht4x.h> #define SDA_PIN 4 #define SCL_PIN 5 #define STATUS_LED_PIN 7 const char* WIFI_SSID = "YOUR_SSID"; const char* WIFI_PASS = "YOUR_PASSWORD"; SensirionI2CSht4x sht4x; unsigned long lastSampleMs = 0; const unsigned long SAMPLE_PERIOD_MS = 60000; void connectWiFi() { WiFi.mode(WIFI_STA); WiFi.begin(WIFI_SSID, WIFI_PASS); unsigned long start = millis(); while (WiFi.status() != WL_CONNECTED && millis() - start < 15000) { delay(250); } } void setup() { pinMode(STATUS_LED_PIN, OUTPUT); digitalWrite(STATUS_LED_PIN, LOW); Serial.begin(115200); delay(1000); Wire.begin(SDA_PIN, SCL_PIN); sht4x.begin(Wire); sht4x.softReset(); delay(10); connectWiFi(); } void loop() { if (millis() - lastSampleMs >= SAMPLE_PERIOD_MS) { lastSampleMs = millis(); float temperatureC = 0.0f; float humidityRH = 0.0f; uint16_t error = sht4x.measureHighPrecision(temperatureC, humidityRH); digitalWrite(STATUS_LED_PIN, HIGH); delay(25); digitalWrite(STATUS_LED_PIN, LOW); if (!error) { Serial.printf("T=%.2f C, RH=%.2f %%\n", temperatureC, humidityRH); } else { Serial.printf("SHT4x read error: %u\n", error); } if (WiFi.status() != WL_CONNECTED) connectWiFi(); } }
Bash
pio run pio run -t upload pio device monitor
Pin Map
PlatformIO Example
Arduino Firmware Skeleton
Bring-up Commands
Low-Power Firmware Notes