Plantidote, the antidote to never worry about failing your plants again.
How many times have you found yourself on the brink of dehydration, parched, staring at your glass of water, but too lazy to actually pick it up and sip? Now, imagine that, but you're a plant 🌱. Imagine the thirst. 💦 The despair... 😩
Plantidote will automatically check for moisture level in the planter and will water itself if needed.
- How to build your own
- Build instructions
- Home Assistant & ESPHome Instructions
- Blynk Instructions
- PCB design choices
- Some Fusion 360 PCB tips
Plantidote is based on this awesome idea by Martin McMaker. Unfortunately, it was working only with Blynk and the pot was difficult to make waterproof.
I completely redesigned the PCB and some parts of 3D models. It is now easier to seal, requiring only 2 seal points. Hot glue or silicone sealant can be used. Thanks to Martin Vinter for the inspiration
This new smart pot works with:
- HomeAssistant/ESPHome. Home Assistant code is derived from MathGaming modified version of Flaura. Many thanks to him.
- Blynk
Plantidote has 4 design variations for the external shell and can be printed in different colors (shell & top lid).
| Round | Knurl | Spin | V Shape |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
The vase can be autonomous for months thanks to its 0.5L water tank and its battery. The volume of the flower pot is 0.8L.
| Name | Type | Diameter | Length | Link |
|---|---|---|---|---|
| Hose - Watering ring | PTFE | Ø4-Ø2mm | 365mm | AliExpress |
| Hose - Ring/T | Silicone | Ø5-Ø3mm | 90mm | AliExpress |
| Hose - "bridge" T-connector/Pot | Silicone | Ø5-Ø3mm | 2 x 15mm | AliExpress |
| Hose - Pump | Silicone | Ø5-Ø3mm | 40mm + 50mm | AliExpress |
| T-connector | Ø3.2-Ø2.4mm | AliExpress |
PVC hose could work as well, but I advise silicone instead because it is softer and will prevent you from breaking the 3D printed hose connectors.
| Quantity | Name | Specs | Note | Link |
|---|---|---|---|---|
| 1 | Lolin D32 | AliExpress | ||
| 1 | Diaphragm water pump | DC 3.7V | 2 visible diaphragms -> suitable for water | AliExpress |
| 3 | Resistor | 100kΩ | AliExpress | |
| 1 | Resistor | 330Ω | AliExpress | |
| 1 | Ceramic capacitor | 100nF | AliExpress | |
| 1 | Diode 1N4007 | 1A | AliExpress | |
| 1 | MOSFET IRLZ44N | Logic level | Don't confuse with : IRFZ44N | AliExpress |
| 1 | Push button | 6x6x4.3mm | AliExpress | |
| 1 | Power switch | SK12D07VG6 (6mm) | AliExpress | |
| 2 | Pin Header Female 16 Pins | PCB/LolinD32 connectors | AliExpress | |
| 1 | Pin Header Male 3 Pins | PCB/Moisture sensor connectors | AliExpress | |
| 2 | JST Connector Male/Female 2 Pins | PH Pitch 2.0 | Pump & battery connectors | AliExpress |
| 1 | JST Connector Male/Female 5 Pins + cables | PH Pitch 2.0 | Water level sensor connector | AliExpress |
| 1 | 18650 Li-Ion Battery Cylindrical 2200mAh 3.7V with JST Connector | 3.7V, > 2000 mAh, Protection circuitry included | I strongly discourage to buy cheap batteries on AliExpress, buy good batteries = safer and less issues | AdaFruit |
| 1 | Capacitive Soil Moisture Sensor | I strongly encourage you to watch this video to avoid sensor issues | AliExpress | |
| 1 | Type-C Adapter USB C to Micro USB | Optional | AliExpress |
| Quantity | Name | Specs | Note | Link |
|---|---|---|---|---|
| 4 | M3x6 screw | PCB screws | AliExpress | |
| 4 | M3x8 screw | Pump and battery screws | AliExpress | |
| 1 | Silicone rubber glue sealant | AliExpress |
The easiest way would be to order the custom PCB via this affiliate link. Alternatively, you can use the gerber files in this repo and send them to your manufacturer of choice.
| 2D | Schematics |
|---|---|
![]() |
![]() |
Choose one of the shell variations. Print time is indicated below.
| Round: 1j13h | Knurl: 3j5h | Spin: 3j5h | V Shape: 3j3h |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
Mandatory print parts:
- shell of your choice
- top lid
- inner planter
- battery holder
- pump holder
- sensor holder
Optional print parts:
- water sensor cable tester -> will help you determine the length of the cable needed
- sensor protector -> will help you protect the roots of the plants when filling the inner planter
You can print in PLA or PETG, both worked fine for me.
The simplest way is to use the .3mf file and print them directly with PrusaSlicer, it's already all configured.
In case you need to set the settings yourself for the shells, here they are:
- print on it's head
- 0.15mm layer with 0.4mm nozzle
- layers & perimeters
- vertical shells -> perimeters: 7
- horizontal shell -> solid layers > top: 15
- enable external perimeters first
- seam: rear
- infill
- density: 90%
- bridging angle: 55
- supports
- support style: snug
- bottom contaxt Z distance: 0.1
- bottom interface layer: 1
- speed
- bridges: 15mm/s
- first layer: 15mm/s
- custom range 4-13mm
- speed -> bridge: 8mm/s
1. place the moisture sensor in its hole. IMPORTANT: if you haven't watched that video about fixing moisture sensors issues yet, now is the time before you proceed with sealing the moisture sensor
2. secure the moisture sensor with the sensor holder
3. seal it with the silicone glue on the inner part
4. seal it with the silicone glue on the bottom part
| 1 | 2 | 3 | 4 |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
5. optional: apply silicone in the inner part of the vase as shown by the red circle. I'ts optional because it will depend on your print and filament quality.
6. use the 5 pins cable and insert them into the "water sensor cable tester" as shown on the picture. Then mark the limit with a pen
7. insert those 5 pins cable into the vase until you reach the mark (ground is indicated by a small cut next to the hole)
8. seal it with the silicone glue
9. wait 48h for it to dry
10. put a silicone hose between the 2 bottom connectors and pour water into the tank to test for leakage (if needed, fix them with silicone glue)
| 5 | 6 | 7 |
|---|---|---|
![]() |
![]() |
![]() |
It should not be hard to know what goes where since it is very well indicated on the PCB.
1. everything has to be soldered from the back of the PCB
2. solder the 16 pins male to the PCB
3. solder the 4 resistors and the ceramic capacitor
| 1 | 2 | 3 |
|---|---|---|
![]() |
![]() |
![]() |
4. solder the diode and the MOSFET, be very careful, the left/right side of these components matters
5. solder JST connectors for the pump and the battery, be very careful, there is no standard on JST connectors, the pins could be inverted for your connectors. Check that your red cable for the pump is on the "+" side of the board and black cable on the "-". Do the same for the battery connector. Failure to check that could destroy your compotents.
6. solder the button and the power switch
| 4 | 5 | 6 |
|---|---|---|
![]() |
![]() |
![]() |
7. solder the 3 pins moisture sensor and the 5 pins connector (on the picture, you can see I use 5 cables intead of a 5 pins connectors but it is exactly the same)
8. solder 1 cable with JST connector to the battery pins on the PCB
9. attach the LolinD32 to the PCB and plug the battery cable
| 7 | 8 | 9 |
|---|---|---|
![]() |
![]() |
![]() |
1. install the battery + holder using two M3x8 screws
2. cut 40mm and 50mm from the Ø5-Ø3mm hose, connect them to the pump and the hose connectors. If you bought the exact same pump as I did, the bigger connector on the pump is pushing out water, connect this one to the inner connector.
3. install the pump + holder using two M3x8 screws
4. install the PCB with two M3x6 screws
| 1 | 2 | 3 | 4 |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
5. plug all cables to their to their connectors
6. plug the USB C adapter
| 5 | 6 |
|---|---|
![]() |
![]() |
1. cut 15mm from the Ø5-Ø3mm hose twice
2. connect them to the T-connector
3. cut 365mm of the the Ø4-Ø2mm hose
4. connect it with the T-connector
| 1 | 2 | 3 | 4 |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
5. put the ring into the lid
6. use a sharp tool to create small watering holes (8 to 12 worked for me)
7. place the lid onto the vase, it should easily fit in and out
8. cut 90mm from the the Ø5-Ø3mm hose and connect it to the bottom of the pot and the T-connector
| 5 | 6 | 7 | 8 |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
9. place the sensor protector on the inner planter (it will protect the roots of the plant when you insert it into the vase)
10. put your plant into the inner planter
11. put the planter into the vase and remove the sensor protector and voilà!
| 9 | 10 | 11 |
|---|---|---|
![]() |
![]() |
![]() |
If you only want to have an autonomous smart plant, you can just upload the ESPHome code to the LolinD32 board by plugging it to your computer. To do that, you need to go to ESPHome Web and upload the esphome-plantidote.yaml file.
If you want to be able to manually control and monitor your plant, you will need to have a Home Assitant server. For that, go here.
Once Home Assitant setup, you need to create an ESPHome instance:
- plug your LolinD32 Board to your computer
- go to ESPHome tab on Home Assistant
- click New Device
- whem prompted, choose USB and follow the setup
- once this is finished, click on the top right "secrets" and add the following:
wifi_ssid: "yourWifiSsid"
wifi_password: "yourWifiPassword"
ota_password: "otaPasswordYouWant"
- click save
- then click Edit to edit yhe code, make sure to copy the api encryption key that is showing up, you will reuse it soon.
- replace the whole content of the file with the content of esphome-plantidote.yaml and make sure to replace <encryption_key_here> with your key
- click save and install to upload it to the LolinD32 board, do it via USB again.
- once this is done, HA should give you a notification of a new device and you can add it to your integrations.
However, if not detected, you can manually setup a static IP
- edit your entity again and uncomment lines 61 to 64, configure it according to your router
- save and install via USB again.
- go to Home Assistant integrations (Settings > Devices and services), manually add a new integration.
- select ESPHome.
- use your newly set static IP for host, leave the port 6053 as default
- click next, then you will be prompted with the api encryption from earlier
You're all set, you can now configure the dashboard as you like. See yaml widget files in esphome folder for widget examples.
Most of the component choices were based on the original project. But I made some changes/improvements.
- I changed the value of the resistor R2 for the MOSFET because according to my calculations, it was not enough. I had the same issues, sometimes triggering, sometimes not, very random.
- I changed the pin used for the button, it was a strapping pin (pin 0) and it caused me a lot of issues while developing the code so I changed it to another one (pin 13).
- I freed one pin and removed one resistor for reading the battery voltage because I discovered that the LolinD32 has a built-in feature for that
- I connected all LolinD32 pins to the board, this way, we can use other pins to add features if the project evolves more. Because of that I had to make the cutout a bit of a weird rectangular shape.
- I removed one pin for the water level, because I felt I didn't need that many
R1, R3 and R4 are just pulldown resistors, so I chose 100kΩ.
R2 is to limit the current drawn by the MOSFET through the GPIO pins.
Lolin D32 max current per GPIO: 12mA
R = U/Imax = 3.3/0.012 = 275Ω
So R2 should at least be 275Ω, I chose R2 330Ω.
| GPIO | Function |
|---|---|
| 5 | Built-in LED |
| 13 | Wakeup deep sleep |
| 19 | Power soil moisture sensor |
| 17 | Power pump |
| 27 | Power water level sensor 100% |
| 26 | Power water level sensor 70% |
| 25 | Power water level sensor 30% |
| 33 | Power water level sensor 10% |
| 32 | Water level sensor signal |
| 34 | Soil moisture sensor signal |
| 35 | Battery voltage |
I avoided the use of strapping pins, on ESP32 they are: 0, 2, 4, 12, 15
- Go on Schematics
- Find component in "Place component" left panel > right click > Edit library
- Find the footprint and double click will open the footprint editor
- Edit as you need and save
- Go back to schematic, right click the schematic component you wanted to update > replace
- A window opens, click on Open library to enable your custom library
- Find your component in the list
This should update the footprint in the PCB editor
- In schematics > Validate > Errors > Check everything OK then sync
- In PCB editor > Rules DRC/ERC > DRC > Check everything OK
- In PCB editor > Manufacturing > CAM processor > CAM
- In output files tab > Gerber > Profile > Add layer > 46 milling
- Process job
- Send files in "DrillFiles" and "GerberFiles" to manufacturer








































