All projects

2025 — Full-stack and IoT development

Smart Farm IoT

Connected irrigation platform: soil sensors, automatic decisions and a real-time dashboard.

  • IoT
  • Python
  • MQTT
  • Flask
  • PostgreSQL
Role
Full-stack and IoT development
Duration
4 months
Year
2025

Architecture

  1. Field

    • Soil moisture sensors
    • ESP32 and pump relay
  2. Messaging

    • Mosquitto MQTT broker
    • One topic per plot
  3. Application

    • Flask API and irrigation rules
    • PostgreSQL (readings, plots)
  4. Monitoring

    • Real-time dashboard
    • Docker Compose and healthchecks

Context

[TO COMPLETE: the project setting — course, team, duration, client or pilot plot.]

The problem

[TO COMPLETE: the concrete problem observed in the field — manual irrigation, water waste, no visibility over plot conditions.]

The solution

The platform splits the problem into four independent layers. Sensors publish readings to an MQTT broker; the Flask API consumes those messages, applies the irrigation rules and stores time series in PostgreSQL. A dashboard shows plot status and the history of decisions.

The rules are deliberately readable: one moisture threshold per crop, a time window, and a guard that prevents two consecutive triggers. The goal is not to replace the farmer, but to provide reliable information and a reversible automatic action.

My role

[TO COMPLETE: what you personally built — firmware, API, data model, deployment, tests.]

What I take away

[TO COMPLETE: two or three sentences about what you would do differently or what you learned.]

Challenges

  1. Making sensor readings reliable on an unstable network: local queue on the ESP32 and automatic broker reconnection.

  2. Avoiding unnecessary irrigation by combining soil moisture, weather forecast and per-crop thresholds.

  3. Keeping dashboard latency low without overloading the database: API-side aggregation and indexes on time series.

Results

water used on the pilot plot [TO COMPLETE]
-28% water used on the pilot plot [TO COMPLETE]
between a reading and its display
< 2 s between a reading and its display
readings received over 30 days [TO COMPLETE]
99.5% readings received over 30 days [TO COMPLETE]

Screenshots

[TO COMPLETE: add 2 to 4 screenshots with alt text.]