I’ll build a hand-solderable 1 Hz red LED blinker using a 555 timer astable circuit, powered from a 9 V battery through a switch. I’ll pick through-hole parts, calculate the timing/LED resistor values, wire the schematic, then run checks and fix any issues.
This file gives a firmware engineer or AI assistant the electrical context needed to write firmware for the current pH/ORP/temperature interface.
External Header J2
Table
J2 Pin
Firmware Name
Electrical Net
ESP32 Use
1
3.3V
3.3V
Supply output/input from ESP32 board regulator
2
GND
GND
Common ground
3
SDA
ADS1115 SDA
ESP32 I2C SDA GPIO
4
SCL
ADS1115 SCL
ESP32 I2C SCL GPIO
5
DQ
DS18B20 DQ
ESP32 1-Wire GPIO
No debug pins are included. ADS1115 ADDR and ALERT are not routed to J2.
I2C ADC
Device: ADS1115 module U1.
Address: 0x48 because ADDR is pulled to GND through R14 = 10kΩ.
ALERT/RDY: unused/no-connect.
Power: FILTERED 3.3V.
SDA/SCL pull-ups: R7 and R8 are present only as optional 10kΩ DNP footprints to FILTERED 3.3V. Leave them unpopulated if the ADS1115 module already has onboard I2C pull-ups.
ADC Channel Map
Table
Firmware Measurement
ADS1115 MUX
Circuit Meaning
pH raw voltage
AIN0 - AIN1
pH signal buffer minus pH reference buffer
ORP raw voltage
AIN2 - AIN3
ORP signal buffer minus ORP reference buffer
Always use differential mode. Single-ended reads include the mid-supply bias and are not the intended measurement output.
Temperature Sensor
Sensor: DS18B20 connected through J3.
J3 pin 1: FILTERED 3.3V.
J3 pin 2: DS18B20 DQ.
J3 pin 3: GND.
R11 = 4.7kΩ pulls DQ to FILTERED 3.3V.
Recommended ESP32 Firmware Setup
Configure I2C bus for ADS1115 SDA/SCL pins selected by the user on the ESP32.
Probe ADS1115 at address 0x48.
Configure ADS1115 gain so the expected pH and ORP ranges fit without clipping.
Read pH using differential A0-A1.
Read ORP using differential A2-A3.
Configure 1-Wire bus on DQ pin and read DS18B20 temperature.
Apply calibration and filtering.
Signal Ranges from Simulation
Table
Measurement
Expected Differential Range
ADC Pin Common-Mode Range
pH
-0.414V to +0.414V
A0 ≈ 1.236V to 2.064V, A1 ≈ 1.650V
ORP
-1.000V to +1.000V
A2 ≈ 0.650V to 2.650V, A3 ≈ 1.650V
Both ranges remain within the 0V to 3.3V supply rails in the simulation.
Analog Bandwidth and Sampling
The pH and ORP differential paths have a simulated -3 dB bandwidth of about 481.8 Hz. Chemical probe signals are much slower than this, so recommended firmware sampling is conservative:
ADS1115 data rate: low/medium rate, not maximum rate.
Take multiple samples per reading.
Use median filtering to reject spikes.
Average stable samples for final pH/ORP value.
Avoid taking critical calibration samples during ESP32 Wi-Fi burst activity if possible.
pH and ORP differential gain vs frequency
Power Noise Considerations
The analog rail is filtered by R15/C17/C18. High-frequency rail noise is attenuated substantially, but low-frequency rail movement mostly remains common-mode and is cancelled by differential ADC reads.
Table
Frequency
3.3V-to-FILTERED 3.3V Attenuation
100 Hz
-0.0716 dB
1 kHz
-4.221 dB
10 kHz
-22.18 dB
100 kHz
-42.16 dB
Final simulation result: PASS. PH/ORP guard rings were modeled as tied to PH REF and ORP REF, not GND. They do not alter DC readings in the model and must remain separate from GND in layout.
Final 3.3V rail filter response
Calibration Model
pH
pH probe voltage is approximately temperature-dependent around the Nernst slope.
Firmware should perform at least two-point calibration using known pH buffers.
Store offset at pH 7 and slope from calibration.
Apply temperature compensation using DS18B20 temperature.
ORP
ORP is read directly as differential millivolts after calibration offset.
Store offset correction based on known ORP standard solution if needed.