Finally got my 12 ESP32 grow room automation finished and running

Nov 08, 2026 Last reply: 11 hours ago 4 Replies
Jump to replies (4)

Spent the last month wiring up my vertical lettuce setup and it's finally running on its own. Twelve ESP32 boards total, each one doing its own job so nothing is a single point of failure. Four of them just collect temp and humidity readings and push everything to a Google Sheet so I can look at trends. One runs the misting lines on a timer, one watches float switches and tops off the reservoirs, one handles the intake and exhaust fans, and the rest each manage a single grow bin. The bin controllers were the fun part. Every tote has a small pump that drains it when the float switch says the level is getting high, so if one board dies I only lose one bin, not the whole room. That was the whole point of spreading it out instead of running everything from one microcontroller. Biggest headache was the MOSFET boards. The ESP32 puts out 3.3v on its pins and some of those boards just wouldn't trigger reliably til I figured out a workaround with the indicator LEDs. Fiddly but it works. Also learned the hard way to keep the electronics box up high and away from any splashing, and to fuse the 12v lines.



Next step is getting the pH and EC dosing automated instead of me mixing by hand every few days.


I run six ESP32s on a strawberry wall and hit the same wall with the MOSFETs. Mine were the cheap blue ones off AliExpress and half of them would flicker the pump on and off every few seconds. What fixed it for me was ditching the 3.3v logic and putting a little NPN transistor in front of each gate pin so the ESP switches 5v into the MOSFET instead. Cost me maybe two dollars total in parts and it's been dead stable for a year now.

For the pH dosing, don't overbuild the first version. I started with just two peristaltic pumps from Kamoer and a timed dose every morning, then checked pH by hand twice a day. Took about two weeks to dial in how much acid my water actually needed, and only after that did I bother wiring in a pH probe. The probes themselves drift fast in nutrient solution anyway, so calibration gets old quick.

One thing I'd flag from my setup is to keep spare ESP32s flashed and ready. I lost two to humidity in the first summer before I moved the whole control side into a sealed box with some silica packs in there. Lettuce rooms stay damp no matter how careful you are with placement.

I did somethig similar with basil in a spare bedroom but went the other direction on the architecture. One ESP32 doing everything, talking to a small relay board for the pumps and a DHT22 for the air. It's been running two years without a reboot. The way I see it, a single board costs so little that keeping spares on the shelf is cheaper than the wiring and power supplies for a dozen nodes. When mine died last winter I swapped in a spare and re-uploaded the code from my laptop in about ten minutes. Where I do agree with you completely is separating the water side from the electronics. I lost a board once because a hose fitting wept slowly right above the enclosure. Now everything lives on a shelf above the totes with the wires entering from underneath so any drip runs down the cable and away.

For the dosing step you're planning, I'd say start with just EC before pH. Mixing the stock solutions took me a few tries to get right because the concentrates precipitate if you store them mixed togehter. Keep pH up and pH down in seprate bottles, dilute them alot, and dose in small pulses with a wait between each one so the probe has time to settle before the next reading. My first attempt dosed too fast and the controller chased itself all afternoon.

Curious how you're handling comms between the twelve boards. When I did my setup I started with everything shouting over MQTT to a Raspberry Pi broker and it got flaky whenever the router rebooted, so I gave each board its own static IP and a simple watchdog that flips the pump to a fallback timer if it hasn't heard from the broker in 30 seconds. Also for the Google Sheet logging, batch the readings and send every five minutes instead of per reading. My free quota lasted months after I changed that.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required