Each Surqo field node is a self-contained IoT device that monitors soil moisture, soil temperature, air temperature and humidity, and solar UV index around the clock. Built around the ESP32 WROOM-32 and five low-cost sensors, a complete node costs approximately $15 USD and achieves roughly two weeks of autonomy on two 18650 Li-Ion cells thanks to deep sleep between readings (~10 µA at rest).Documentation Index
Fetch the complete documentation index at: https://mintlify.com/ricardomb-tech/surqo/llms.txt
Use this file to discover all available pages before exploring further.
Bill of Materials
| Component | Function | Precision | Approx. Cost |
|---|---|---|---|
| ESP32 WROOM-32 DevKit | Microcontroller + WiFi | — | $4 USD |
| DHT22 (AM2302) | Air temp + humidity | ±0.5°C, ±2% RH | $2 USD |
| DS18B20 waterproof | Soil temperature (metal probe) | ±0.5°C | $2 USD |
| Capacitive soil moisture v2.0 | Volumetric soil moisture | — | $1.5 USD |
| ML8511 UV sensor | Solar UV index | — | $2 USD |
| 2× 18650 Li-Ion battery | ~2 weeks autonomy in deep sleep | — | $4 USD |
| TP4056 with protection | Battery charger | — | $1 USD |
| IP65 enclosure | Rain + dust protection | — | $2 USD |
| Total | — | — | ~$15 USD |
Sensor Specifications
DHT22 (Air Temperature and Humidity)
The DHT22 uses a capacitive humidity element with an integrated NTC thermistor.- Humidity range: 0–100% RH, ±2% RH accuracy
- Temperature range: -40 to 80°C, ±0.5°C accuracy
- Max sampling rate: 0.5 Hz (one reading every 2 seconds)
- Firmware behaviour: The node attempts up to 5 readings and averages the first 3 valid ones to improve reliability.
DS18B20 (Soil Temperature)
The DS18B20 comes in a stainless steel waterproof probe, ideal for direct soil insertion.- Protocol: 1-Wire digital (Dallas OneWire)
- Resolution: 12-bit → 0.0625°C steps
- Conversion time: ~750 ms at 12-bit resolution
- Wiring requirement: 10 kΩ pull-up resistor between DATA and 3.3V
Capacitive Soil Moisture Sensor v2.0
The black capacitive sensor measures dielectric permittivity — it does not corrode like resistive sensors.- Output: Analog voltage → ADC (GPIO32, ADC1_CH4)
- Calibration required: You must measure the raw ADC value in completely dry soil (
SOIL_DRY_ADC) and in saturated soil (SOIL_WET_ADC) and set both constants inconfig.h. - Default calibration values in firmware:
SOIL_DRY_ADC = 3200,SOIL_WET_ADC = 1200
ML8511 UV Sensor
The ML8511 outputs an analog voltage proportional to UV irradiance.- Output voltage range: ~0.99V at UV index 0 → ~2.8V at UV index 11
- UV index formula used in firmware:
- ADC pin: GPIO34 (ADC1_CH6) — input-only on ESP32
Battery Voltage Monitor
Battery voltage is read through a resistive voltage divider.- Divider: R1 = 100 kΩ, R2 = 100 kΩ → divide-by-2 factor
- ADC pin: GPIO35 (ADC1_CH7) — input-only on ESP32
- Formula:
battery_mV = (ADC_raw × 3300 / 4095) × 2
Power Consumption
The ESP32 spends the vast majority of its time in deep sleep. The active window — reading all sensors, connecting to WiFi, and publishing via MQTT — lasts approximately 15 seconds per cycle.| Mode | Current Draw |
|---|---|
| Deep sleep | ~10 µA |
| Active (sensors reading) | ~80 mA |
| WiFi transmission | ~200–300 mA |
| Active cycle duration | ~15 seconds |
| Autonomy (2× 18650, 15 min sleep interval) | ~2 weeks |
| Autonomy (2× 18650, 30 min sleep interval) | ~4 weeks |
GPIO34, 35, 36, and 39 on the ESP32 are input-only pins — they have no
internal pull-up/pull-down resistors and cannot be used as digital outputs.
Do not attempt to drive any load from these pins.