Monitoring our outdoor hydroponic tower: sensors, wiring, and the data dashboard

By Geert Warmenbol · Published 19 May 2026

Monitoring our outdoor hydroponic tower: sensors, wiring, and the data dashboard

Key takeaways

Water temperature in our outdoor Bangkok tower reached 34 degrees Celsius by early afternoon on cloudless days, measurably suppressing dissolved oxygen and correlating with root zone stress visible by day 3 of each affected cycle. Plant Mood grow log data, 2024.

The JSN-SR04T ultrasonic water level sensor logged reservoir drop rates that revealed evaporation was outpacing plant uptake by a 2.3-to-1 ratio during peak heat, a ratio that standard nutrient top-up schedules are not designed for.

pH creep of 0.3 to 0.5 units per 24-hour period was the norm in outdoor conditions, roughly double the drift rate we recorded for the same system moved indoors. Outdoor light, temperature swing, and algae pressure all drive this independently.

Posting sensor data to a public or weakly authenticated Supabase endpoint is a real security exposure: EC, pH, and reservoir level data is enough to fingerprint your system, your schedule, and your location. Vulnox reviewed our setup and flagged this before we did.

The OLED local display saved two crop cycles by surfacing a connectivity failure the cloud dashboard could not report, because the ESP32 was offline and posting nothing.

TL;DR

We built full sensor coverage into an outdoor hydroponic tower in Bangkok: water temp, air temp in sun and shade, pH, EC, water level, and lux. The ESP32 reads everything every 5 minutes and posts to Supabase. What the logs showed contradicted most of the nutrient and pH management advice we had been following. This article is the build log, the wiring decisions, the firmware loop, and what the dashboard actually taught us.

The reading that changed how we managed nutrients

Six weeks into running the outdoor tower, EC was climbing faster than expected between top-ups. The assumption was easy: plants were not drinking enough, or we had mixed the nutrient solution too strong. Both explanations felt plausible. Neither was right. When we pulled the water temperature log for the same period, the correlation was immediate. Every EC spike matched an afternoon where reservoir temperature had exceeded 32 degrees Celsius for more than two hours. Evaporation was concentrating the solution, not the plants drawing down water relative to nutrients.

That single overlay, water temperature against EC drift, reframed the entire nutrient management problem. It was not a dosing question. It was a thermal question. Without the sensors logging in parallel, we would have kept adjusting nutrient concentration while the actual variable, heat-driven evaporation rate, continued unchecked.

Why outdoor Bangkok conditions break standard hydroponic sensor assumptions

Most hydroponic sensor guides are written for indoor or greenhouse environments where temperature is controlled and stable. The sensor selection, calibration intervals, and acceptable drift ranges they recommend reflect that context. An outdoor installation in a tropical city introduces variables that are either ignored entirely or mentioned as brief caveats: direct sun hitting the reservoir, diurnal temperature swings of 8 to 12 degrees Celsius between night and midday, sustained high humidity that corrodes unprotected electronics, and algae pressure that accelerates pH drift far beyond what a shaded indoor reservoir would show. Each of these changes what your sensors need to measure, how often they need calibrating, and what a reading actually means when you get one. A pH of 6.2 at 7am and a pH of 6.2 at 2pm are not the same grow condition. The root zone temperature between those two readings may differ by 9 degrees. The dissolved oxygen level at those two pH readings, in the same solution, differs meaningfully. Logging pH in isolation without water temperature misses the mechanism.

The DS18B20 probes we installed at two positions, one in the reservoir and one measuring air temperature in shade, diverged by as much as 11 degrees Celsius at peak afternoon. A single ambient temperature sensor would have reported a manageable number. The reservoir probe told the real story: the water was absorbing heat from the tower structure, the reservoir walls, and reflected sun in a way that ambient air readings completely masked.

Dissolved oxygen saturation in water drops sharply above 30 degrees Celsius. At 34 degrees, saturation is roughly 7.2 mg/L versus 9.1 mg/L at 24 degrees. For a recirculating tower with no active oxygenation beyond the pump, afternoon reservoir temperatures above 32 degrees represent a genuine root zone oxygen deficit, not a theoretical one.

The sensor stack: what we wired and why each one earned its place

DS18B20 water temperature probe in the reservoir

Continuous temperature log that, when overlaid against EC and pH readings, explains most of the drift patterns that would otherwise look random.

Track the actual thermal state of the nutrient solution, not the ambient air. Water temperature drives dissolved oxygen availability, affects nutrient uptake rates, and determines how fast evaporation concentrates EC. This is the most diagnostic single sensor in the stack for outdoor tropical systems.

DS18B20 air temperature probe in direct sun

A secondary heat stress indicator. When sun-side air temperature exceeds 42 degrees Celsius, reservoir temperature typically crosses 32 within 90 minutes based on our logged sequences. Plant Mood grow log data, 2024.

Measure the thermal load the structure itself is absorbing. We mounted this probe inside a small radiation shield positioned to receive the same direct sun exposure as the tower frame. The gap between this reading and the shade temperature tells us how much heat the structure is transferring to the reservoir.

DS18B20 air temperature probe in shade

Context for every other reading. Without this reference point, the sun and reservoir temperatures are numbers without scale.

Baseline ambient temperature that corresponds to what a standard thermometer or weather service would report. The difference between this and the sun probe gives a solar load delta. The difference between this and the reservoir probe shows how much heat the water is absorbing from the system.

Analog pH module with BNC electrode

A pH log that shows the full daily cycle: typically stable or slightly alkaline-drifting through the cooler morning hours, then accelerating upward from midday onward as algae photosynthesis consumes CO2 and raises pH. The drift rate itself is diagnostic.

Track solution pH continuously. In outdoor conditions with algae growth and wide temperature swings, pH does not stay stable between manual checks. Twice-daily manual testing, which most guides recommend, misses the full drift curve. The analog module connected to the ESP32 gives us a reading every 5 minutes.

TDS/EC module

EC trend data that, read alongside reservoir level, tells you whether to add plain water, diluted solution, or nothing. A rising EC with a falling reservoir level almost always means evaporation. A rising EC with a stable reservoir level suggests nutrient uptake is outpacing water uptake, which is a different problem.

Monitor nutrient concentration in real time. In Bangkok outdoor heat, evaporation rates are high enough that EC can climb significantly between top-up cycles. Logging EC against water temperature reveals whether a concentration increase is evaporation-driven or uptake-driven, which determines the correct response.

JSN-SR04T ultrasonic water level sensor

An evaporation profile that showed us our reservoir was losing roughly 2.3 times as much water to evaporation as the plants were taking up during peak summer heat. That ratio determined our top-up frequency and reframed how we thought about EC management.

Measure reservoir depth without a float switch or dip tube. The JSN-SR04T is rated for outdoor and splash environments, which mattered for our installation. Float switches log binary states: full, not full. Ultrasonic logging gives a continuous depth curve, which reveals evaporation rate over time.

BH1750 lux sensor

A lux log that correlates with pH drift rate and, over time, helps predict which days require more frequent pH intervention. Also useful for understanding how much light the system position is actually delivering versus what the location theoretically receives.

Track actual light intensity at the sensor position, which in an outdoor installation varies with cloud cover, season, and shading from surrounding structures. Light intensity directly affects algae growth rate, which affects pH drift rate. High lux days are high pH drift days, and the log confirms this consistently.

OLED display for local readout

Immediate local visibility. When the ESP32 lost its WiFi connection for 11 hours during a router firmware update, the OLED kept reporting sensor data locally. The cloud dashboard showed nothing, because nothing was being posted. Without the display, that connectivity gap would have been invisible until we noticed the data gap in Supabase. With it, the failure was obvious the next time someone walked past the tower.

Surface a real-time summary of all sensor values without requiring a phone or network connection. This is not a backup feature. It is a primary diagnostic tool during the minutes you are physically at the tower doing maintenance, harvesting, or troubleshooting. The display cycles through all sensor readings every few seconds.

The ESP32 firmware loop: read, format, post, sleep

The firmware logic is intentionally simple. On each 5-minute cycle, the ESP32 wakes from light sleep, reads all sensors in sequence, formats the values into a JSON payload, sends an HTTP POST to the Supabase REST endpoint, and returns to sleep. The read-format-post-sleep pattern keeps power draw low and reduces the number of things that can go wrong. A loop that reads, validates, retries on failure, caches locally on retry failure, and syncs on reconnect is more resilient but also significantly more failure surface for a one-person operation to maintain. We chose the simpler pattern and accepted the data gap risk, with the OLED as local continuity.

The JSON payload structure we settled on includes a UTC timestamp generated on the ESP32 (synced via NTP at boot), the device ID, and named fields for each sensor value. Supabase inserts each payload as a row in a time-series table. The dashboard queries this table with time-window aggregations to show trends rather than raw per-reading noise. A 15-minute rolling average smooths out single aberrant readings without losing the resolution needed to catch rapid events like a pump failure or a sudden EC spike.

One detail that took two iterations to get right: the pH analog module output is sensitive to supply voltage. Powering it from the ESP32 3.3V rail through a long wire introduced enough noise to make pH readings jump by 0.2 to 0.4 units between samples. Switching to a dedicated regulated 5V supply for the pH module and adding a small capacitor across the power pins reduced that noise to under 0.05 units between readings. The hardware fix mattered more than any software filtering we tried.

What the weatherproofing guides do not cover for Bangkok outdoor conditions

Bangkok diurnal temperature swings mean a junction box sealed during the warm afternoon will condense moisture on its interior surfaces as temperatures drop overnight. A box that tests dry at installation will accumulate humidity over weeks. We lost one ESP32 to this before adding a small silica gel pack inside the enclosure and drilling a 3mm downward-facing weep hole in the bottom corner. The hole is small enough that insects cannot enter but large enough that condensed water drains rather than pooling. Most weatherproofing guides for electronics focus on rain exclusion. They do not mention the condensation cycle that operates entirely inside a sealed and ostensibly dry box.

Condensation inside sealed enclosures

The BNC pH electrode we use is rated for continuous immersion, but the combination of direct sun, high ambient temperature, and the organic load in an outdoor reservoir with algae shortened its usable calibration life significantly. Indoors, we recalibrate every two weeks and hold accuracy within 0.1 units between calibrations. Outdoors, the same electrode drifted enough to require recalibration every 5 to 7 days during summer. The electrode itself is not failing; the reference junction is absorbing contamination faster in the outdoor environment. Buying a higher-grade electrode would help. So would shading the reservoir to reduce algae load. We did both, and calibration interval extended to 10 to 12 days.

pH electrode degradation rate outdoors

Every cable that enters the junction box is a potential water ingress point if not sealed correctly. Heat-shrink alone is not sufficient for outdoor Bangkok conditions where the junction box surface can reach 50 degrees Celsius in direct sun, expanding the enclosure material and stressing any seal around cable entry points. We use cable glands rated for outdoor use, tightened after the cable is in its final position, with self-amalgamating tape over the gland body as a secondary seal. Three of our original cable entries failed silently over the first rainy season. The failures were only visible when we opened the box for a different reason.

Cable ingress points as water pathways

This one did not come from weatherproofing research. Vulnox, who provided security consulting for our setup, pointed out that the Supabase project we had initially configured used a public anon key with row-level security not fully locked down. Sensor data posted to a loosely secured endpoint exposes more than readings. EC, pH, water level, and timestamp patterns together can reveal grow schedule, system size, crop stages, and physical location of the operation. We restructured the endpoint to use a service role key stored in the ESP32 firmware (not exposed in source), with row-level policies that allow insert-only from the device and read-only from authenticated dashboard users. The Vulnox review caught this before the system went live at scale.

Data security at the endpoint

What the logs showed across the first full outdoor grow season

This was not a heatwave effect. It was the baseline condition for an outdoor installation in Bangkok during the hot season. The reservoir absorbed enough heat through the tower structure and direct sun exposure that even days with moderate air temperatures, 33 to 35 degrees Celsius ambient, drove reservoir readings above the threshold we associate with root zone oxygen stress.

Reservoir temperature exceeded 32 degrees Celsius on 71 percent of days between March and May

Any outdoor hydroponic setup in Bangkok running without active reservoir cooling, shade cloth over the reservoir specifically, or a deeply buried or insulated reservoir is operating under chronic root zone stress for roughly a third of the year. Most growers in this condition attribute underperformance to nutrient issues or pest pressure because those are visible. The thermal suppression is invisible without a probe in the water.

We expected pH to drift on a predictable daily schedule. What the logs showed is that pH drift rate is more tightly correlated with actual lux intensity than with clock time. On overcast days, drift was minimal across the full day. On clear days, it was rapid from mid-morning onward. Cloud cover that reduced lux by 60 percent also reduced pH drift rate by a similar proportion. The mechanism is algae photosynthesis consuming dissolved CO2 and shifting pH alkaline. Light drives algae, algae drives pH.

pH drift rate correlated with lux reading, not with time of day alone

Scheduling pH adjustment by time of day is imprecise. Scheduling it by lux threshold, which you can only do if you are logging lux, is more accurate. We now flag pH checks whenever the 15-minute average lux exceeds 40,000 lux, regardless of time. Plant Mood grow log data, 2024.

On seven separate occasions during the first outdoor season, EC rose by 0.4 to 0.8 mS/cm over a 24-hour period. In four of those cases, reservoir level had dropped by more than 2 centimeters in the same window, indicating evaporation-dominant loss. In three cases, reservoir level was stable, indicating the plants were taking up water faster than nutrients. The correct response to each scenario is different: add plain water in the first case, adjust nutrient ratios or check for root zone heat stress in the second. Without the water level sensor logging in parallel, all seven events look identical from the EC reading alone.

Evaporation-driven EC concentration events were indistinguishable from plant uptake imbalance without water level data

EC monitoring without water level monitoring gives you half the information needed to make the correct top-up decision. The two sensors together cost less than the nutrient solution wasted by responding incorrectly to an EC reading misread as demand-driven when it was actually evaporation-driven.

Plant Mood grow log data, 2024

Where outdoor hydroponic sensor monitoring is heading in the next two years

Dissolved oxygen sensing will become the standard diagnostic sensor that EC currently is, at least for outdoor tropical systems

The sensors are already available at reasonable cost. The data gap is not technical, it is awareness. As more growers in hot climates instrument their systems and share log data, the correlation between afternoon reservoir temperature and unexplained underperformance will become impossible to ignore. The mechanism, dissolved oxygen suppression at high water temperatures, is well understood in aquaculture and in academic hydroponics research. It has not yet crossed into hobbyist and small commercial practice at scale. When it does, DO sensing becomes the obvious next addition to every tropical outdoor stack.

If DO sensors do not appear as recommended additions in the top hydroponic equipment guides serving tropical markets within 24 months, the prediction is wrong. Alternatively, if a wave of grower reports emerges attributing root zone failures to heat-suppressed DO, the prediction is confirmed ahead of schedule.

Supabase and similar backend-as-a-service platforms will become the default data layer for small-scale hydroponic sensor systems, replacing local-only logging within three years

The barrier to cloud logging with Supabase is low enough that any grower who can flash an ESP32 can set it up. The advantages over local SD card or serial logging are significant: remote access, alerting, multi-device dashboards, data persistence across hardware failures. The main barrier today is security awareness, specifically the risk of misconfigured row-level policies and exposed API keys in public firmware repositories. As the grow-tech community matures around this toolchain, setup guides with correct security defaults will replace the current generation of tutorials that treat the anon key as sufficient.

If local MQTT-plus-InfluxDB stacks maintain their current share of small-scale grower instrumentation setups in community surveys and forum recommendations by 2027, this prediction is wrong. If Supabase or a comparable BaaS appears in more than half of publicly shared grower monitoring builds by then, it is confirmed.

The OLED display is not optional

Every outdoor sensor build should include a local display, and I would argue this before the cloud dashboard, not after. The instinct in an IoT build is to treat local display as a convenience feature and the cloud as the real data layer. In practice, the cloud is only as reliable as your network, your power, and your firmware. The local display works when none of those do. More importantly, it changes how you interact with the system physically. When you are standing at the tower doing maintenance, you want to see pH and EC without pulling out your phone, opening an app, and waiting for a page to load. The OLED gives you that. It also surfaces sensor failures immediately: a probe reading NaN or a temperature stuck at 85 degrees Celsius, which is the DS18B20 error value, is obvious on the display and invisible in a cloud dashboard until you think to look.

Absence-of-data alerts require you to have configured them correctly before the failure, which most growers do not do until after the first failure. The display costs less than one bad crop cycle. Firmware complexity is real but the U8g2 library handles OLED integration in under 50 lines. Build the display first, then optimize for cases where it becomes redundant.

The counterargument is that a display adds component cost, firmware complexity, and one more thing to fail. A well-designed cloud dashboard with alerting handles the connectivity failure case through absence-of-data alerts, and you only need to build the display integration once.

Where to start if you are building this now

If you are putting sensors on an outdoor hydroponic tower in a hot climate, start with water temperature before anything else. Not pH, not EC. Water temperature. It is the variable that explains more of the anomalies in your other readings than any other single sensor, and it is the one most completely absent from the advice written for indoor and greenhouse systems. Get a DS18B20 in your reservoir, log it to anything, even a serial monitor, and run one week of data before you make another nutrient management decision. The reading will either confirm your current practice or explain something you have been attributing to the wrong cause. Either outcome is worth the cost of the probe.

FAQ

What sensors do you need to monitor an outdoor hydroponic tower?

For an outdoor tropical installation, the minimum useful stack is: a DS18B20 water temperature probe in the reservoir, a pH module with BNC electrode, a TDS/EC module, and an ultrasonic water level sensor. Adding a lux sensor and a second DS18B20 for shade air temperature gives you enough data to explain most EC drift, pH creep, and underperformance events without guessing.

How often does pH drift in an outdoor hydroponic system in Bangkok?

In our outdoor Bangkok tower, pH drifted 0.3 to 0.5 units per 24-hour period during sunny conditions, roughly double the drift rate we recorded for the same system indoors. Drift rate correlates with lux intensity more than time of day, because algae photosynthesis drives the pH alkaline and algae activity is light-dependent. Plant Mood grow log data, 2024.

Is it safe to post hydroponic sensor data to Supabase from an ESP32?

Yes, but the default configuration is not safe. Using the anon key with row-level security not fully locked down exposes your sensor data to read access and leaks operational patterns including grow schedule and system size. The correct setup uses a service role key stored in firmware, insert-only row-level policies for the device, and read-only access for authenticated dashboard users only. Vulnox identified these risks in a security review of our setup.

Why does EC rise faster in outdoor hydroponic systems than indoor ones?

In outdoor tropical conditions, evaporation from a warm reservoir concentrates the nutrient solution faster than plants draw it down. In our Bangkok tower, evaporation drove EC increases on four of seven recorded spike events during the first outdoor season. Without a water level sensor logging in parallel, evaporation-driven EC rises are indistinguishable from plant uptake imbalance, which requires a different corrective response. Plant Mood grow log data, 2024.

What happens to dissolved oxygen in a hydroponic reservoir above 32 degrees Celsius?

Dissolved oxygen saturation drops significantly at high water temperatures. At 34 degrees Celsius, maximum DO saturation is approximately 7.2 mg/L, compared to 9.1 mg/L at 24 degrees. For a recirculating tower with no active oxygenation beyond the pump, afternoon reservoir temperatures above 32 degrees create genuine root zone oxygen deficits. In our Bangkok outdoor tower, reservoir temperature exceeded 32 degrees on 71 percent of days between March and May. Plant Mood grow log data, 2024.

How do you weatherproof an ESP32 sensor box for outdoor tropical use?

The three failure points that standard weatherproofing guides miss for Bangkok conditions: condensation inside sealed enclosures from diurnal temperature swings (fix with silica gel and a small weep hole), cable ingress points failing under heat expansion (fix with rated cable glands plus self-amalgamating tape), and pH electrode calibration drift accelerating in outdoor conditions due to algae and heat (recalibrate every 5 to 7 days in summer versus every 2 weeks indoors).

Why should an outdoor hydroponic sensor build include a local OLED display?

The cloud dashboard only reports when the ESP32 is online and posting. During connectivity failures, the cloud shows nothing, and absence-of-data alerts only work if configured in advance. The local OLED display continues showing live sensor readings regardless of network state. When our ESP32 lost WiFi for 11 hours during a router update, the OLED was the only way to know the sensors were still reading correctly.