Back to Projects

    Luluthi

    IoT plant healthcare monitoring

    Hardware design · Firmware · Full-stack developmentApril 2025Active

    Problem

    I've always struggled to keep my plants alive. The biggest issue? Inconsistent watering. I'd either forget to water them for weeks, or overwater them when I remembered.

    I looked online and saw that most moisture sensors were either totally inaccurate, way too expensive, or couldn't connect to the internet. I wanted something that would just tell me when to water, without the guesswork.

    Constraints

    I wanted to be able to check my plants’ moisture levels at any time and receive alerts when plants needed watering.

    To support this, the system needed to be distributed and wirelessly monitoring multiple plants across different rooms without running cables. Each sensor had to be low-power, compact enough to fit in various pot sizes and soil types, and capable of transmitting data reliably.

    Cost was another major constraint. Consumer plant monitors typically cost $30–50 per sensor, so my goal was to design a reliable and accurate system for under $10 per node, while still using a capable microcontroller with room for future peripherals.

    It needed a font facing web app to monitor the plants and interact with the system easily.

    Finally, the system needed to be simple and intuitive. Non-technical family members should be able to check plant status from their phones without setup friction or confusion.

    Design Iterations

    The system needed to support distributed, wireless monitoring of multiple plants across different rooms, ruling out any wired sensing or centralized hardware.

    Each sensor node had to be low-power and physically compact enough to fit in a wide range of pot sizes and soil types, while maintaining reliable wireless communication.

    Cost was a primary constraint. Commercial plant sensors typically cost $30–50 per unit, so the target was to design a reliable system to monitor each of my plants for $15 or less.

    The system required a simple, front-facing web interface that allowed users to monitor plant status and interact with the system from their phone without any setup complexity.

    Ease of use was critical. Users should be able to check plant status from their phones without setup friction or confusion.

    Sensor node with enclosure open

    3D-printed enclosure revealing the ESP32 module and power circuitry

    System Architecture

    The final system consists of three main components: sensor nodes, a gateway, and a cloud backend/frontend.

    Each sensor node is built around an ESP32-C3 microcontroller with a capacitive moisture sensor.

    The Raspberry Pi gateway continuously scans for BLE advertisements from the sensor nodes. When it receives data, it packages it with a timestamp and uploads it to a PostgreSQL database in the cloud via a REST API.

    The web dashboard is built with Next.js and React. It displays real-time moisture levels, historical trends, and sends push notifications when plants need watering.

    Validation

    I deployed six sensor nodes across my apartment and monitored them for two months. The system proved remarkably reliable:no false alerts.

    The moisture readings were consistent and accurate. I validated them by comparing to manual soil checks and observing plant health. Plants that showed stress had consistently low moisture readings 2-3 days before visible wilting.

    The biggest validation came from my friends actually using it. They started checking the dashboard regularly and watering based on the alerts, without any prompting from me. That's when I knew the UX was working.

    Outcome

    Luluthi successfully solved my plant watering problem. I haven't lost a plant to under or over watering since deploying it.

    The project taught me valuable lessons about power management in IoT devices, the tradeoffs between different wireless protocols, and the importance of testing hardware in real world conditions.

    I'm exploring ways to make the system more accessible to others, potentially offering pre-assembled sensor kits or open-sourcing the hardware designs so others can build their own.

    Sensor node powered on

    Status LEDs indicating active operation and data transmission