GartenBox - IoT plant monitoring

Garten Box

What it is

A prototype Garten Box keeping a fiddle fig alive 🤞

A prototype Garten Box keeping a fiddle fig alive 🤞

Garten Box is a simple outlet box that monitors the environmental conditions most important to the health of most houseplants. It then can automatically adjust levels of things like natural light, soil moisture, air humidity and temperature while keeping you in the loop about what’s going on in your plants world. 

How it works

I’m still refining so I won’t go into too much depth but basically there is a sensor that you can stick into the plant’s soil that measures light (in lumens), soil moisture, air humidity and air temperature. It sends these data back via an API to a web service. The service can check the levels against preferences set by the user and then turn on/off devices (grow light, humidifier, water pump etc.) plugged into the box to restore levels to a healthy range. 

Mockup of the dashboard. The MVP version (which is much uglier but in English and displaying actual data) can be found here.

Mockup of the dashboard. The MVP version (which is much uglier but in English and displaying actual data) can be found here.

Users  can track progress on a dashboard and set up notifications to warn them if something doesn’t look right. 

The box

Model of the box built using Fusion 360’s CAD feature. CNC instructions are created from this model.

Model of the box built using Fusion 360’s CAD feature. CNC instructions are created from this model.

The box is a cnc cut 6” x 6” x 6” box with a two gang outlet. The maple finish and discreet creme outlet make the box an ascetic addition to a room- not some fiendishly complicated high tech gardening gadget. 


On the back is a ethernet jack that is wired to the Arduino Nano placed in the box. The Arduino uses this jack to collect all sensor data coming from the plant. It uses a ESP8600-01 wireless connector to send the API signals to the web server. The whole thing weighs about 2 pounds and costs about $35 in parts (see parts list)


The sensors

The setup uses the following sensors:

SensorsMeasuresDigital / Analogvoltscurrent
DHT11Temperature, air humidityDigital3.3v or 5v0.5 - 2.5 mA
SEN0193Soil moistureAnalog5v5mA
TESL235RLight intensityAnalog5V2mA

Each are soldered to a small breadboard and connected to the Arduino via an ethernet cable. The whole thing draws about 5v.

Notice all the sensors are soldered compactly to a single breadboard with the RJ45 connector. Also notice the cat hair stuck to my fingers.

Notice all the sensors are soldered compactly to a single breadboard with the RJ45 connector. Also notice the cat hair stuck to my fingers.

A slightly less clean mockup of the device monitoring portion of the application.

A slightly less clean mockup of the device monitoring portion of the application.

The Dashboard

The internet has lots of info about how to grow houseplants. But knowing how your setup compares can be hard. “Needs moderate indirect light” wtf does that mean? Instead it’s helpful to put a number to all the things about your plant your tracking. It may make searching the internet more helpful but most importantly it can help give relative context to the health of your plant. Now instead of “this plant gets less light in the winter” you can say “this plant gets about 5 hours a day of adequate sunlight in the winter but in its native growing region it typically gets about 9.” This is more actionable and more specific, even if you aren’t a botanist or metrics nerd. 

Programming the Arduino

Absolutely the hardest part about programming the Arduino was getting it to work well with the ESP8266-01. I originally built this using a Raspberry Pi but switched to Arduino for those sweet, sweet analog pins. However WiFi is not straightforward and took a ton of time and patience to get working.

The code itself is relatively straightforward- the Arduino just collects data from sensors one after another, formats the data, sends it to the ESP8266 which then sends the data to the API. The ESP meanwhile is listening for any commands from the server to turn on/off one of the outlets which is then sent to the relay via the Arduino. The whole thing can be found here.

Improvements to be made

  • The box currently powers the arduino via a plug and a usb converter. It’s giant, expensive and probably the least safe thing about this product but I have no idea how else to step down 120 volts to 7 volts. I’ve read about doorbell converters? But they also seem giant and expensive. 

  • I know everyone loves to hate on the DHT11 but I think it’s great. It’s a plant, temperature doesn’t have to be super accurate! However I think the humidity might be significantly off and need to test more

  • Soldering all this to breadboards is time consuming, tedious and messy. I need to learn to bake my own circuit boards

  • I would love to find a 1x4 outlet instead of the typical 2x2

  • I need a sturdier way to connect the soil moisture probe to the sensor board.