pH Device: dedicated probe, setup and calibration
Reading time: ~12 minutes ยท Execution time: ~30 minutes (excluding hardware) + 5 minutes of calibration ยท Audience: anyone who wants to monitor the tank's pH, or who needs to feed a Calcium Reactor (guide 10) or KH Titration (guide 12) with a reliable pH reading
๐ต Advanced guide โ not part of the 01-08 onboarding path. Tackle it only if you have already configured tank and sensors (guide 04) and you actually need a pH reading (tank monitoring, calcium reactor, or KH titration).
1. What you are about to do
Unlike in the past, in JoyReef the pH probe is no longer connected to the controller. pH is now a dedicated device: a small standalone board (type ph, name ph-XXXXXX) with its own ESP board, its own ADS1115 module, and its own probe. It behaves like any other JoyReef device: you flash it, connect it to WiFi, it appears on the portal as "pH Probe", and you assign it to a tank.
Why this change? Three concrete reasons:
- One probe = one device. If you have multiple pH probes (e.g., tank + calcium reactor + KH titration chamber) you create one pH device for each, each with its own board. No more ambiguity like "multiple probes on a single controller": each probe has its own name and its own page.
- Automatic temperature compensation (ATC). The pH device corrects the reading based on the tank temperature, received automatically from the portal. This is a new feature: it didn't exist before.
- Simple calibration. The 2-point calibration is done directly on the pH device page in the portal, with a guided wizard.
โ ๏ธ The main controller no longer reads pH. If you previously used the pH probe connected to the controller via ADS1115, that function has been removed from the controller firmware (clean break). To get pH again you must set up a dedicated pH device as explained here.
In this guide:
- You'll assemble the pH device (board + ADS1115 + probe)
- You'll flash it and connect it to WiFi
- You'll assign it to a tank (for ATC)
- You'll calibrate it (2 points: pH 7.0 and pH 4.0)
- You'll use it as the pH source for the calcium reactor / KH titration
2. What you need (hardware)
You'll find all the components in the shopping list (guide 01, advanced setup). For one pH device you need:
- โ An ESP board: a NodeMCU v3 / Wemos D1 mini (ESP8266, ~โฌ3-5) works perfectly. Alternatively an ESP32-S3 if you prefer.
- โ An ADS1115 module โ the ADC that reads the probe's analog signal (the ESP board alone cannot read precise analog signals). It connects with 2 wires (I2C).
- โ A BNC pH probe (e.g., DFRobot SEN0161-V2)
- โ Two calibration buffers: pH 7.00 and pH 4.00 (single-use sachets or small bottles)
- โ RO/osmotic water to rinse the probe between buffers
๐ก One board per probe. If you have multiple pH probes, repeat this guide once for each: every pH device is standalone (board + ADS1115 + probe).
3. Assembly
The connection is simple: the pH probe goes into the ADS1115, and the ADS1115 talks to the ESP board via I2C (2 data wires + power).
pH probe โ ADS1115
The pH probe module (the DFRobot board with the BNC connector) has 3 wires: power (+, V), ground (-, G), and analog signal (A, Po). Connect the signal to an input on the ADS1115 (typically A0), and power/ground to VDD/GND.
ADS1115 โ ESP board (I2C, 2 wires)
| ADS1115 | ESP board | Notes |
|---|---|---|
VDD |
3V3 |
power |
GND |
GND |
ground |
SDA |
board's SDA pin | I2C data |
SCL |
board's SCL pin | I2C clock |
The I2C pins depend on the board:
- ESP8266 (NodeMCU / D1 mini):
SDA = GPIO0,SCL = GPIO2(the same as the controller). - ESP32-S3: by default
SDA = GPIO8,SCL = GPIO9โ verify them on your specific module (on some ESP32-S3 boards the exposed I2C pins differ). If the ADS1115 is not detected, it's almost always this (see Troubleshooting, sec. 8).
๐ผ๏ธ Image to insert here (pH device wiring): diagram/photo of the ESP board with the ADS1115 connected on top via I2C (VDD/GND/SDA/SCL) and the BNC pH probe plugged into the A0 input of the ADS1115.
โ ๏ธ The pH probe is fragile and must always be kept moist. Don't leave it in the air for long: when it's not in the tank, keep it in its cap with a little storage solution (or, failing that, tank water โ never RO water, which "washes" the membrane).
4. Firmware flash + WiFi
The pH device is flashed and connected to WiFi exactly like the other JoyReef devices.
- Firmware flash: - Via USB (first installation of a blank board): follow guide 16, choosing the pH device firmware. - Via OTA (if the device is already flashed and online): follow guide 17.
- WiFi connection: on first boot the device creates a configuration network (captive portal). Connect with your phone and enter your home network credentials โ it's the same procedure as the controller, described in guide 03.
After a few seconds, the device appears on the portal under Config โ Devices with the type "pH Probe" and the name ph-XXXXXX.
๐ผ๏ธ Image to insert here (pH device in the Devices list): screenshot of Config โ Devices with the "pH Probe" device row (
ph-XXXXXX) online.
5. Assign the pH device to a tank (for ATC)
Open the device in Config โ Devices โ your pH Probe and assign it to a tank from the Tank field, just like you do with the controller. You can also rename it with something meaningful (e.g., "Tank pH", "Reactor pH", "KH titration pH").
Assign it to the same tank as the controller measuring the temperature: this is needed for ATC.
๐ก What is ATC (automatic temperature compensation). The pH reading slightly depends on the water temperature. The pH device receives the tank temperature automatically from the portal and corrects the reading accordingly โ you don't have to wire any temperature probe to the pH device. You just need the pH device and the controller with the DS18B20 probe to be on the same tank. If the temperature hasn't arrived for more than ~10 minutes, the device uses a 25 ยฐC fallback until the data is available again.
๐ผ๏ธ Image to insert here (pH device tank assignment): screenshot of the pH device page with the "Tank" field set to the same tank as the controller.
6. Calibration (2 points, on the pH device page)
Do not skip this step. An uncalibrated probe can be off by 0.5-1 pH, making everything else useless (or dangerous, for a reactor).
Calibration is done on the pH device page: from Config โ Devices open your pH Probe, then go to the Calibration section (direct URL portal.joy-reef.com/ph/{id}).
What you need
- The two buffers: pH 7.00 and pH 4.00
- RO water to rinse
- A clean small cup for each buffer (avoid cross-contamination)
Procedure (2-point wizard)
- Open the pH device's Calibration section and start the wizard.
- Neutral point (pH 7.0): rinse the probe with RO water, immerse it in the pH 7.0 buffer, wait 30-60 seconds for the reading to stabilize, then click "Calibrate pH 7.0".
- Acid point (pH 4.0): rinse again, immerse in the pH 4.0 buffer, wait for it to stabilize, click "Calibrate pH 4.0".
- The device calculates offset and slope and saves the calibration.
After calibration, rinse the probe with RO water and reinsert it into the tank (or into the reactor/titration chamber). Wait 10-15 minutes before considering the readings stable.
๐ผ๏ธ Image to insert here (pH calibration wizard): screenshot of the pH device's Calibration section during the pH 7.0 point, with the current reading and the "Calibrate pH 7.0" button.
๐ก Recalibrate every 2-3 months. pH probes "drift" over time, especially in salt water. Regular recalibration guarantees reliable readings.
โ ๏ธ Do not reuse buffers. Once poured and used, a buffer loses accuracy rapidly. Fresh buffer for every calibration.
7. Using pH
Once calibrated, the pH device is ready. The reading appears on the dashboard among the metrics of the tank you assigned it to.
If you need pH for a chemical integration, the pH device is the source you'll select on the respective pages:
- โก๏ธ Calcium reactor (guide 10) โ in the "pH Probe" menu on the reactor page you select the reactor's pH device.
- โก๏ธ Automatic KH titration (guide 12) โ in the "pH Probe" menu on the titration page you select the titration chamber's pH device.
๐ก With a separate pH device for each need (tank / reactor / titration), on the pages above you just select the right one by the name you gave it in sec. 5 โ no more confusion about "which probe on which controller".
8. If something goes wrong
| Symptom | Probable cause | What to do |
|---|---|---|
| pH missing / "Waiting for pH" | Device offline or probe not in water | Check that the device is online in Devices; make sure the probe is immersed |
| pH device offline | WiFi/MQTT down | Check the power and the WiFi connection (repeat the captive portal of guide 03 if you changed network) |
| ADS1115 not detected | Wrong I2C pins or wiring | Verify SDA/SCL. On ESP32-S3 check the defaults (SDA=GPIO8, SCL=GPIO9); on ESP8266 SDA=GPIO0, SCL=GPIO2. Also check the ADS1115's VDD/GND |
| "Jumpy" or clearly wrong pH readings | Old calibration or electrical noise | Recalibrate (sec. 6); keep the BNC cable away from pumps/power supplies |
| Reads ~7 even in the 4/10 buffers | Probe exposed to air, disconnected, or dry membrane | Rehydrate the probe; check the BNC connector on the module |
| pH "stuck" even when temperature changes | Temperature not arriving โ ATC on 25 ยฐC fallback | Assign the pH device to the same tank as the controller with the temperature probe (sec. 5) |
| Probe no longer calibrates (slope out of range) | Probe at end of life | pH probes last ~1-2 years: if it reads clearly off values in pH 4.0, replace it |
JoyReef Guide ยท v1.0 ยท Questions? Write to us at supporto@joy-reef.com