Example shopping list, not a product recommendation. No AliExpress SKUs or prices — only part roles, quantities, why, search keywords, and tips.
Electrical safety: mains voltage (230 V) only if you know what you’re doing; prefer 5 V / 3.3 V and isolated relays. Outdoors and in domes: IP rating and dry joints. Calibrate sensors — raw ADC is not a percentage.
Calibration: two points (dry / wet) improve results.
IP rating: moisture protection for outdoor and dome use.
3.3 V vs 5 V: ESP32 is usually 3.3 V — check voltage.
Cloud cameras: privacy and local storage vs foreign cloud.
Cables and irrigation: keep connectors dry.
Your own solar sensor: ESP32 + soil moisture
Build a low-cost, solar-powered soil moisture sensor that sends readings straight to the SproutMindAI Sensors page. It wakes every 10 minutes, measures, sends and goes back to deep sleep.
ESP32 dev board (e.g. FireBeetle ESP32 or LOLIN D32, low sleep current)
1
€6–15
Choose a board with low sleep current and preferably a battery connector.
Capacitive soil moisture sensor v1.2/v2.0
1–3
€2–5 each
Doesn't corrode like resistive probes. Protect the electronics with lacquer or heat shrink.
18650 Li-ion cell (protected)
1
€5–10
Charging below 0 °C is not safe – keep it warm in winter.
Charger module TP4056 (with protection) or CN3791 (MPPT)
1
€1–6
CN3791 makes better use of the panel on cloudy days.
Solar panel 6 V, 1–2 W
1
€5–12
Face south, tilt about 45–60°.
3.3 V low-quiescent LDO (HT7333 / MCP1700)
1
~€1
Needed if the board's own regulator draws a lot during sleep.
Resistors 2 × 100 kΩ
2
<€1
Battery voltage divider to GPIO35.
IP65 junction box + cable glands
1
€5–10
Add a vent hole at the bottom to let moisture out.
Prices are approximate (web shops and AliExpress 2026) and vary. Total about €25–55. Ready-made alternative: Ecowitt GW1100 + WH51 (about $20 + $18, shop.ecowitt.com).
Wire sensor AOUT → GPIO34, VCC → GPIO25 (sensor is powered only while measuring) and GND → GND.
Connect the battery voltage via the divider (100k + 100k) midpoint to GPIO35.
Panel → charger IN, battery → BAT, charger OUT → LDO → ESP32 3V3.
Create a new device on the Sensors page (Own ESP32 sensor) and paste the address into PLANTCARE_URL.
Calibrate: read the value with the sensor in air (SOIL_DRY) and in a glass of water (SOIL_WET).
Upload with Arduino IDE (ESP32 board package 2.x or newer).
Arduino code (ESP32)
// SproutMindAI DIY sensor: ESP32 + capacitive soil moisture sensor + solar
// Posts JSON to SproutMindAI every 10 min, deep sleep in between.
#include <WiFi.h>
#include <HTTPClient.h>
const char* WIFI_SSID = "YOUR_WIFI";
const char* WIFI_PASS = "YOUR_PASSWORD";
// Copy from Anturit -> Add device -> DIY (keep it secret):
const char* PLANTCARE_URL =
"http://192.168.1.10:3000/api/sensors/json/PASTE_TOKEN_HERE";
const int SOIL_PIN = 34; // ADC1 pin (works while Wi-Fi is on)
const int SOIL_POWER_PIN = 25; // powers the sensor only while measuring
const int BATT_PIN = 35; // battery via 100k/100k divider
const int SOIL_DRY = 3000; // calibrate: sensor in air
const int SOIL_WET = 1300; // calibrate: sensor in a glass of water
const uint64_t SLEEP_MIN = 10;
int readSoilPercent() {
digitalWrite(SOIL_POWER_PIN, HIGH);
delay(300);
long sum = 0;
for (int i = 0; i < 10; i++) { sum += analogRead(SOIL_PIN); delay(20); }
digitalWrite(SOIL_POWER_PIN, LOW);
int pct = map(sum / 10, SOIL_DRY, SOIL_WET, 0, 100);
return constrain(pct, 0, 100);
}
float readBatteryVolts() {
return analogReadMilliVolts(BATT_PIN) * 2 / 1000.0; // 1:2 divider
}
void setup() {
pinMode(SOIL_POWER_PIN, OUTPUT);
analogSetAttenuation(ADC_11db);
int soil = readSoilPercent();
float batt = readBatteryVolts();
WiFi.mode(WIFI_STA);
WiFi.begin(WIFI_SSID, WIFI_PASS);
for (int i = 0; i < 40 && WiFi.status() != WL_CONNECTED; i++) delay(250);
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
http.begin(PLANTCARE_URL);
http.addHeader("Content-Type", "application/json");
String body = String("{\"device\":\"ESP32-solar\",\"soil_moisture\":[") + soil +
"],\"battery_v\":" + String(batt, 2) + "}";
http.POST(body); // 200 = stored
http.end();
}
WiFi.disconnect(true);
esp_sleep_enable_timer_wakeup(SLEEP_MIN * 60ULL * 1000000ULL);
esp_deep_sleep_start();
}
void loop() {}
JSON format
POST /api/sensors/json/<token>. Fields: soil_moisture (number or list, %), soil_temp, temp (°C), humidity (%), battery_v, solar_v. Test with curl: