Overview
LoopString supports a suite of laboratory-grade liquid and chemical sensors through the Configurator's Parts Library. These sensors cover the most common measurements for water quality, aquaponics, hydroponics, brewing, and industrial water treatment:
- EZO-pH — measures pH from 0 to 14
- EZO-EC — measures electrical conductivity, TDS, and salinity
- EZO-ORP — measures oxidation-reduction potential (sanitizer strength)
- EZO-DO — measures dissolved oxygen in mg/L
- EZO-RTD — measures water temperature (companion to pH and EC)
- iSpindel — wireless hydrometer for fermentation gravity tracking
New: For detailed iSpindel setup, Tilt BLE hydrometer, and D1 Mini WiFi sensor bridge documentation, see WiFi Devices & Fermentation Hydrometers. For EZO-ORP expanded documentation with pool/spa use cases, see Phase 2 Community Sensors.
The Atlas Scientific EZO sensors (pH, EC, ORP, DO, RTD) all connect to the Raspberry Pi over the I2C bus and use the same node-red-contrib-ezo Node-RED package. The iSpindel connects wirelessly over Wi-Fi and publishes readings to the Pi via MQTT.
All of these sensors appear in the Parts Library under the Water Quality category.
How to Use
Adding an EZO Sensor to Your Project
- Open the Configurator and open or create a project.
- Select the room where you want to monitor water quality, then click Add Part .
- In the Parts Library, open the Water Quality category and select the EZO sensor you need (e.g. "Atlas Scientific EZO-pH Sensor").
- Click Add to Room . A configuration panel will open on the right.
- Set the I2C Bus (default is 1 for most Raspberry Pi setups).
- Set the I2C Address to match the address of your physical circuit. See the address reference below.
- Set the Sample Interval — how often the Pi reads the sensor. The default is 60 seconds. EZO circuits take approximately 900 ms per reading, so do not set the interval below 2 seconds.
- Connect the part's output signal to any actuator, PID controller, or dashboard card as needed.
- Click Deploy to push the updated flow to your Pi.
Adding an iSpindel
The iSpindel is a wireless device, so setup is a two-step process: configure the firmware on the iSpindel itself, then add the part in the Configurator.
On the iSpindel firmware side:
- Put the iSpindel into configuration mode (tilt it until the LED blinks rapidly).
- Connect to its Wi-Fi access point and open the configuration page.
- Set MQTT Server to your Pi's IP address or Tailscale hostname.
- Set MQTT Port to 1883.
- Set the MQTT Topic to a prefix like
ispindel. The device will publish readings to sub-topics likeispindel/MySpindel/gravity,ispindel/MySpindel/temperature, etc. - Set the publish interval (60–900 seconds is typical for active fermentation).
In the Configurator:
- Add the iSpindel Hydrometer (MQTT) part to your fermentation room.
- Set the MQTT Topic to match the prefix you configured on the device (e.g.
ispindel/+/#to match all devices, orispindel/MySpindel/#to match one specific device). - Set Original Gravity (OG) to the specific gravity reading at the start of fermentation. This is used to calculate the computed ABV% signal. Update this value each time you start a new batch.
- Optionally set a Device Name Filter if you have multiple iSpindels and only want readings from one.
- Wire the iSpindel's output signals (Gravity, Temperature, ABV%) to dashboard cards.
- Deploy the flow.
Important: The iSpindel requires the Mosquitto MQTT broker running on the Pi. LoopString provisioning installs Mosquitto automatically. If you added the Pi to LoopString recently and the iSpindel cannot connect, ensure Mosquitto is listening on all interfaces: edit /etc/mosquitto/conf.d/loopstring.conf, add listener 1883 0.0.0.0, and restart with sudo systemctl restart mosquitto.
Sensor Reference
EZO-pH
- What it measures: pH (acidity/alkalinity), 0–14 pH scale
- Accuracy: ±0.002 pH
- Default I2C address: 0x63
- Valid measurement range: pH 0 to 14
- Calibration: 1-point, 2-point, or 3-point using pH 4, pH 7, and pH 10 buffer solutions. Atlas Scientific recommends 2-point calibration at minimum for aquaponics and hydroponics. 3-point calibration gives the best accuracy across the full range.
- Temperature compensation: For best accuracy, pair with an EZO-RTD temperature sensor on the same I2C bus. The EZO-pH circuit will automatically compensate its reading when a temperature value is available.
- Typical cost: Around $165 (probe + circuit)
- Probe storage: Store the probe tip submerged in pH 7 storage solution or pH 4 buffer, never in distilled water.
EZO-EC (Conductivity / TDS)
- What it measures: Electrical conductivity in µS/cm or mS/cm, and derived measurements — total dissolved solids (TDS) in ppm, and salinity in PSU or %
- Accuracy: ±2%
- Default I2C address: 0x64
- Probe constant selection: Choose a K probe constant matching your expected measurement range — K 0.1 for very low-conductivity water (ultra-pure, DI), K 1.0 for most aquaponics and hydroponics applications (0.1–100 mS/cm), K 10 for high-conductivity water (seawater, industrial)
- Calibration: Three modes — dry calibration (air), single-point (one standard solution), or dual-point (two standard solutions for the best linearity). For aquaponics nutrient monitoring, dual-point calibration with 1,413 µS/cm and 12,880 µS/cm standards is recommended.
- Temperature compensation: Pair with EZO-RTD for accurate readings. Conductivity measurements shift significantly with temperature.
- Typical cost: Around $185
EZO-ORP
- What it measures: Oxidation-reduction potential in millivolts, indicating the oxidizing or reducing strength of a liquid
- Accuracy: ±1 mV
- Default I2C address: 0x62
- Valid measurement range: −1019.9 to +1019.9 mV (the Atlas EZO-ORP documentation states ±2000 mV for some probe configurations)
- Calibration: Single-point calibration using a 225 mV ORP calibration standard. ORP probes do not require multi-point calibration.
- Typical use: Pool and spa sanitation monitoring (ORP above 650 mV typically indicates safe disinfection), aquaculture water quality.
- Address conflict note: The default address 0x62 conflicts with some Sensirion CO2 sensors. If you have a CO2 sensor on the same bus, reassign the EZO-ORP address using the Atlas EZO address change procedure (detailed in the Atlas Scientific datasheet).
- Typical cost: Around $165
EZO-DO (Dissolved Oxygen)
- What it measures: Dissolved oxygen in mg/L (milligrams per liter)
- Accuracy: ±0.05 mg/L
- Default I2C address: 0x61
- Valid measurement range: 0–20+ mg/L depending on water temperature and salinity
- Calibration: Two modes — atmospheric air saturation calibration (expose the probe to air at known altitude) and zero-point calibration (place probe in zero-oxygen solution). For most aquaponics setups, atmospheric calibration alone is sufficient.
- Pressure compensation: If your installation is at significant altitude, you can provide a barometric pressure value to improve accuracy.
- Salinity compensation: Saltwater dissolves less oxygen than freshwater. If monitoring saltwater, provide a salinity value for compensation.
- Typical cost: Around $198
- Membrane care: The dissolved oxygen probe has a permeable membrane. Avoid touching the membrane. Replace the membrane and electrolyte solution approximately once per year or when readings become erratic.
EZO-RTD (Water Temperature)
- What it measures: Water temperature in °C
- Accuracy: ±0.1°C
- Default I2C address: 0x66
- Probe type: PT-1000 RTD (resistance temperature detector) with waterproof probe
- Role in a system: The EZO-RTD is primarily used as a temperature compensation input for other EZO sensors (pH and EC). It can also appear as a standalone temperature reading on the dashboard.
- Typical cost: Around $98
iSpindel (MQTT Hydrometer)
- What it measures: Five signals — specific gravity (in SG), temperature (in °C), tilt angle (in degrees), battery voltage (in V), and computed ABV%
- How it works: The iSpindel floats inside a sealed fermentation vessel. As fermentation progresses and sugar is converted to alcohol, the liquid density drops. The iSpindel's tilt angle changes with density, and the firmware applies a polynomial calibration to convert the tilt angle to a specific gravity reading.
- Gravity unit conversion: The dashboard displays gravity in SG (specific gravity) by default. Unit conversion to degrees Plato or Brix is available in your account preferences.
- ABV calculation: ABV% is computed from the original gravity (OG) you set in the Configurator and the current gravity reading: ABV ≈ (OG − current gravity) × 131.25. Update the OG setting at the start of each new batch.
- Battery life: A fully charged battery typically lasts several weeks at a 5-minute publish interval, or several months at a 15-minute interval.
- Gravity calibration polynomial: The iSpindel firmware ships with a default tilt-to-gravity polynomial. For best accuracy, calibrate it using the iSpindel calibration procedure with reference liquids of known density. The calibration is stored in the iSpindel firmware, not in LoopString.
- Interface: Wi-Fi → MQTT → Pi (no wiring to the Pi)
- Typical cost: Around $25 (DIY kit)
I2C Address Quick Reference
All EZO sensors ship configured for I2C mode at their default addresses. If you need to change an address (for example, to avoid a conflict when using two EZO sensors of different types), follow the Atlas Scientific EZO address change procedure using their UART command interface or the Atlas Desktop application.
- EZO-DO — default 0x61
- EZO-ORP — default 0x62
- EZO-pH — default 0x63
- EZO-EC — default 0x64
- EZO-RTD — default 0x66
All five sensors have unique default addresses and can coexist on the same I2C bus without modification.
Configuration Options
All EZO sensors share these three configuration fields in the Configurator:
- I2C Bus — The I2C bus number on the Raspberry Pi. Bus 1 is the standard bus exposed on GPIO pins 2 (SDA) and 3 (SCL). Leave this as 1 unless your hardware uses a secondary bus.
- I2C Address — The hex address of the EZO circuit. Must match the address of your physical hardware. The default values are listed in the address reference above.
- Sample Interval — How often the Pi reads the sensor. The default is 60 seconds. The minimum is 2 seconds because EZO circuits require approximately 900 ms to complete a measurement. Shorter intervals will not improve data quality and will increase Pi CPU usage.
The iSpindel has these additional configuration fields:
- MQTT Topic — The MQTT topic pattern to subscribe to. The default
ispindel/+/#matches all iSpindel devices on the network. Useispindel/MySpindel/#to receive from only one named device. - MQTT QoS — Quality of Service level for MQTT delivery. Level 1 (at least once) is the recommended default for sensor data.
- Device Name Filter — Optional. Enter the exact name of your iSpindel device to ignore readings from other devices on the same MQTT broker. Leave blank to accept all.
- Original Gravity (OG) — The specific gravity at the start of fermentation. Used to calculate the ABV% output signal. Valid range is 1.000–1.200 SG. Update this at the start of each batch.
Wiring EZO Sensors
All EZO circuits use the same four-wire I2C connection to the Raspberry Pi:
- EZO VCC → Pi 3.3V (Pin 1). Do not use 5V — EZO circuits are 3.3V only.
- EZO GND → Pi GND (Pin 6)
- EZO SDA → Pi GPIO 2 / SDA (Pin 3)
- EZO SCL → Pi GPIO 3 / SCL (Pin 5)
Since all five sensors share the same four I2C wires, you can connect multiple EZO sensors in parallel on the same four pins. Each sensor is addressed individually by its I2C address.
Important wiring notes:
- Always power off the Pi before connecting or disconnecting I2C devices.
- EZO circuits ship in UART mode from the factory. Before connecting via I2C, ensure you have switched the circuit to I2C mode (covered in the Atlas Scientific EZO datasheets).
- In electrically noisy environments — near pump motors, heaters, or high-current loads — consider using an I2C isolator board between the Pi and the EZO circuits. Electrical noise on the I2C bus can cause missed readings or corrupted data.
Use Cases
Aquaponics pH and Dissolved Oxygen Control
In an aquaponics system, fish require water with a stable pH between 6.8 and 7.4 and dissolved oxygen above 5 mg/L. Below these thresholds, fish become stressed and susceptible to disease.
A typical LoopString aquaponics setup includes:
- EZO-pH sensor feeding a PID controller that drives a CO2 injection valve or acid/base dosing pump to keep pH in range
- EZO-DO sensor with a low-oxygen alarm that activates a backup aeration pump
- EZO-EC sensor monitoring nutrient concentration in the fish tank
- EZO-RTD temperature sensor providing temperature compensation to both the pH and EC circuits
- Dashboard alarms configured on pH and DO with SMS or email notifications when levels leave safe bounds
All four sensors connect to the same I2C bus, and their output signals wire to separate PID controllers or alarm rules in the Configurator's flow editor.
Fermentation Gravity Tracking
Homebrewers and commercial producers use the iSpindel to track fermentation progress without opening the vessel. Once placed inside and sealed in, it transmits readings over Wi-Fi automatically.
A typical fermentation monitoring project includes:
- iSpindel providing Gravity, Temperature, and ABV% signals
- Gravity and ABV% wired to dashboard display cards for at-a-glance progress monitoring
- Temperature wired to a hysteresis controller driving a heating mat or chest freezer to hold fermentation temperature
- A sparkline trend card on the dashboard showing gravity declining over time as fermentation progresses
- An alarm set to notify when ABV% exceeds the target (indicating fermentation is complete)
Because the iSpindel publishes over MQTT, multiple iSpindels can run simultaneously — one per fermentation vessel — each identified by a unique device name.
For more detailed iSpindel setup including gravity unit conversion (SG/Plato/Brix) and multi-fermenter configurations, see WiFi Devices & Fermentation Hydrometers.
Pool and Spa Water Quality
For pool and spa monitoring, ORP (oxidation-reduction potential) is the key indicator of whether sanitizer (chlorine, bromine, or other oxidizers) is present at effective levels. The target ORP for safe pool water is typically 650–750 mV.
A typical pool monitoring setup includes:
- EZO-ORP sensor with a high/low ORP alarm and a dosing pump actuator to add sanitizer when ORP drops
- EZO-pH sensor with a dosing pump driving acid or base dosing to keep pH in the 7.2–7.6 range
- EZO-RTD for water temperature display
- Dashboard cards showing ORP and pH trends over 24 hours
- Scheduled automation rules to run the circulation pump during off-peak hours
Hydroponics Nutrient Monitoring
In hydroponics, EZO-EC (conductivity) monitoring tells growers whether the nutrient solution is at the correct concentration. Most crops thrive between 1.5–3.5 mS/cm (EC), though optimal values vary by plant species and growth stage.
A typical hydroponics setup:
- EZO-EC monitoring nutrient reservoir conductivity, with alarms for values outside the crop's target range
- EZO-pH monitoring solution pH (most hydroponic crops prefer 5.5–6.5)
- Dosing pump actuators to add nutrient concentrate or pH-up/down solutions when readings fall out of range
- EZO-RTD for temperature compensation and monitoring (nutrient uptake is affected by temperature)
Troubleshooting
Sensor reads "0" or shows no data on the dashboard
- Verify the physical wiring: EZO VCC must go to the Pi 3.3V pin (Pin 1), not 5V. Check SDA (Pin 3) and SCL (Pin 5) connections.
- Verify the EZO circuit is in I2C mode. Circuits shipped in UART mode will not respond to I2C commands. Check the Atlas Scientific datasheet for the mode-switching procedure.
- Check the I2C address configured in the Configurator matches the actual address of your circuit. Run
i2cdetect -y 1on the Pi (via SSH or terminal) to scan the bus and see which addresses respond. - Ensure the flow has been deployed after adding or changing the sensor. Click Deploy in the Configurator and wait for the success indicator.
pH or EC readings are drifting or inaccurate
- All EZO sensors require periodic recalibration. Probe accuracy degrades over time, especially in harsh water conditions. Recalibrate the pH probe every 1–3 months using fresh buffer solutions.
- Ensure the sample interval is at least 2 seconds. Polling faster than the circuit's reading time causes incomplete data.
- If EZO-RTD is not connected and temperature compensation is not active, pH and EC readings will be less accurate at temperatures far from the calibration temperature (typically 25°C). Add an EZO-RTD to the same I2C bus to enable automatic compensation.
- For pH: check that the probe is stored correctly when not in use. A dried-out probe junction will give slow, drifting readings. Rehydrate the probe in pH 7 storage solution for at least 30 minutes before calibrating.
iSpindel is not sending data / dashboard shows no gravity reading
- Verify the iSpindel firmware is configured with the correct Pi IP address or hostname on port 1883.
- Confirm Mosquitto is running on the Pi:
sudo systemctl status mosquitto. If stopped, start it withsudo systemctl start mosquitto. - Check that Mosquitto is listening on the correct interface. By default it may be bound to localhost only. Edit
/etc/mosquitto/conf.d/loopstring.conf, ensure the linelistener 1883 0.0.0.0is present, then restart:sudo systemctl restart mosquitto. - Verify the MQTT Topic in the Configurator matches the topic prefix the iSpindel is publishing to. A mismatch (for example,
iSpindelvsispindel— note the case difference) will cause no data to arrive. - Check the iSpindel battery. At low voltage (below approximately 3.3V), the device may fail to connect to Wi-Fi or MQTT before entering sleep. Charge the battery if needed.
- If the iSpindel sends data but ABV% looks wrong, check that the Original Gravity (OG) setting in the Configurator matches the actual starting gravity of your current batch.
Multiple EZO sensors not responding or conflicting
- Verify each sensor has a unique I2C address. Two sensors with the same address on the same bus will conflict and both will give unreliable readings.
- Run
i2cdetect -y 1from the Pi command line to see all detected addresses. You should see one address per sensor. - If the EZO-ORP is at its default 0x62 and a Sensirion CO2 sensor (SCD40) is also on the bus, they will conflict. Reassign the EZO-ORP address using the Atlas EZO address change procedure before wiring.
- In noisy electrical environments (near pump motors or heating elements), add an I2C bus isolator between the Pi header and the EZO breakout boards.
Calibration not taking effect
At this time, EZO sensor calibration is performed manually via the Atlas Scientific UART command interface or their desktop software, not through the LoopString Configurator UI. After calibrating the circuit, the new calibration is stored on the EZO circuit itself and takes effect automatically on the next reading — no changes are needed in the Configurator.
Known Issues and Limitations
- Manual calibration only. The LoopString Configurator does not currently provide an in-app calibration wizard for EZO sensors. Calibration must be performed using Atlas Scientific's UART tools or desktop application before connecting the circuit in I2C mode to the Pi.
- iSpindel gravity calibration is device-side. The polynomial that converts tilt angle to specific gravity is stored in the iSpindel firmware, not in LoopString. If the iSpindel was not calibrated before use, or uses the default polynomial, gravity readings may be off by several points. Recalibrate using the official iSpindel calibration procedure with reference fluids.
- EZO-ORP range is limited to ±1019.9 mV in the current Atlas circuit version. The Atlas Scientific documentation references a wider ±2000 mV range for some probe and circuit combinations, but the standard EZO-ORP circuit reports values up to ±1019.9 mV.
- EZO circuits require I2C mode switching before first use. Atlas Scientific ships EZO circuits in UART mode from the factory. You must switch the circuit to I2C mode before it will respond to the LoopString Node-RED flow. The switching procedure requires a UART connection and is described in the Atlas Scientific EZO datasheet.
- Multiple iSpindels on the same MQTT broker. If you have multiple iSpindels in your network, all publishing to the same Mosquitto broker, you must either use a separate Configurator project/room for each vessel (with a specific device name filter set for each iSpindel part) or use unique topic prefixes on each device's firmware configuration.
Related Documentation
- WiFi Devices & Fermentation Hydrometers — detailed iSpindel, Tilt BLE, and D1 Mini WiFi sensor documentation
- Phase 2 Community Sensors — SCD40 CO₂, AS7341 spectral, MAX31855 thermocouple, EZO-ORP expanded
- Adding Rooms and Parts — how to add any part to a project room
- Wiring Flows — how to connect sensor outputs to PID controllers, alarms, and actuators
- Using Templates — the aquaponics, pool water, and fermentation project templates include pre-configured EZO and iSpindel parts
- Protocol Bridges — MQTT, Modbus, and S7comm protocol bridge configuration