# brandenbeaman/plantmonitor architecture

> Architecture diagram of the GitHub repository brandenbeaman/plantmonitor, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/brandenbeaman/plantmonitor
- Repository: https://github.com/brandenbeaman/plantmonitor

## Overview

This ESP32 plant monitor samples environmental and soil sensors, classifies soil moisture, and controls a humidity-triggered mister. It timestamps and serializes the readings, posts telemetry over Wi-Fi, then enters deep sleep for a scheduled wake. The main firmware owns this workflow; separate modules implement soil classification, mister control, time/network setup, JSON construction, and HTTP delivery. The README is empty; the architecture is based on the supplied tree and sampled source, so unsampled peripheral behavior is omitted.

Main entry points: [`src/main.cpp`](https://github.com/brandenbeaman/plantmonitor/blob/main/src/main.cpp) (Firmware workflow), [`src/network/network.cpp`](https://github.com/brandenbeaman/plantmonitor/blob/main/src/network/network.cpp) (Wi-Fi and time), [`src/sendData/sendData.cpp`](https://github.com/brandenbeaman/plantmonitor/blob/main/src/sendData/sendData.cpp) (HTTP sender), [`src/updateMister/updateMister.cpp`](https://github.com/brandenbeaman/plantmonitor/blob/main/src/updateMister/updateMister.cpp) (Mister control)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_firmware["Firmware orchestration"]
  node_main["Firmware workflow<br/>[main.cpp]"]
end

subgraph group_sensing_control["Sensing and control"]
  node_water_status["Soil classifier<br/>[waterStatus.cpp]"]
  node_mister_logic["Mister control<br/>[updateMister.cpp]"]
end

subgraph group_telemetry["Telemetry and connectivity"]
  node_network["Wi-Fi and time<br/>[network.cpp]"]
  node_json["JSON builder<br/>[buildJson.cpp]"]
  node_sender["HTTP sender<br/>[sendData.cpp]"]
end

node_dht(("DHT11 sensor"))
node_light(("BH1750 sensor"))
node_soil(("Soil sensor"))
node_relay(("Mister relay"))
node_wifi(("Wi-Fi network"))
node_ntp(("NTP server"))
node_server(("Telemetry server"))
node_sleep(("ESP32 deep sleep"))

node_main -->|"reads humidity and temperature"| node_dht
node_main -->|"reads light level"| node_light
node_main -->|"reads ADC value"| node_soil
node_main -->|"classifies reading"| node_water_status
node_main -->|"updates from humidity"| node_mister_logic
node_mister_logic -->|"switches relay"| node_relay
node_main -->|"connects Wi-Fi"| node_network
node_network -->|"connects"| node_wifi
node_network -->|"syncs clock"| node_ntp
node_main -->|"gets timestamp"| node_network
node_main -->|"builds payload"| node_json
node_json -->|"returns JSON"| node_main
node_main -->|"sends payload"| node_sender
node_sender -->|"checks connection"| node_wifi
node_sender -->|"posts JSON"| node_server
node_main -->|"enters timed sleep"| node_sleep

click node_main "https://github.com/brandenbeaman/plantmonitor/blob/main/src/main.cpp"
click node_water_status "https://github.com/brandenbeaman/plantmonitor/blob/main/src/waterStatus/waterStatus.cpp"
click node_mister_logic "https://github.com/brandenbeaman/plantmonitor/blob/main/src/updateMister/updateMister.cpp"
click node_network "https://github.com/brandenbeaman/plantmonitor/blob/main/src/network/network.cpp"
click node_json "https://github.com/brandenbeaman/plantmonitor/blob/main/src/buildJson/buildJson.cpp"
click node_sender "https://github.com/brandenbeaman/plantmonitor/blob/main/src/sendData/sendData.cpp"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_main toneBlue
class node_water_status,node_mister_logic toneAmber
class node_network,node_json,node_sender,node_ntp,node_server toneMint
class node_dht,node_light,node_soil,node_relay,node_wifi,node_sleep toneIndigo
```

## Components

### Firmware orchestration

- [Firmware workflow](https://github.com/brandenbeaman/plantmonitor/blob/main/src/main.cpp): `src/main.cpp`

### Sensing and control

- [Soil classifier](https://github.com/brandenbeaman/plantmonitor/blob/main/src/waterStatus/waterStatus.cpp): `src/waterStatus/waterStatus.cpp`
- [Mister control](https://github.com/brandenbeaman/plantmonitor/blob/main/src/updateMister/updateMister.cpp): `src/updateMister/updateMister.cpp`

### Telemetry and connectivity

- [Wi-Fi and time](https://github.com/brandenbeaman/plantmonitor/blob/main/src/network/network.cpp): `src/network/network.cpp`
- [JSON builder](https://github.com/brandenbeaman/plantmonitor/blob/main/src/buildJson/buildJson.cpp): `src/buildJson/buildJson.cpp`
- [HTTP sender](https://github.com/brandenbeaman/plantmonitor/blob/main/src/sendData/sendData.cpp): `src/sendData/sendData.cpp`

### Other components

- **DHT11 sensor**
- **BH1750 sensor**
- **Soil sensor**
- **Mister relay**
- **Wi-Fi network**
- **NTP server**
- **Telemetry server**
- **ESP32 deep sleep**

## Connections

- Firmware workflow → DHT11 sensor: reads humidity and temperature
- Firmware workflow → BH1750 sensor: reads light level
- Firmware workflow → Soil sensor: reads ADC value
- Firmware workflow → Soil classifier: classifies reading
- Firmware workflow → Mister control: updates from humidity
- Mister control → Mister relay: switches relay
- Firmware workflow → Wi-Fi and time: connects Wi-Fi
- Wi-Fi and time → Wi-Fi network: connects
- Wi-Fi and time → NTP server: syncs clock
- Firmware workflow → Wi-Fi and time: gets timestamp
- Firmware workflow → JSON builder: builds payload
- JSON builder → Firmware workflow: returns JSON
- Firmware workflow → HTTP sender: sends payload
- HTTP sender → Wi-Fi network: checks connection
- HTTP sender → Telemetry server: posts JSON
- Firmware workflow → ESP32 deep sleep: enters timed sleep
