Darlingtonia californica grows beside cold mountain streams in northern California and Oregon. The single biggest cultivation challenge is keeping roots cool (ideally below ~25°C, with 15–22°C being the sweet spot) while the plant enjoys full sun. A zeer pot — the ancient pot-in-pot evaporative cooler — is a passive-first solution: evaporation from wet fill between two terracotta pots drops the inner pot's temperature by 5–12°C below ambient.
This build uses a wide, low 35 cm outer pot with a 25 cm inner pot (5 cm gap on the sides, level rims, ~10 cm of fill below the inner pot). The inner pot sits on a deep bed of sand — the fill wraps the inner pot on all sides and below, cooling through both the walls and the sealed base. A solar-charged ESP32-C3 SuperMini controls a 5V pump that re-wets the fill on demand via a ring drip tube sitting on the fill surface between the two level rims. Two waterproof DS18B20 probes — one at root depth, one in ambient shade — measure the delta-T: the real metric of cooling performance, while a capacitive moisture probe adds root-zone telemetry.
Reservoir → pump → feed tube → ring drip tube in fill gap → water saturates sand → evaporates from outer pot surface (= cooling) → excess drains from outer pot side drain via barbed fitting → back to reservoir.
Cold wet fill → wicks through unglazed inner pot walls → into sphagnum substrate. The terracotta acts as both thermal bridge and moisture delivery system. Sand packed tight against the pot walls makes excellent thermal contact.
Water poured onto sphagnum or rain → percolates down → excess exits through inner pot side drain at 2 cm (barbed fitting + mesh cap) → into fill gap → helps keep fill wet → overflows via outer pot drain → reservoir. Below the 2 cm hole: permanent moisture reserve (Dutch pot buffer).
Three jobs simultaneously: conduct heat from the inner pot walls and base to the outer pot wall (thermal bridge on all sides), hold water in its mass between pump cycles (reservoir), and wick water upward to the outer pot surface for evaporation (capillary engine). With ~10 cm of fill below the inner pot, the sealed terracotta base becomes an additional cooling surface — heat is drawn out downward as well as laterally. The fill must also be chemically inert for Darlingtonia's zero-mineral requirement.
Well-graded quartz sand (0.5–3 mm) is the ideal fill. The wide grading is key: fine grains nest into the voids between coarse ones, giving tighter packing than any uniform grade — fewer air gaps means better thermal conductivity and capillary continuity. The fine fraction holds water and wicks, the coarse fraction keeps drainage channels open. Effective wet thermal conductivity ~2–3 W/mK. SiO2 is completely inert (TDS-safe for Darlingtonia). Sold in 25 kg sacks at any building/pool supply — one sack is more than enough (~16 L, you need ~8 L). Rinse well before use to remove dust.
Both pots use the same approach: a barbed hose fitting through the wall at ~2 cm from the base, sealed with silicone, with a mesh cap on the inside to prevent fill/substrate from clogging the drain. Two assemblies total — one for the outer pot (returns excess water to reservoir while maintaining a saturated reserve below for sustained wicking) and one for the inner pot (the Dutch pot drain with a moisture reserve below for the plant).
One 8 mm barbed hose fitting (plastic or brass, straight or 90°), a tube of aquarium-safe silicone, and a ~3 cm square of stainless steel mesh or perlon filter wool, secured with a small cable tie or wrap of stainless wire.
Seal the original bottom hole with a terracotta shard and aquarium-safe silicone, inside and out. Let cure 24h.
Drill a side hole at ~2 cm from the base. Use a 8–10 mm masonry/tile bit at low speed with water cooling. Go slow to avoid cracking — terracotta is forgiving but impatient drilling isn't. The hole should match or slightly exceed the barbed fitting's outer diameter.
Push the barbed fitting through from the outside. The barbed (ridged) end faces out — that's where the drain tube connects. The smooth inner nub protrudes 1–2 cm into the pot interior.
Seal both faces with a generous ring of aquarium-safe silicone around the fitting, on both the outside and inside pot surfaces. This waterproofs the fit and anchors the fitting.
Mesh cap on the inner nub. Wrap a small piece of stainless mesh or perlon over the protruding inner end. Secure with a cable tie cinched tight around the nub. This prevents sand from entering the fitting.
Let cure 24h. Then connect an 8 mm silicone drain tube to the barbed end outside. Route to reservoir.
Seal the original bottom hole — same method as outer pot.
Drill a side hole at ~2 cm from the base. Same bit, same patience. Slightly smaller hole is fine here (6–8 mm) since flow rate is lower.
Barbed fitting from outside (the "outside" of the inner pot faces the sand gap). Barbed end points into the fill gap; smooth nub protrudes into the sphagnum.
Silicone seal both faces.
Mesh cap on the inner nub to keep sphagnum from washing out.
No tube needed on the barbed end — it drains directly into the surrounding fill gap. Water exiting the inner pot goes straight into the sand fill, which is a bonus: it helps keep the fill wet from the inside too.
| Component | Specification | Notes |
|---|---|---|
| POT Outer terracotta pot |
35 cm Ø, low/wide, unglazed | Seal original bottom hole. Drill side drain at ~2 cm from base. |
| POT Inner terracotta pot |
25 cm Ø, unglazed | Seal original bottom hole. Drill side drain at ~2 cm from base (Dutch pot reserve). 5 cm side gap, level rims with outer pot, ~10 cm fill below. |
| POT Inner pot supports |
3× terracotta feet or flat stones, ~10 cm tall | Set inner pot at correct height for level rims. Fill packs around and below them. Or: build up compacted fill bed to ~8 cm, place inner pot on it, continue filling around sides. |
| DRAIN Barbed hose fittings ×2 |
8 mm, plastic or brass | One per pot. Straight or 90°. Push through drilled holes. |
| DRAIN Stainless mesh or perlon ×2 |
~3 cm squares | Mesh caps on inner nubs. Secured with cable ties. |
| DRAIN Aquarium-safe silicone |
1 tube, clear | Seals fittings, plugs original bottom holes. Must be 100% silicone (no anti-mould additives). |
| FILL Sand |
Well-graded quartz sand, 0.5–3 mm, 25 kg sack | Wide grading (fines nest into coarse voids) gives tight packing, good capillary retention, and drainage. One 25 kg sack (~16 L) is more than enough — budget ~8 L. Rinse 2–3× with RO water before use. |
| MEDIA Long-fiber sphagnum |
Pure long-fibre sphagnum | Inner pot substrate. Retains moisture, wicks cold from terracotta walls, zero minerals. |
| WATER Reservoir |
3–5 L, opaque, lidded | Shaded. Receives drain return from outer pot. |
| WATER 12V water pump |
R385 DC 12V diaphragm pump, low-duty cooling loop | Powered from the MT3608 boost converter (set to 12V) through the MOSFET low-side switch. Draws ~450 mA at 12V. |
| WATER Ring drip tube |
6 mm silicone, ring shape | Sits in fill gap between pot rims. Needle-punched holes every 3–4 cm. |
| WATER Feed tube |
6 mm silicone, ~1 m | Pump to ring tube. |
| WATER Drain tube |
8 mm silicone, short | Outer pot fitting to reservoir. |
| ELECTRONICS ESP32-C3 SuperMini |
USB-C, RISC-V 160 MHz, WiFi + BLE 5.0 | Deep sleep ~43 µA (desolder red LED → ~5 µA). Powered via 5V pin from the Li-ion cell, subject to board-by-board verification. Native USB-CDC for programming. |
| ELECTRONICS DS18B20 waterproof ×2 |
1 m cable, stainless steel probe | Both share the same OneWire bus on GPIO4. One sits at root depth in sphagnum, the other outside the zeer pot in shade for ambient reference. |
| ELECTRONICS Capacitive moisture probe |
3.3V analog output type | Telemetry input on GPIO2/ADC. Useful for calibration and logging; not the primary pump decision input in the default firmware. |
| ELECTRONICS IRLZ44N MOSFET |
Logic-level N-channel | Low-side pump switching from GPIO3. |
| ELECTRONICS Schottky flyback diode |
Across pump terminals | Cathode to pump positive, anode to pump negative. |
| POWER Solar panel |
5W / 5V USB-C, IP65 | Monocrystalline, outdoor-rated, with direct USB-C lead into the TP4056 module. |
| POWER TP4056 USB-C |
5V 1A Li-ion charger + protection | 4.2V charge cutoff, over-discharge protection, B+/B- to battery and OUT+/OUT- to the system rail. |
| POWER Li-ion 18650 cell |
3.7V nominal, around 3000 mAh | In a holder with spring contacts. Feeds the ESP32 5V pin and the MT3608 boost converter input. |
| POWER MT3608 boost converter |
2A, adjustable output | Standard. Boosts the 3.0–4.2V Li-ion rail to 12V for the R385 pump. Adjust trimpot to 12V before connecting the pump. |
| MISC 4.7 kΩ resistor |
DS18B20 pull-up | One resistor for the whole OneWire bus. |
| MISC 10 kΩ resistor |
MOSFET gate pull-down + float pull-up | Use two total in the canonical wiring. |
| MISC IP65 enclosure (electronics) |
~100×68×50 mm | ESP32, TP4056, battery holder, connectors, and breadboard. Shade-mounted and kept dry. |
| MISC IP65 enclosure (pump side) |
~100×68×50 mm or similar | Pump wiring and MT3608 boost converter. Keep water fittings isolated from the controller enclosure. |
| MISC Float switch |
NC elbow float switch | Mounted through the side of the reservoir bucket. NC float switch: float up (water present) → switch opens → GPIO5 = HIGH → pump OK. Float down (low water) → switch closes → GPIO5 = LOW → pump blocked. |
This project is now standardized on a single Li-ion 18650, not LiFePO4. Feeding the ESP32-C3 SuperMini from the raw Li-ion rail into its 5V pin is still board-dependent, so verify your exact clone before sealing the enclosure.
Both probes are off-board waterproof cable sensors. In the Fritzing view they are shown as DS18B20 package stand-ins so the harness routing is easy to read. SHT35/SHT4x-style breakout boards are great ambient sensors, but they are poor substitutes here because they are not waterproof insertion probes and long outdoor I2C runs are fussier than a single OneWire cable. If you want a higher-end temperature sensor, look at a waterproof 10k NTC or PT1000 probe instead. If you know the 64-bit addresses of each DS18B20 probe, paste them into the sketch and skip the cooler-probe auto-identification fallback.
The moisture probe is telemetry-only by default. It is useful for calibration, logging, and spotting unexpected drying, but the pump logic still keys primarily off root temperature and the float-switch interlock. Use a capacitive 3.3V analog probe here, not a resistive fork sensor.
The MT3608 boost converter provides a stable 12V to the R385 pump from the 3.0–4.2V Li-ion rail. Adjust the trimpot until a multimeter reads 12V on VOUT before connecting the pump.
Float up (water present) → switch opens → GPIO5 = HIGH → pump runs. Float down (low water) → switch closes → GPIO5 = LOW → pump blocked. Note: firmware should use waterOk = (digitalRead(5) == HIGH).
The current canonical build is: 5W USB solar panel → TP4056 → 18650 Li-ion → ESP32-C3 SuperMini, with an MT3608 boost converter providing stable 12V to the R385 pump, switched by a logic-level MOSFET (low-side). Two waterproof DS18B20 probes share GPIO4, the capacitive moisture probe feeds GPIO2/ADC, and the NC float switch lands on GPIO5.
The primary circuit reference is the 6-page sectioned schematic (PDF), which covers power supply, sensors, pump driver, and pin reference with full annotations.
Project files: schematic-sections.pdf · zeer-pot-v24.fzz (Fritzing) · darlingtonia-zeer-pot.ino · platformio.ini · WIRING-GUIDE.md
For the full annotated circuit, see the 6-page sectioned schematic PDF — it covers power supply, temperature sensors, pump driver, float switch, moisture sensor, and a complete pin reference with component table.
The Fritzing breadboard view below shows the physical layout with all off-board components (probes, TP4056, battery, pump, MT3608).
Editable Fritzing project: zeer-pot-v24.fzz · Detailed step-by-step: WIRING-GUIDE.md
The project now includes a real sketch file in the folder: darlingtonia-zeer-pot.ino. The firmware keeps pump decisions tied to root temperature, treats the capacitive moisture probe as telemetry-only by default, and publishes root/ambient delta, low-water state, and moisture readings over MQTT.
If you know the exact 64-bit ROM addresses of your two DS18B20 probes, paste them into the sketch. If you leave the manual address arrays at zero, the code falls back to a first-boot heuristic that assumes the cooler probe is the root probe.
// ESP32-C3 SuperMini pin map
const int PIN_DS18B20 = 4;
const int PIN_PUMP = 3;
const int PIN_FLOAT_SW = 5;
const int PIN_MOISTURE = 2;
// Moisture probe is telemetry-only by default.
const int MOISTURE_DRY_RAW = 3000;
const int MOISTURE_WET_RAW = 1500;
// Optional manual DS18B20 addresses.
const DeviceAddress ROOT_ADDR_MANUAL = {0,0,0,0,0,0,0,0};
const DeviceAddress AMB_ADDR_MANUAL = {0,0,0,0,0,0,0,0};
Supporting project files: darlingtonia-zeer-pot.ino · platformio.ini · zeer-pot-v24.fzz
[env:esp32-c3-supermini]
platform = espressif32
board = esp32-c3-devkitm-1
framework = arduino
lib_deps =
paulstoffregen/OneWire@^2.3.8
milesburton/DallasTemperature@^3.11.0
knolleary/PubSubClient@^2.8
monitor_speed = 115200
Both pots need their bottom holes sealed and new side drains drilled. Do all the silicone work at once and let everything cure for 24–48 hours before any water contact.
Drilling terracotta: use a 8–10 mm diamond or carbide masonry bit. Tape an X of masking tape over the drill point to prevent skipping. Start at low RPM with light pressure. Keep the bit wet — a spray bottle or a friend dripping water works. Don't rush. Terracotta is soft but brittle — let the bit do the work. For the inner pot (25 cm), a 6–8 mm hole is sufficient.
Use well-graded quartz sand (0.5–3 mm) — sold in 25 kg sacks at building and pool supply shops. The wide grading packs tighter than uniform pool-filter grades because fines fill the voids between coarse grains. Rinse it 2–3 times with distilled or RO water to wash out dust and fines — tip the sand into a bucket, flood with water, stir vigorously, pour off the cloudy water, repeat until the rinse water runs mostly clear. Then pre-wet thoroughly before packing: the sand should feel heavy and uniformly damp with no dry pockets. You need roughly 8 litres (one 25 kg sack gives ~16 L, so you'll have plenty left over for topping up after settling).
Install barbed fitting in outer pot side drain at 2 cm. Silicone seal. Let cure.
Install barbed fitting in inner pot side drain. Silicone seal. Mesh cap on inside nub. Let cure.
Fill outer pot with pre-wetted sand to ~8 cm, compacting gently. This is the base bed.
Place inner pot supports (terracotta feet or flat stones) on the fill bed, then set the inner pot on them so the rims are level. Alternatively, just compact the fill bed firmly and sit the inner pot directly on it.
Centre the inner pot — 5 cm gap all around. Pack pre-wetted sand into the side gap, tamping gently every few centimetres. Leave the top 2 cm free for the drip tube.
Place the ring drip tube in the top 2 cm of the gap. Connect feed tube.
Connect outer pot drain fitting → 8 mm tube → reservoir.
Place the R385 12V pump in the reservoir and connect the feed tube. The MT3608 boost converter must be set to 12V (adjust trimpot, verify with multimeter) before connecting the pump.
Fill inner pot with pure long-fibre sphagnum. Plant Darlingtonia. Insert the DS18B20 root probe at root depth in sphagnum, place the ambient DS18B20 outside the zeer pot in a shaded spot, and insert the capacitive moisture probe into the root zone where it will stay damp but not submerged. At the electronics end, both DS18B20 probes share the same OneWire bus (VCC+VCC, GND+GND, DATA+DATA), while the moisture probe gets its own 3.3V, GND, and GPIO2/ADC line.
Saturate the fill by pouring water into the gap from above. Let stabilise 24h before powering on the system.
Rainwater, distilled, or RO only. TDS < 50 ppm. Top up reservoir as evaporation depletes it — expect 0.5–1.5 L/day in peak summer depending on conditions and the 35 cm pot's larger evaporative surface.
Full air exposure on all sides of the outer pot. The 35 cm pot has significantly more evaporative surface than a 30 cm — this is an advantage. East-facing for morning sun, shaded from ~14:00 in July/August. Don't push the pot against walls or into corners.
With realistic 21°C thresholds, the pump runs mainly during the hottest 4–5 hours of a peak August day rather than all 10. The R385 pump draws ~450 mA at 12V, which translates to ~1.7A from the 3.7V Li-ion cell through the MT3608. At 20-second bursts every 2–5 minutes during hot hours, daily pump energy is modest. The ESP32 + sensors remain a small load compared with the pump, and a 5W USB solar panel still gives you a comfortable margin through a Ligurian summer as long as the pump duty cycle stays modest.
Drain reservoir, disconnect pump, let fill dry. The inner pot's side drain ensures winter rain exits rather than drowning the dormant crown. Resume in late April.
Topic: zeer/darlingtonia/status
{ "root": 18.3, "ambient": 29.1, "delta": 10.8,
"pump": true, "water": true, "sleep_min": 2, "boot": 412 }
Delta = ambient − root = the zeer pot's cooling performance in °C. Expect 5–12°C on a hot Ligurian afternoon with wet fill. Messages arrive only when something happened: pump activity, temperature shift >1°C, low water alarm, or a ~30-minute heartbeat. Feed into InfluxDB + Grafana for root vs. ambient over time, delta-T trends, pump duty cycle, and water level.