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
-
Field
- Soil moisture sensors
- ESP32 and pump relay
-
Messaging
- Mosquitto MQTT broker
- One topic per plot
-
Application
- Flask API and irrigation rules
- PostgreSQL (readings, plots)
-
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
-
Making sensor readings reliable on an unstable network: local queue on the ESP32 and automatic broker reconnection.
-
Avoiding unnecessary irrigation by combining soil moisture, weather forecast and per-crop thresholds.
-
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.]