It’s been a while since I’ve posted here. Life got busy with work and a growing family, and the blog took a back seat. But I’ve been tinkering with an idea for a while now. So this post is a bit different from my usual step-by-step ones. It’s about what I’d like to build and why.
The dream
I wanted to build a grow chamber that looks after its plants on its own.
Not just “water the plant from an app”. There are plenty of products that already do that. I mean a system that reads its environment, notices when something’s off, decides what to do about it, does it, and then checks whether it worked. A closed loop, with as little help from me as possible.
The inspiration comes from space agriculture. Agencies like NASA and ESA have spent years working out how to grow food on long missions where nobody can pop out to the shops. They grow crops like tomatoes, lettuce and potatoes in sealed chambers full of sensors and cameras, with water, light and air all carefully controlled. I find that fascinating, and I started wondering how far you could get with the same idea using cheap hardware and the tools I already use every day. I also feel this will be a fun way to introduce my 5 year old to hobby electronics and computing.
What I’d like it to do
Let’s look at the pieces as I imagine them today. I fully expect some of this to change once I start building.
Sense: ESP32s around the chamber read soil moisture at different depths, along with temperature, humidity, pressure, light level and CO₂. They also measure their own power usage, so I can see what the whole thing costs to run. Every hour they wake up, send their readings and go back to deep sleep to save power.
See: An ESP32-CAM takes a photo of the plants every hour. Short term, that gives me a timelapse of the whole grow, from seed to harvest. Longer term, I’d like to use computer vision / AI to spot stressed or unhealthy leaves before I notice them myself.
Decide: A server at home takes in all the readings and photos and makes the decisions: when to water and how much, when to run a fan to bring CO₂ and humidity back into range, and when to raise an alert because something isn’t right.
Act: ESP32s drive a small water pump, fans and the grow light inside the chamber. Outside, they drive solenoid valves for a few irrigation zones in the garden.
Learn: Every reading, photo and decision is stored. Over several grow cycles I’d like that history to show what each plant actually needs, rather than me guessing and applying the same schedule to everything.
And one for the far future: I’d like to build a 3D digital twin of the chamber in Unity, mirroring the real thing live, so I can try “what if” scenarios before trying them on real plants.
Why build it this way
My scenario is that I’m a .NET developer by trade, with a soft spot for ESP32s (you might remember the LED and DNS server posts). I wanted a project that pulls together everything I enjoy: C# WebAPIs, embedded C/C++, containers and Kubernetes, and eventually some computer vision / AI and Unity.
I also wanted to run it the way I’d run something in production. So the server side runs on k3s, a lightweight Kubernetes distribution, on a spare mini PC at home, even though that’s overkill for a few plants. It means that if this ever moves to the cloud, it’s a configuration change, not a rewrite.
If you’re building something similar, or you’ve grown anything indoors and have tips, I’d love to hear about it in the comments. And if this sounds like your kind of thing, follow along.
Happy coding!