Skip to the content
2 layers148.3 × 69 mmPlantPartner PCB1.0, the printed circuit board in 3D

PlantPartner PCB1.0

aboler/plant-partner3

Plant-Partner repo. for CEN4907c

Size
148.3 × 69 mm
Copper layers
2
Thickness
1.6 mm
Parts
86
Nets
61
Pads
279
Tracks, vias
627, 34
Pours
1
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
10 Oct 2025
Updated
21 Apr 2026

Overview

PlantPartner PCB1.0 is an open-source printed circuit board by aboler, from the aboler/plant-partner repository on GitHub. It is a 2-layer board of 148.3 × 69 mm with 86 parts on 61 nets, routed with 627 tracks and 34 vias.

It is built around the MAX485ED, EL357N-G and 1N4148W, with the SRD-05VDC-SL-C, SS14 and AO3400A among its other parts. Its parts include 30 connectors, 27 resistors, 11 diodes, 5 ICs and 4 capacitors. It belongs with the ESP32 boards of this library.

Main components

6

README

README.md

plant-partner

Plant Partner repo. for CEN4908c

  • Contributors: Nicholas Cimino, Aspen Boler, Sabrina Luu, Carter Kreis, Fernando Amado-Pupo
  • Project link

Notes for adding code and time reports

  • Please create a new branch to develop off of main
    • main remains as a minimum viable product branch available
    • Allows PR's to be made for adding to dev so group members can review code made
  • Add reports for any changes/development work done in a day in main branch
    • Make reports in Documentation/Reports in relevant timesheet

Meeting Times

  • Meet weekly for ~15 minutes after every client meeting to ensure we're staying on track

Completed Work

Hardware Release

Please see Documentation/Diagrams, Documentation/Circuits, and Documentation/pcbDesign for current hardware designed, built, and used for testing

Software Release

For ESP32 (in VSCode):

  1. Run git clone recurse-submodules git@github.com:aboler/plant-partner.git
    • This will clone the base plant-partner and esp-idf Github repositories using ssh
  2. Download the ESP-IDF Extension
  3. After you install the extension, the should appear in the VS Code Activity bar (left side set of icons). When you click the Espressif icon, you can see a list of basic commands provided by this extension.
  4. From the command list, select Configure ESP-IDF Extension or press F1 and type “Configure ESP-IDF Extension”. After, choose the ESP-IDF: Configure ESP-IDF Extension option.
  5. Choose Express. Select Github for the download server.
  6. For “Select ESP-IDF version” select “Find ESP-IDF in your system”
  7. For “Enter ESP-IDF directory (IDF_PATH):” click the folder icon and within the Github Repository select /plant-partner/microSrc/submodules/esp-idf
  8. For “Enter ESP-IDF Tools directory (IDF_TOOLS_PATH):” select the default location or wherever you prefer
    • Make sure that IDF_TOOLS_PATH had no spaces and is not in the Github Repo
  9. If your operating system is MacOS/Linux, choose the system Python executable to create ESP-IDF virtual environment inside ESP-IDF Tools and install ESP-IDF Python package there
  10. Click Install
  11. If everything is installed correctly, you will see a message that all settings have been configured

In Powershell or a Linux terminal preferably:

  1. Run cd microSrc
  2. Connect an ESP-32 into computer
  3. Setup ESP-IDF and flash ESP-32 by running python esp.py -p PORT
    • You may need to use python3 instead of python
    • PORT will be something like COM3 for Windows and /dev/ttyUSB0 for Ubuntu

For Backend + Database:

  1. Navigate to backEndSrc/
  2. Start up the backend server by running npm start, server will be running once these messages are displayed on the terminal
    • "Connected to MongoDB"
    • "Server running on port 8000"

For Frontend Application:

In Bash or Powershell

  1. Run cd frontEndSrc
  2. Run cd frontend
  3. Run flutter emulators –launch Medium_Phone_API_36.1
  4. Run flutter pub get
    • This command is to pull the dependencies
  5. Run flutter run

Pre-Alpha Build

  • Ability to control GPIO Pins w/ ESP32.
    • i.e. controlling an external light source
    • Existing interfaces that allow modular control for project's purposes
  • ADC data acquisition w/ ESP32
    • i.e. reading in value from photoresistor
    • Existing interfaces that allow modular control for project's purposes
  • Developed basic structure to collect plant data from sensors
    • 3 uint16_t variables for collecting light, moisture, and nutrient data
  • Breadboard implementation of our hardware/software
    • External photoresistor/LED circuit
  • Frontend initial skeleton set up for mobile Android app interface
    • Configured Flutter environment and Android Emulator
    • Built a persistent bottom navigation bar (Tasks, Home, Settings)
    • Developed placeholder screens for each tab
    • Tested UI flow and verified emulator functionality
  • Implemented locally-hosted database and backend API source code with basic functions
    • Set up MongoDB database that can be hosted locally, currently stores one JSON data model
    • Created Backend App source code with an API via Express.JS that allows for communication with the backend server and database
    • Organized the source code into folders for function controllers, JSON data models, and CRUD routes for easy addition of new functionality

Prototype Build

  • Ability to configure input GPIO Pins w/ ESP32
  • Ability to generate a PWM signal
    • i.e. controlling a water pump omtor
  • Modularized ADC data acquisition
    • Allows for configuration for both photoresistor and mositure sensor
  • Modified breadboard implementation
    • Developed switch circuit to determine when to sample connected sensors/actuate components
    • e.g. water pump control, photoresistor and moisture sensing, LED actuation
  • Ability to connect ESP32 to Wi-Fi
    • Allows new plant data to be sent to the database
  • Created a test plant on the database
  • Connected application and database so application can receive and display plant data to the Home tab
  • Created a update button that allows application to display newly updated data from the database
  • Beginnings of a PCB to replace external wiring has been started and posted to the repository
  • Migrate database to the cloud via MongoDB atlas to allow for easier testing

Alpha Build

  • General clean up/organization in the code
  • Modified ADC to be initialized through one function
  • Modified main microcontroller loop to activate from one signal (currently a switch)
    • Reads all sensors
    • Activates actuators if needed
    • Sends data to database over Wi-Fi
  • Created more permanent physical set up
    • Liquid tanks
    • Motor pumps in liquid tanks with elongated wires
    • Central cup to act as a pot
    • External carrying mechanism to more easily keep everything together
    • Smaller external circuit board
    • DAD program to act as switch, external LED, and proof that fertilizer motor activates when needed

Beta Build

  • Integrated MQTT messages to be sent from database/app. to initiate microcontroller main loop
    • plant_partner/act_tog_en: toggle autocare enable
    • "plant_partner/ack"
      • w/ water msg.: actuate water pump, read moisture sensor, then report back data to the app.
      • w/ light msg.: toggle external LED, read photoresistor, then report back data to the app.
      • w/ nutrients msg.: actuate fertilizer pump
      • no message: read all of the sensors then report the data to the app.
        • If autocare enabled, then also actuate sensors based on if data requires it
  • Finished and ordered PCB
  • Soldered temporary physical board
  • Instantiated and connected rough physical set up assembled in alpha build
  • Added additional user features in the application:
    • Ability to toggle autocare and sync it with the microcontroller
    • button for actuating specific actuators
  • Developed MQTT message functionality in the database
    • Time-based sample commands
    • Ability for specific actuation

Project Architecture

The ESP32 board is set up to interface with sensors to collect real-time environmental and system data. Currently, the microcontroller waits until it receives particular messages through an MQTT client. Depending on the message it can do the following: 1) toggle if autocare is enabled or disabled, 2) samples sensors, communicate data to the app., and actuate (if autocare on), 3) actuate a specific actuator (i.e. LED, water pump, fertilizer pump). These messages are currently being sent from the application while the sensor data is being communicated to the database.

The sensor readings can be reported to the database and displayed on a mobile application, providing users with remote monitoring. To update the data shown on the application, users must press the update button available in the Home tab. Additionally, there's a scheduling tab available where the autocare feature can be toggled as well as three actuator specific buttons for directly affecting specific devices.

File Structure Summary

  • microsrc : directory containing relevant ESP32 code

    • scripts : directory containing scripts necessary for setting up ESP-IDF dependencies and environment for device
    • src : directory containing all developed code for the program and a CMakeLists.txt to help compile
      • main : contains main program for ESP32 and CMakeLists.txt compiling developed code
      • dataTypes : contains code defining common data types created for the project, like plantData
      • peripherals : code for modularizing intercations with certain peripheral systems, like ADC, GPIO, and PWM
      • wifi : code for implementing wifi communication in the esp32
    • submodules : directory containing other repositories utilized within the main code
      • esp-idf : submodule containing examples and ESP32 interfaces in c
    • esp.py : Python script which can setup, build, flash, and/or monitor ESP-32
  • backEndSrc : directory containing relevant backend code

    • controller : directory containing code for controllers that implement backend API CRUD functions for the server
      • sensorController.js : code for implementing CRUD functions that work with JSON data of the Sensor model
    • model : directory containing code for JSON data models to be used by the backend server and MongoDB database
      • sensorModel.js : code for creating the JSON Sensor data model
    • routes : directory containing code for the API's routes that allow CRUD functions to be accessed via URI in an HTTP request
      • sensorRoute.js : code for the routes that make use of functions that work with the Sensor JSON data model
    • node_modules : directory containing the node.js dependencies needed to create the backend code
    • .env : file that holds environment variables to be used by the main code of the backend server, app.js
    • app.js : the main code of the backend server, connecting to the mongoDB database, linking the routes, and locally hosting server
    • package-lock.json : the package-lock file for all the node package dependencies needed for the backend server
    • package.json : the package file listing the basic details and dependencies of the backend server project
  • frontEndSrc : directory containing all Flutter/Dart source code for the mobile application.

    • lib: root directory for all application logic, user interface screens, and services.
      • main: application entry point; initializes the app and launches the bottom navigation shell
      • nav.dart/dashboard_nav.dart: bottom navigation bar widget and screen routing logic
      • views/: directory containing all primary UI pages
        • homeView.dart: displays live plant sensor data from MongoDB and includes refresh functionality.
        • taskView.dart/settingsView.dart: placeholder screen for task/scheduling and user settings
        • addPlantView.dart: screen for adding new plants (prototype stage)
      • services/: directory for backend communication modules
        • remote_service.dart: handles HTTP requests to the backend
      • plant.dart: types data model used to decode JSON plant objects from the database
  • Documentation : directory containing relevant project documentation

    • Circuits : directory containing relevant circuits created during development
    • ClassSubmissions : directory containing a file with the link to the Google Drive folder containing all of our report work/submissions
    • Contributions : directory containing all members' timesheet records
    • Datasheets : directory containing schematics to reference for our current materials being used
    • Diagrams : directory containing relevant diagrams created during development
    • Materials : directory containing documentation related to materials, such as which items were purchased and from where
    • Mosquitto : directory containing configuration files needed to successfully run mosquitto with our program
    • Research : directory containing research collected during the project, such as how to set up a coding environment for the ESP32
    • pcbDesign : directory containing work dones towards designing/building our project's PCB

How to Use esp.py

PORT: This is USB port that the ESP-32 is connected to. For Windows, it should be COM3 or something similar. For Ubuntu, it should be /dev/ttyUSB0 or something similar. Be aware, that if the Port is not automatically detected (usually Windows) you may have to install a driver being Silicon Labs CP210x or FTDI.

  • Default: python esp.py -p PORT
    • This will run the necessary setup scripts to install the ESP-IDF dependencies then build, flash, and monitor the ESP-32 at PORT
  • Build: python esp.py build
    • This will only build the current code under microSrc/src
  • Flash: python esp.py flash -p PORT
    • This will build and flash the current code under microSrc/src onto the ESP-32 at the connected Port
  • Monitor: python esp.py monitor -p PORT
    • This will monitor the ESP-32 at the connected Port and fill the terminal with any outputs from the ESP-32
  • Clean: python esp.py clean
    • This will delete any build artifacts

N.B. You may have to use python3 instead of python

Current Bugs:

The system is in a development state with only base-level functionality implemented. No bugs reported

Parts

86
QtyValueFootprintReferences
91kResistor_SMD:R_0402_1005MetricR8, R12, R16, R17, R21, R22, R23, R24, R26
9Conn_01x03Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalJ7, J9, J12, J13, J14, J15, J17, J24, J25
710kResistor_SMD:R_0402_1005MetricR4, R5, R6, R7, R14, R19, R27
7LEDLED_SMD:LED_0603_1608MetricD1, D2, D3, D5, D6, D10, D11
6Conn_01x04Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_VerticalJ1, J2, J3, J16, J21, J22
4Conn_01x01Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_VerticalJ23, J26, J27, J28
4MountingHole_3.2mm_M3MountingHole:MountingHole_3.2mm_M3BottomLeft, BottomRight, TopLeft, TopRight
3Conn_01x02Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJ5, J11, J29
2100kResistor_SMD:R_0402_1005MetricR1, R2
21N4148WDiode_SMD:D_SOD-123D4, D7
220kResistor_SMD:R_0402_1005MetricR9, R10
222uFCapacitor_SMD:C_0603_1608MetricC1, C2
2470Resistor_SMD:R_0402_1005MetricR15, R20
2500Resistor_SMD:R_0603_1608MetricR13, R18
2Conn_02x04_Top_BottomConnector_PinHeader_2.54mm:PinHeader_2x04_P2.54mm_VerticalJ8, J20
2EL357N-GMyCustomFootprints:OPTO_EL357N-GU1, U4
2PNPPackage_TO_SOT_THT:TO-92Q1, Q2
2SRD-05VDC-SL-CMyCustomFootprints:RELAY_SRD-05VDC-SL-CK1, K2
2SS14Diode_SMD:D_SMAD8, D9
2Screw_Terminal_01x02TerminalBlock_Phoenix:TerminalBlock_Phoenix_MPT-0,5-2-2.54_1x02_P2.54mm_HorizontalJ18, J30
2Screw_Terminal_01x03TerminalBlock_Phoenix:TerminalBlock_Phoenix_MPT-0,5-3-2.54_1x03_P2.54mm_HorizontalJ6, J10
10.1uFCapacitor_SMD:C_0402_1005MetricC4
1100Resistor_SMD:R_0402_1005MetricR25
110uFCapacitor_SMD:C_0402_1005MetricC3
1120Resistor_SMD:R_0402_1005MetricR11
118.7kResistor_SMD:R_0603_1608MetricR3
1AO3400APackage_TO_SOT_SMD:SOT-23Q4
1Barrel_JackConnector_BarrelJack:BarrelJack_GCT_DCJ200-10-A_HorizontalJ19
1ESP32-DEVKIT-V1MyCustomFootprints:MODULE_ESP32_DEVKIT_V1U3
1MAX485MyCustomFootprints:SO08U2
1MPM3610MPM3610:MPM3610IC1
1Screw_TerminalTerminalBlock_Phoenix:TerminalBlock_Phoenix_MPT-0,5-4-2.54_1x04_P2.54mm_HorizontalJ4

More from aboler/plant-partner

1
  • 2 layers70 × 65.5 mmPlantPartner PCB2.0, the printed circuit board in 3D

    PlantPartner PCB2.0

    aboler/plant-partner

    Plant-Partner repo. for CEN4907c

    78 parts3

Similar boards

  • 2 layers95 × 85 mmFiberboard logic min, the printed circuit board in 3D

    Fiberboard logic min

    nguyenduchan/fiberboard

    Fiberboard là bo mạch điều khiển logic tích hợp (AIO), không có driver stepper Nema. Cùng chức năng module ESP32 công nghiệp thông dụng: 4 ngõ vào cách ly + 4 relay + RS485.

    108 parts
  • 2 layers94 × 70 mmCore, the printed circuit board in 3D

    Core

    stanislavstarcha/powerbox

    Add paths to your bash/zsh rc for convenience

    77 parts
  • 4 layers125.5 × 100 mmCore, the printed circuit board in 3D

    Core

    KRuskowski/s5

    einheit s5 (S501) — 5-port managed PoE switch on Allwinner T113-S3

    236 parts
  • 2 layers108.8 × 157 mm1. Mainboard, the printed circuit board in 3D

    1. Mainboard

    DangKhoa2210/Digital-Microfluidics

    This repository contains the design files, firmware, and documentation for a Digital Microfluidic (DMF) platform, developed for research in droplet manipulation and potential applications such as on-chip PCR…

    237 partsAGPL-3.0
  • 2 layers160 × 110 mmAcquedotto test v4 finale, the printed circuit board in 3D

    Acquedotto test v4 finale

    igorilla666/water-controller

    Scheda di controllo basata sul modulo Waveshare ESP32-S3-ETH, con ingressi sensore, RS-485, pilotaggio rele, buzzer e alimentazione/protezioni dedicate.

    139 parts1CERN-OHL-S-2.0
  • 2 layers94.5 × 70.1 mmTIME BASED RELAY, the printed circuit board in 3D

    TIME BASED RELAY

    MAATHES-THILAK-K/4CH_RELAY_TIMER

    ESP32C3 Mini Based 4CH Relay With Timer Control

    50 parts1Apache-2.0
  • 2 layers66.2 × 80 mmSOLDERING IRON CONTROLLER, the printed circuit board in 3D

    SOLDERING IRON CONTROLLER

    MAATHES-THILAK-K/Solder-Master-PRO

    Professional-grade soldering temperature control on a DIY budget

    34 partsApache-2.0
  • 2 layers88 × 130 mmWindowmaster controller v2, the printed circuit board in 3D

    Windowmaster controller v2

    Simplycissmus/windowmaster-s3-controller

    Open hardware and ESP32-S3 firmware for a local 24 V window actuator controller with MQTT and Home Assistant integration.

    68 parts1

Questions

How big is the PlantPartner PCB1.0 PCB?

It measures 148.3 × 69 mm and has 2 copper layers, 1.6 mm thick.

What parts does the PlantPartner PCB1.0 use?

86 parts, built around the MAX485ED, EL357N-G, 1N4148W and SRD-05VDC-SL-C. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the PlantPartner PCB1.0 KiCad files?

From the aboler/plant-partner repository on GitHub, at the commit this page was made from: the board is Documentation/pcbDesign/plantPartner_PCB1.0/plantPartner_PCB1.0.kicad_pcb and its schematic Documentation/pcbDesign/adafruitBuck/Adafruit MPM3610.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the PlantPartner PCB1.0 design in my own project?

Its repository states no licence, so its author keeps all rights: ask aboler before reusing the design.