🧭 TL;DRA
fully autonomous plant care device powered only by solar energy.Uses M5Stack Atom S3 Lite and multiple sensors to measure environment & soil moisture, running solely on solar + battery.Sends telemetry via UDP to a Raspberry Pi server and automatically waters when moisture drops below threshold.“Solar × IoT — stay connected to your plants.”
🎯 Background & PurposeI
often forgot to water my plants, especially with irregular schedules.To solve this, I built a self-sustaining, outdoor-capable plant care system requiring no mains power.
Although I work as an embedded software engineer for residential fuel cells, I’m still early in my career. This project was a way to gain practical, hands-on embedded development experience while applying my knowledge in low-power design, sensor processing, and power management.
🧩 Hardware- M5Stack Atom S3 Lite
- Unit Watering (pump + soil moisture sensor)
- Grove BME280 (temperature, humidity, pressure)
- Grove Light Sensor (lux)
- Grove INA219 (voltage/current monitor)
- ExtPortForAtom
- Waveshare SPM D (solar charging)
- 18650 Li-ion battery + holder
- 1000µF capacitor (5V output smoothing)
- 12V/10W solar panel
- Waterproof case (80×160×55mm)
Text Ver(more detailed)
[Sun]
|_
|
v
[12V/10W Solar Panel]
|
[SPM D Module]---[18650 Battery]
|5V
+-----+----+
| 1000µF |
v v
[Atom S3 Lite]--(ExtPort)-->[BME280 Sensor]
| \--(PortB)-->[Unit Watering + Soil Moisture]
| \--(PortD)-->[Light Sensor]
|--(I2C)-->[INA219 Power Monitor]
|--(softAP)-->[Provisioning Server]
|
| WiFi UDP (10min interval)
v
[Raspberry Pi 4B Server]
|--(UDP Receive)-->[Data Logging]
|--(Flask WebUI)-->[Dashboard & Remote Config]
💻 Software① Atom S3 Lite
- Dev Env: PlatformIO + VSCode
- Lang: Arduino (C++)
- Sensors: BME280, Light sensor, INA219, Unit Watering
- Comms: UDP every 10 minutes
- Control: Auto-pump if moisture < threshold
- Power Saving: Deep Sleep for multi-day runtime
- Remote Provisioning: SoftAP to set thresholds, SSID/PASS from server, stored in NVS
② Raspberry Pi 4B
- Lang: Python
- Functions: UDP receive → parse → log, Flask + Plotly + Bootstrap dashboard, remote config
- Usage Example:
- Lower threshold in dry weather to shorten drought time
- View sensor data in real time from dashboard
- Accurate sensor data collection and transmission
- Verified soil-moisture-based automatic pump control
- Daytime solar charging, nighttime battery operation
When power is supplied from the solar panel, the lithium-ion battery is charged. At that time, the INA219 connected in series to the lithium-ion battery shows a negative current value.
🗺️ Next Steps- TinyML for predictive irrigation
- Scheduling based on weather and history
- Enhanced long-term data logging & visualization
🙌 Thoughts
Even as a software-focused engineer, M5Stack + Grove lowered the barrier to hardware.
Comments