EQSP32 Online Manual

Datasheet v1.0 · Rev 101425 · EQSP32C · C-X · CE
Download PDF

Overview

EQSP32 is a compact, powerful, and user-friendly Industrial IoT ESP32 PLC controller, featuring Wi-Fi and Bluetooth for wireless connectivity and Ethernet, ideal for a broad range of Industrial/Home IoT automation, remote monitoring and control, and instrumentation applications.

EQSP32 Industrial IoT controller on DIN rail
EQSP32 — Industrial IoT (IIoT) ESP32 Logic Controller with 16 I/O, Serial & CAN bus communication

It offers the convenience of a mini Programmable Logic Controller (PLC) with its DIN-rail mount and screw-terminal design, coupled with the power and flexibility of an open-architecture embedded 32-bit computer.

At its core, the EQSP32 is powered by the ESP32-S3, a widely used System on Chip known for its high-performance dual-core processor and integrated wireless radio. This open architecture lets users leverage the extensive ecosystem of tools and software available for the ESP32, amplifying the capabilities of the EQSP32.

Furthermore, with Erqos' Generative AI Programming Technology, users can develop applications with only a fraction of the skills and time normally required in typical PLC or embedded development. By describing their needs in plain English, the Erqos AI Assistant can generate the necessary code in seconds, enabling extremely fast IoT automation project development with minimal coding expertise.

The EQSP32 is equipped with 16 configurable I/O terminals for interfacing with all common types of sensors and actuators, RS232/485 communication, and an optional CAN bus interface, making it suitable for a wide array of internet-connected automation and monitoring applications.

Erqos' comprehensive approach makes the EQSP32 a complete end-to-end solution, from interfacing with the physical environment to offering smartphone-operated user interfaces. This includes a variety of interfaces for different sensors and actuators, a powerful processing unit, and intuitive software for seamless Wi-Fi connectivity and tools to develop custom smartphone apps. Lastly, the EQSP32 features an expansion connector for easy addition of add-on modules, ensuring the system can grow alongside the evolving needs of its users.

Key Features

Processing & Memory

  • Dual-core ESP32-S3 SoC running at 240 MHz with 512 kB RAM and 8 MB Flash

Power

  • Integrated 7–26 V DC power input DC/DC converter
  • 5 V, 1 A output for supplying user sensors and devices
  • Continuous monitoring of power supply voltages

Connectivity & Communications

  • Integrated Wi-Fi and Bluetooth Low Energy (BLE) connectivity
  • Ethernet connection (version dependent)
  • Software-selectable RS232 / RS485 serial port
  • Modbus and DMX support on RS485
  • CAN bus interface
  • Surge protection on RS232/485 and CAN interfaces
  • Front-facing USB-C connector for programming

16 EQUniversal I/O terminals with software-configurable modes

  • High-speed 0–5 V logic-level digital input
  • Digital inputs with debounce delay
  • High-speed data, logic-level output up to 1 Mbit/s
  • Open-collector on/off outputs
  • Open-collector PWM outputs
  • Open-collector output power-optimized for relay coils
  • 0–5 V or 0–10 V absolute-voltage analog inputs (version dependent)
  • 4–20 mA current-loop sensor input (version dependent)
  • Analog inputs relative to the 5 V supply
  • NTC temperature-sensor analog inputs
  • Analog and temperature modes are available on inputs 1 to 8 only
  • Protected, 24 V-tolerant inputs
  • 12-bit analog input resolution
  • Built-in 16-channel PWM controller

Output Drivers & Protection

  • 1 A max per open-collector output
  • Current-limited and thermally protected output drivers
  • Flyback diodes on each output for safe and efficient switching of inductive loads
  • Built-in watchdog timer disables the open-collector outputs in case of software failure

Expansion

  • Expansion connector for up to 16 add-on modules for additional I/O or special-function interfaces (e.g. pH sensor, stepper driver, energy sensor)

System Supervisor & Software

Integrated System Supervisor software handles the following core functions:

  • Initial Wi-Fi setup using the EQConnect smartphone app
  • Connection to Wi-Fi and clock/calendar sync over the internet
  • Input/output and PWM updates
  • Status check and LED indicator updates
  • Connection to a real-time database
  • I/O state and variable synchronization with a cloud database
  • Library for efficient and transparent handling of pin, peripheral, and connectivity control and configuration
  • Compatible with ESPHome
  • Generative AI coding assistant trained on the System Supervisor and library
  • Works with the Arduino IDE and VS Code

Mechanical & Environmental

  • Compact, 4SU-wide (70 mm) DIN-rail-mount enclosure with 24 screw terminals
  • IP20 protection
  • Ambient temperature: −20 °C min to 55 °C max

Applications

The EQSP32 fits a broad range of connected automation, monitoring, and instrumentation use cases:

  • Home automation
  • Industrial monitoring & control
  • HVAC systems
  • IoT automation
  • Environmental monitoring
  • Agricultural applications
  • Energy management
  • Healthcare monitoring
  • Retail and inventory management
  • Robotics and automation
  • Educational projects
  • Entertainment and art installations

Models & Features

The EQSP32 is available in three variants. The table below summarizes the differences between models.

FeatureEQSP32CEQSP32C-XEQSP32CE
Processing Unit
MCUESP32-S3 MiniESP32-S3 MiniESP32-S3 Mini
CoreDual Core ×240 MHzDual Core ×240 MHzDual Core ×240 MHz
RAM Memory512 kB512 kB512 kB
Flash Memory8 MB8 MB8 MB
I/O Capabilities
Total I/Os161616
Digital Inputs161616
Digital Outputs (Solid State)16 PWM (1 A each)16 PWM (1 A each)16 PWM (1 A each)
Analog Inputs (Voltage)8 (0–5 V)8 (0–5 V)8 (0–10 V)
Analog Inputs (Current)NoNo8 (4–20 mA)
Protected Terminals✓✓✓
Wired Connectivity
EthernetNoNo✓
CAN Bus✓✓✓
RS485 (Serial)✓✓✓
RS232 (Serial)✓✓✓
Wireless Connectivity
Wi-Fi (2.4 GHz)✓✓✓
Bluetooth (BLE)✓✓✓
AntennaInternalExternalInternal
Other Features
Supply Input Monitoring✓✓✓
Supply Output Monitoring✓✓✓
MountingDIN RailDIN RailDIN Rail
Expandable✓✓✓
Number of Expansions151515

Block Diagrams

The following block diagrams show the internal architecture of the EQSP32 controller variants.

EQSP32C and EQSP32C-X block diagram
EQSP32C (-X) block diagram
EQSP32CE block diagram
EQSP32CE block diagram

System Specifications

ModuleFeatures
Software
Precompiled proprietary library for pin and peripheral modes and configurations
Transparent connectivity handling using BLE, Wi-Fi and Ethernet
Interfacing entities for easy MQTT integrations
Compatibility
Home Assistant integration using MQTT (automatic MQTT device discovery)
Compatible with Arduino IDE and VS Code (using PlatformIO)
Processor
Dual-Core Xtensa LX7 MCU at 240 MHz
Dedicated user-program processor
512 kB RAM / 8 MB Flash memory
Power Management
Integrated DC/DC, 7 V to 26 V DC power input
Supply output 5 V @ 1 A for powering external peripherals
Input and output supply monitoring
I/O Terminals
16 × multipurpose I/Os (digital/analog input/output), TTL levels, over-voltage protection
8 × 12-bit ADCs
16 × pull-down power PWM outputs
Power PWM Output
16 × 1 A power pull-down PWM outputs
Externally supplied up to 26 V for more flexibility
Integrated flyback diodes to VInput for inductive loads (solenoids & relay coils)
Short-circuit, over-current, over-voltage and over-temperature protection
Communication
RS232
RS485 (half duplex), supports Modbus and DMX
CAN bus
Indications
Green LED for power indication
Red LED for device status
2 × blue LEDs for BLE and Wi-Fi connectivity status
Buzzer for audio indications
Mounting
Standard DIN-rail push-fit mounting with spring mechanism
Expandability
Push-fit expansion-module mounting
Specialized expansion modules for niche applications and system extension
Automatic module enumeration, detection and characterization

Certification & Compliance

Applicable standards for CE compliance under Directive 2014/53/EU (RED):

AreaApplicable Standard(s)
Safety (Electrical)EN IEC 62368-1:2020 + A11:2020
Outdoor SafetyEN 62368-1 Annex Y
RF Exposure / HealthEN IEC 62311:2020, EN 50566:2017, EN 62479:2010, EN 50663:2017, EN 50665
EMC (General / IT)EN 55032, EN 55024 (or EN 55035)
EMC (Wireless)ETSI EN 301 489-1 V2.2.3, ETSI EN 301 489-17 V3.2.4
Industrial EMCETSI EN 303 446-1 V1.2.1 (references EN 61000-6-2, EN 61000-6-4, and IT EMC standards)
Radio (Wi-Fi / BLE)ETSI EN 300 328 V2.2.2 (Full + Spurious only), ETSI EN 300 440 V2.2.1 (Full + Spurious only), ETSI EN 301 893 V2.1.1 (Spurious only)
EnvironmentalDirective 2011/65/EU (RoHS)

Electrical Specifications

Absolute Maximum Values

PinTypeMin.Typ.Max.Unit
Supply In + to GNDPower In28V
5V Out + to GNDPower Out2A
Tx / A, Rx / B to GNDIn/Out−1515V
CAN H, CAN L to GNDIn/Out−2121V
ADIO to GNDIn/Out−0.5VIn *V
ADIO (output drive)Out1.3A

Warning — (*) ADIO voltage should never exceed the VIn voltage of the EQSP32 for steady states, or else the flyback diodes will conduct continuously.

Recommended Operating Conditions & Typical Values

PinTypeMin.Typ.Max.Unit
Supply In +Power In712 to 2426V
5V Out +Power Out4.9855.02V
5V Out + (current)Power Out1A
RS232 TxOut−1212V
RS232 RxIn−1212V
RS485 A, BIn/Out05V
CAN HOut (dominant)2.753.54.5V
CAN LOut (dominant)0.51.52.25V
CAN L to CAN HIn (differential)0.50.70.9V
ADIO — High (1)In/Out3.35 to VInVIn *V
ADIO — Low (0)In/Out−0.501.3V
ADIO — AnalogIn05.5V
ADIO — Power PWMOut1A

Pinout

The EQSP32 uses two screw-terminal connectors, X1 and X2, plus a front-facing USB-C programming port.

X1 — Screw Terminal Connector 1

X1 accommodates the power-supply input pins, the serial communication pins, and 8 ADIO pins.

EQSP32 X1 connector pinout
PinFunctionType
GNDDC Power Input − (GND) *POWER IN
VInDC Power Input + (10–24 V)POWER IN
1 … 8Multipurpose I/O **ADIO
Tx / ARS232 Tx / RS485 ASERIAL
Rx / BRS232 Rx / RS485 BSERIAL

(*) DC Power Input GND is common with DC Power Output GND.
(**) X1 ADIO pins also support analog input (AIN) functionality.

X2 — Screw Terminal Connector 2

X2 accommodates the power-supply output pins, the CAN bus communication (or optional analog output), and 8 ADIO pins.

EQSP32 X2 connector pinout
PinFunctionType
GNDDC Power Output − (GND) *POWER OUT
5VDC Power Output + (5 V)POWER OUT
9 … 16Multipurpose I/ODIO
HCAN HCAN bus
LCAN LCAN bus

(*) DC Power Output GND is common with DC Power Input GND.

Powering EQSP32

To power the EQSP32 from the grid, an AC/DC converter is needed. It is recommended that a minimum 5 W AC/DC power supply is used to power the EQSP32 main module.

For driving additional devices and loads, either directly from the AC/DC supply or from the EQSP32's 5 V DC output, the power supply's rating must be calculated to meet or exceed the total power demand of the application.

For safety and ease of use, it is strongly recommended that a main circuit breaker is used to completely isolate the AC/DC supply from the grid.

When programming the EQSP32, cut the VIn power so the device runs only on the USB-C 5 V supply.

Circuit breaker and AC/DC wiring
Circuit breaker and AC/DC wiring

Warning — Make sure the appropriate ground-fault circuit breaker, fuses or circuit breakers, and any other necessary protective components are used if there is any risk of user electrocution.

Power Management

Power Distribution & Monitoring

The EQSP32 continuously monitors both the power-supply input voltage and the internally generated 5 V output. The 5 V output is also used as a voltage reference — for example when connecting a thermistor — so internal monitoring results in more accurate measurements.

The EQSP32 is also powered from the USB 5 V, but this voltage is only used internally. When programming the EQSP32, it is recommended that the external VIn is shut down and only the USB 5 V is used.

Power distribution and monitoring points
Power distribution and monitoring points (M)
Library Reference
Usage
eqsp32.readInputVoltage()

Returns the measured voltage on VIn (7–26 V) in mV.

eqsp32.readOutputVoltage()

Returns the measured voltage on VOut (5 V) in mV.

Integrated 5 V Power Supply

Any number of external devices, loads, and sensors may be powered directly from the integrated 5 V power supply, as long as the combined continuous consumption is up to 1 A.

The integrated 5 V supply is heavily filtered and monitored. The user has access to the internal 5 V analog readings, and for best accuracy it is recommended that this supply is used as the reference.

Powering external devices using the integrated 5V supply
Example: powering external devices and sensors using the integrated 5 V power supply

Visual & Audio Indications

While the proprietary library is downloaded and running, the EQ System Supervisor monitors the EQSP32's status and its Bluetooth/Wi-Fi status. The visual indicators (LEDs) are automatically updated to reflect the device's state.

The internal buzzer sounds once at the beginning of the power cycle, indicating that the library is running. The user may also drive the audio indicator from their program using the library API.

EQSP32 LED indicators
EQSP32 status LEDs

Power LED (green)

OnPowered on
OffNo power

Status LED (red)

OffNo errors
BlinkSupply under-voltage
FlashingSupply over-voltage
BlinkInternal fault
OnDefault timezone configuration

Bluetooth LED (blue)

OffBluetooth disconnected
FlashingBluetooth advertising
OnBluetooth connected

Wi-Fi LED (blue)

OffWi-Fi disconnected
FlashingWi-Fi scanning / trying to connect
OnWi-Fi connected

Mechanical Dimensions

All dimensions are in millimetres with a ±0.1 mm tolerance.

EQSP32 mechanical dimensions, front and side
EQSP32 mechanical dimensions, top

Multipurpose I/O (ADIO)

Equivalent ADIO circuit
Equivalent ADIO circuit

All ADIO pins support DIN, DOUT, and POUT modes. On connector X1, pins 1–8 also support AIN mode. In addition to the core modes, there are special modes that extend a pin's functionality. For a pin to support a special mode, it must support the corresponding core mode.

ModeTypeFunction
Digital Input (DIN)InputDigital
Switch Input (SWT) — special DINInputDigital
Pulse Capture Counter (PCC) — DIO 9…16InputDigital
Analog Input (AIN) — ADIO 1…8InputAnalog
Current Input (CIN) — ADIO 1…8InputAnalog
Relative Analog Input (RAIN) — special AINInputAnalog
Temperature Input (TIN) — special AINInputAnalog
Power PWM Output (POUT)OutputPWM
Relay (RELAY) — special POUTOutputPWM

Digital Input (DIN)

In digital input mode (DIN), the pin reads 1 (HIGH) if a voltage between 2.5 V and 24 V is applied, or 0 (LOW) if the voltage is between 0 V and 1.3 V. When a trigger mode other than STATE is used, the read value is latched and automatically cleared after being read.

  • ON_RISING — latches true when at least one rising edge is detected since the last read; resets after being read.
  • ON_FALLING — latches true when at least one falling edge is detected since the last read; resets after being read.
  • ON_TOGGLE — latches true when any edge (rising or falling) is detected since the last read; resets after being read.
Library Reference
Configuration
eqsp32.pinMode(nn, DIN)

nn: pin index

Usage
eqsp32.readPin(nn, mm)

Returns HIGH/LOW based on the trigger mode.

nn: pin index  ·  mm: trigger mode (optional, default STATE)

Switch Input (SWT) special DIN mode

Since all pins support digital input, any pin may operate in SWT mode. In this mode the input is debounced using the specified debounce time (default 100 ms). For a change in state to be registered, the pin must remain stable for at least the debounce time. If the input bounces faster than the debounce time, the last stable logic level is returned by readPin(). The configured trigger mode also applies:

  • STATE — returns the current debounced logic level.
  • ON_RISING — latches true when the debounced input goes low → high; resets after being read.
  • ON_FALLING — latches true when the debounced input goes high → low; resets after being read.
  • ON_TOGGLE — latches true whenever the debounced input changes state; resets after being read.
Push-button on EQSP32's 5V out
Example: push-button on the EQSP32's 5 V out
Library Reference
Configuration
eqsp32.pinMode(nn, SWT)

nn: pin index

eqsp32.configSWT(nn, tt)

nn: pin index  ·  tt: debounce in ms (optional, default 100)

Usage
eqsp32.readPin(nn, mm)

Returns HIGH/LOW based on the trigger mode.

nn: pin index  ·  mm: trigger mode (optional, default STATE)

If configSWT() is not called, the debounce time defaults to 100 ms. nn is in the range [1, 16].

Pulse Capture Counter (PCC)

Pulse capture count mode (PCC) measures the number of digital pulses on supported terminal pins (9–16) using hardware pulse counters. readPin(pinIndex) returns the number of pulses detected since the last read, after which the counter automatically resets to zero. PCC is supported on up to four of pins 9–16 simultaneously; if a fifth pin is configured, the configuration function returns false and the setup is ignored.

  • ON_RISING — counts rising edges (default).
  • ON_FALLING — counts falling edges.
  • ON_TOGGLE — counts both rising and falling edges.
Library Reference
Configuration
eqsp32.pinMode(nn, PCC)

nn: pin index

eqsp32.configPCC(nn, mm)

nn: pin index  ·  mm: trigger mode — ON_RISING (default), ON_FALLING, or ON_TOGGLE

Usage
eqsp32.readPin(nn)

Returns the accumulated pulse count since the last read.

Analog Input (AIN)

Analog input mode (AIN) measures the pin's analog value from 0 V to 5 V and returns it in mV.

Potentiometer with 5V out as reference
Example: potentiometer with the EQSP32's 5 V out as reference voltage
Library Reference
Configuration
eqsp32.pinMode(nn, AIN)

nn: pin index

Usage
eqsp32.readPin(nn)

Returns the analog value in mV.

Current Input (CIN)

Current input mode (CIN) measures 4–20 mA current-loop signals and returns the value in units of mA×100 (e.g. 1234 = 12.34 mA). CIN is supported on pins 1–8 of compatible hardware. If the input current exceeds 21 mA, automatic overcurrent protection is enabled and the function returns -1; the shunt resistor is disabled to prevent damage and periodically reconnected to check whether the current has returned to a safe range.

Library Reference
Configuration
eqsp32.pinMode(nn, CIN)

nn: pin index

Usage
eqsp32.readPin(nn)

Returns the value in mA×100.

Macros
CONVERT_CIN(mA100)

Converts the integer current value mA100 from mA×100 to a float in mA.

Relative Analog Input (RAIN) special AIN mode

Only pins 1–8 may operate as RAIN. In this mode the analog value is automatically converted to a 0–1000 range, where 0 is GND and 1000 is 100% of the 5 V reference output. This is a convenient way to convert an analog input directly into a usable value — for example, three potentiometers in RAIN mode can be passed directly as the PWM control values for three POUT pins driving an RGB LED strip.

Potentiometer with 5V out as reference
Example: potentiometer with the EQSP32's 5 V out as reference voltage
Library Reference
Configuration
eqsp32.pinMode(nn, RAIN)

nn: pin index

Usage
eqsp32.readPin(nn)

Returns a 0–1000 value representing 0%–100% of the 5 V supply reference.

Temperature Input (TIN) special AIN mode

Only pins 1–8 may operate as TIN. In this mode the analog value is automatically converted into temperature in degrees Celsius. Although configTIN() is optional, the measurement will not be accurate unless the NTC thermistor parameters are configured. It is strongly recommended to call configTIN() with the NTC beta and reference-resistance values when setting up a TIN pin.

NTC thermistor with 5V out as reference
Example: NTC thermistor using the EQSP32's 5 V out as reference voltage
Library Reference
Configuration
eqsp32.pinMode(nn, TIN)

nn: pin index

eqsp32.configTIN(nn, bb, rr)

nn: pin index  ·  bb: NTC beta (optional, default 3435)  ·  rr: NTC resistance at 25 °C (optional, default 10000)

Usage
eqsp32.readPin(nn)

Returns the temperature in °C.

Macros & Constants
IS_TIN_VALID(t)

Returns true if the read temperature is valid and no sensor error was detected.

CONVERT_TIN(t)

Converts the integer temperature from °C×10 to a float in °C.

TIN_OPEN_CIRCUIT

Returned as the temperature value when an open-circuit sensor error is detected.

TIN_SHORT_CIRCUIT

Returned as the temperature value when a shorted-sensor error is detected.

Power PWM Output (POUT)

Power PWM output mode (POUT) is meant to drive loads up to 1 A per terminal. In this mode the pin operates as a pull-down (open-collector) PWM output. The EQSP32 incorporates protective diodes that protect the MOSFETs from the over-voltage spikes induced by switching relays or solenoids, so inductive and non-inductive loads may be connected to the power PWM outputs in the same way.

Driving an inductive load on a common power supply
Example 1: driving an inductive load on a common power supply
Driving a resistive load from the integrated 5V Out
Example 2: driving a resistive load from the integrated 5 V Out

Driving LED strips

Because LEDs light up even with a very small current, an optional external pull-up resistor between the anode and cathode of the LED strip is recommended. The value depends on the efficiency of the LEDs, their number, and other factors; generally a 1 kΩ, 0.5 W resistor is appropriate for most cases. In the example below a 4.7 kΩ resistor is used: assuming the system runs on 24 V but the LED strip is rated for 12 V, a separate power supply is used for the LEDs.

Driving a 12V LED strip from a separate 12V supply
Example 3: driving a 12 V LED strip from a separate 12 V power supply
Library Reference
Configuration
eqsp32.pinMode(nn, POUT)

nn: pin index

eqsp32.configPOUTFreq(ff)

ff: frequency in Hz for all power PWM outputs (and special POUT modes such as RELAY). Range 50–3000 Hz.

Usage
eqsp32.pinValue(nn, pp)

nn: pin index  ·  pp: power per 1000 (500 = 50%, 1000 = 100%)

Configuring the POUT frequency affects all POUT and special-POUT channels — all pins in POUT mode share the same PWM frequency.

Relay (RELAY) special POUT mode

All pins may operate as RELAY, since all pins support POUT mode. The unique feature of this mode is automatic power derating to a specified value after a specified time. This drastically reduces heat and power consumption on the relays, allowing more relays to be driven from a smaller power supply.

If the minimum holding voltage (MHV) of the relay is not provided and only the nominal or trigger voltage is, the holding voltage may be found experimentally: connect the relay coil to an adjustable supply, apply the nominal voltage, then slowly reduce the voltage until the relay disengages. Calculate the minimum holding PWM value from the disengage voltage:

Minimum holding PWM value = (Vdisengage / Vsupply) * 1000

Example: for a 24 V relay tested on a 24 V supply that disengages at 6 V:

Minimum holding PWM value = (6 / 24) * 1000 = 250

To stay off the limit, set the holding value 50% above the disengage value:

Desired holding PWM value = 250 + (250 * 50%) = 375
EQSP32 controlling a 24V relay to drive a 220V heater
Example: EQSP32 controlling a 24 V relay to drive a 220 V heater
Library Reference
Configuration
eqsp32.pinMode(nn, RELAY)

nn: pin index

eqsp32.configRELAY(nn, hh, tt)

nn: pin index  ·  hh: hold power (optional, default 250)  ·  tt: derate time in ms (optional, default 1000)

Usage
eqsp32.pinValue(nn, pp)

nn: pin index  ·  pp: initial trigger power (1000 = 100%). After the derate time, power drops to the holding power until set to 0.

Industrial Communications

Serial — RS232

For standard RS232 communication, connect the EQSP32's RS232 Tx pin to the receiver's RS232 Rx pin, and vice versa.

RS232 wiring
RS232 wiring

RS232 to TTL

To communicate with a TTL-level device such as an Arduino using the EQSP32's RS232 port, the RS232 Tx signal must be clipped between GND and 5 V. Use external clipping diodes from the RS232 Tx signal to the TTL device's 5 V and GND, and an in-series resistor to limit the current flowing from the RS232 driver into the clipping diodes.

RS232 to TTL wiring
RS232 to TTL wiring

RS232 signals are inverted by the RS232 driver. For communication to work, in addition to clipping the signals to TTL levels, set the communication on either the EQSP32 or the TTL device as inverted. On the EQSP32, use RS232_INV as the serial mode to invert the signal polarity.

Library Reference
Configuration
eqsp32.configSerial(mm, bb)

mm: serial mode RS232 or RS232_INV (inverted polarity)  ·  bb: baud rate (optional, default 115200)

Usage
eqsp32.Serial.{function}

Call Serial from the eqsp32 class and use any Serial.{function} as you normally would.

Serial — RS485

For standard half-duplex RS485 communication, wire as shown below. A termination resistor may be needed depending on the cable length.

Half-duplex RS485 wiring
Half-duplex RS485 wiring

Differential termination

To ensure signal integrity, terminate the bus at both physical ends with a 120 Ω resistor across the A and B differential lines. This matches the characteristic impedance of the twisted-pair cable (typically 120 Ω) and prevents reflections that can corrupt data at higher baud rates. Only the two devices at the ends of the bus should include termination; intermediate nodes remain unterminated. Use differential termination when:

  • Operating at baud rates above 9600 bps (especially 19200 bps and higher).
  • Cable lengths are greater than 10 m.
  • Three or more nodes are connected over the twisted pair.

Fail-safe biasing

Fail-safe biasing keeps the bus in a known logic state when no transmitter is active (idle). Bias resistors slightly drive the differential lines to a defined level. Typical configuration:

  • Pull-up resistor (680 Ω – 1 kΩ) from A → VCC.
  • Pull-down resistor (680 Ω – 1 kΩ) from B → GND.

Use fail-safe biasing when operating above 9600 bps, when the bus is long (over 50 m) or in electrically noisy environments, or when the network includes many passive (listen-only) nodes.

Library Reference
Configuration
eqsp32.configSerial(mm, bb)

mm: serial mode RS485_TX or RS485_RX  ·  bb: baud rate (optional, default 115200)

Usage
eqsp32.Serial.{function}

Call Serial from the eqsp32 class and use any Serial.{function} as you normally would.

CAN bus

For reliable CAN bus communication, use two 120 Ω termination resistors — one at each physical end of the bus — connected across the CAN_H and CAN_L lines to match the characteristic impedance of the twisted-pair cable (typically 120 Ω). Proper termination prevents reflections, ensures correct voltage levels on the differential lines, and allows stable communication between all nodes.

CAN bus wiring
CAN bus wiring

When setting up a CAN network, verify whether any device already has an internal termination resistor before adding external termination.

Library Reference
Configuration
eqsp32.configCAN(bb, id, lb)

Configures the CAN interface to accept all messages or filter for a single message ID.

bb: baud rate (CanBitRates, e.g. CAN_250K, CAN_500K)  ·  id: acceptance ID (optional, default 0 = accept all)  ·  lb: loopback (optional, default false)

eqsp32.configCANNode(bb, nid)

Configures CAN to filter by Node ID only (CANopen-style). Accepts all function codes for the specified Node ID but filters out broadcast messages like NMT (0x000) and SYNC (0x080).

bb: baud rate  ·  nid: node ID (e.g. 0x21 to accept all PDOs, SDOs and EMCY for node 0x21)

Usage
eqsp32.transmitCANFrame(mm)

Transmits a standard 11-bit CAN message using the built-in TWAI controller. mm: a CanMessage struct with the CAN ID, data bytes, and data length.

eqsp32.receiveCANFrame(mm)

Attempts to retrieve a standard 11-bit CAN frame from the TWAI receive queue. Non-blocking; returns false immediately if no message is available. mm: reference to a CanMessage struct to store the received data.

Third-party libraries — native pin control

Some applications need a custom or external library — for example, to control an addressable LED panel, run a DMX master/slave protocol, Modbus, CANopen, or other protocols. To take direct control of an ADIO pin or communication peripheral (CAN bus, RS232, RS485), the system must be notified to release the pin from internal control and configure the corresponding hardware. The eqsp32.getPin() function disassociates the pin from the EQ System Supervisor, prepares the peripheral, and returns the native pin mapping.

Library Reference
Usage
eqsp32.getPin(pp)

Returns the native MCU pin number for the requested ADIO or peripheral pin. pp: EQ_PIN_1 … EQ_PIN_16, or EQ_RS232_TX, EQ_RS232_RX, etc.

Peripheral identifiers for use with external/custom libraries:

  • EQ_RS232_TX / EQ_RS232_RX — prepares the RS232 peripheral and returns the native TX/RX pin.
  • EQ_RS485_TX / EQ_RS485_RX — prepares the RS485 peripheral (receive mode) and returns the native TX/RX pin.
  • EQ_RS485_EN — returns the RS485 enable pin (HIGH = transmit, LOW = receive).
  • EQ_CAN_TX / EQ_CAN_RX — prepares the CAN peripheral and returns the native TX/RX pin.
int rs232Tx = eqsp32.getPin(EQ_RS232_TX);  // ESP32 pin for RS232 TX
int rs232Rx = eqsp32.getPin(EQ_RS232_RX);  // ESP32 pin for RS232 RX
// Put your custom RS232 setup and usage here, using rs232Tx and rs232Rx directly

Software Architecture

The EQSP32 uses its proprietary library to automatically handle all wireless connectivity and database tasks. The library provides a user API for easy, straightforward configuration and usage of all ADIOs and communications.

The block diagram below shows the software architecture of the library. The first section corresponds to the application programming interface (API); the second to the invisible background tasks handled by the EQ Task Manager.

EQSP32 library block diagram
EQSP32 library block diagram

Programming & Configuration

The EQSP32 comes with a precompiled proprietary library that provides an API to access all ADIO modes, communications, internal monitoring, and database functionality. When the program is deployed and the library is running, the EQ System Supervisor takes care of all background tasks related to pin and peripheral updates, Bluetooth and Wi-Fi connectivity, and database connection and synchronization.

To program the EQSP32, connect it with a USB-C cable and open VS Code, the Arduino IDE, or any other ESP32-compatible IDE. After installing the EQSP32 library, describe your wiring and intended functionality to EQ-AI, write the code yourself, or use a combination of both. Then download the program and power the EQSP32 from the external supply.

The .begin() function must be called in the setup() section of your program before any other EQSP32 operation is used.

Program flow with the EQSP32 library
Program flow with the EQSP32 library
Library Reference
Configuration
eqsp32.begin(vv)

Starts EQSP32 tasks with the default library configuration. vv: enable verbose (optional, default false).

eqsp32.begin(cc, vv)

Starts EQSP32 tasks with developer-defined configuration. cc: an EQSP32Configs struct  ·  vv: enable verbose (optional, default false).

eqsp32.begin()

Starts EQSP32 tasks with the default configuration and verbose disabled.

Differences between begin() variations

  • begin() — the easiest way to get started. Runs the EQSP32 system processes without custom defaults. Verbose is disabled, making it easier to monitor your own messages.
  • begin(cc) or begin(cc, false) — suitable for production builds. Verbose is disabled, so no EQSP32 system messages are printed.
  • begin(cc, true) — enables verbose. A helpful tool to monitor the EQSP32's internal processes and verify connectivity, peripheral status, and network parameters.

Initial system configuration: EQSP32Configs

#include "EQSP32.h"

EQSP32 eqsp32;

void setup() {
    EQSP32Configs myEQSP32Configs;
    myEQSP32Configs.devSystemID = "SystemID";   // Developer's system code, versioning, etc.

    eqsp32.begin(myEQSP32Configs, true);         // Verbose enabled
    // EQSP32 pin-mode initializations and other initialization code
}

The EQSP32Configs structure defines all initialization and runtime configuration parameters for the controller — networking, MQTT, device identity, and system behaviour. These are applied when begin() is called and may not be changed during runtime. When no configuration is provided, all fields default to safe baseline values, enabling the EQSP32 to start in standalone mode and handle provisioning through the EQConnect app. By defining custom settings, developers can integrate the EQSP32 into existing networks, MQTT brokers, or third-party IoT systems.

FieldTypeDefaultDescription
mqttBrokerIpstd::string"homeassistant.local"IP address or hostname of the MQTT broker.
mqttBrokerPortint1883MQTT broker port. Use 8883 for SSL/TLS.
mqtt_broker_castd::string""Optional MQTT CA certificate (leave empty for unencrypted).
mqttDiscoveryboolfalseEnables MQTT operations (pub/sub on interfacing topics and device discovery for Home Assistant).
devSystemIDstd::string""Developer-assigned system ID and/or versioning (read-only for external apps).
userDevNamestd::string""Default device name. Editable by the user from EQConnect.
wifiSSIDstd::string""Optional default Wi-Fi SSID. Reset to this value if credentials are erased via the boot button.
wifiPasswordstd::string""Optional default Wi-Fi password. Reset to this value if credentials are erased via the boot button.
staticIPstd::string"0.0.0.0"Default static IP. Use 0.0.0.0 for DHCP.
gatewaystd::string"0.0.0.0"Default gateway IP (used with static IP).
subnetstd::string"0.0.0.0"Default subnet mask (used with static IP).
DNSstd::string"0.0.0.0"Default DNS server (used with static IP).
relaySequencerboolfalseWhen multiple relays are commanded ON at once, activates them sequentially in ascending pin order to prevent inrush current and power surges.
disableErqosIoTboolfalseDisables built-in IoT provisioning and cloud management. Use only if Wi-Fi and BLE are handled by user code or third-party solutions.
disableNetSwitchingboolfalsePrevents automatic switching between Ethernet and Wi-Fi when both are connected. Static IP then applies only to Ethernet; Wi-Fi always uses DHCP.

Network Connectivity

The EQSP32 supports both Wi-Fi and Ethernet connectivity (on the respective versions), providing flexible communication options for a wide range of industrial and IoT environments. Depending on the model, the EQSP32 may feature Wi-Fi only or both Wi-Fi and Ethernet. By default, both interfaces are managed by the internal network task, which automatically handles provisioning, active-connection maintenance, and interface switching without any user code.

Automatic network management

During startup, the EQSP32 initializes all available network interfaces. The internal network manager continuously monitors connection status and selects the most stable and available interface, with priority on Ethernet.

Interface switching & priority behaviour

By default, disableNetSwitching is false, meaning only one interface is active at a time. When both Ethernet and Wi-Fi are available, Ethernet takes priority and Wi-Fi is automatically disconnected. If the Ethernet link is lost, the EQSP32 seamlessly switches to Wi-Fi to maintain connectivity. If a fixed configuration is required, set disableNetSwitching = true; the device may then be connected to both interfaces simultaneously — useful, for example, when Ethernet is used for Modbus TCP integration while Wi-Fi provides the internet connection.

Wi-Fi connectivity

All EQSP32 versions include integrated 2.4 GHz Wi-Fi (802.11 b/g/n). Wi-Fi can be configured in code or provisioned via the EQConnect app over BLE.

  • Provisioning: custom default credentials can be set in EQSP32Configs (wifiSSID, wifiPassword); the end user may adjust them via EQConnect.
  • Automatic reconnection: the EQSP32 retries the connection when Wi-Fi becomes temporarily unavailable.
  • Status monitoring: getWiFiStatus() returns EQ_WF_DISCONNECTED, EQ_WF_CONNECTED, EQ_WF_RECONNECTING, or EQ_WF_SCANNING.

Ethernet connectivity model-dependent

On models equipped with Ethernet hardware, the controller provides a wired interface over a standard RJ45 connector. Ethernet is initialized automatically when a cable is detected and works seamlessly alongside Wi-Fi.

  • Plug-and-play: DHCP is enabled by default. To assign a fixed IP, configure staticIP, gateway, subnet, and DNS.
  • Priority handling: when both interfaces are active, Ethernet takes priority unless disableNetSwitching is set to true.
  • Status monitoring: getEthernetStatus() returns EQ_ETH_DISCONNECTED, EQ_ETH_PLUGGED_IN, EQ_ETH_CONNECTED, or EQ_ETH_STOPPED.
Library Reference
Usage
eqsp32.isDeviceOnline()

Returns true if Wi-Fi or Ethernet is connected; false if both are disconnected.

eqsp32.getWiFiStatus()

Returns the current Wi-Fi status (EQ_WifiStatus): DISCONNECTED (0), CONNECTED (1), RECONNECTING (2), SCANNING (3).

eqsp32.getEthernetStatus()

Returns the current Ethernet status (EQ_EthernetStatus): DISCONNECTED (0), CONNECTED (1), PLUGGED_IN (2), STOPPED (3).

eqsp32.localIP()

Returns the active IP (Ethernet if connected, otherwise Wi-Fi), or '0.0.0.0' when offline.

eqsp32.ethernetIP()

Returns the Ethernet IP, or '0.0.0.0' if Ethernet is not connected.

eqsp32.wifiIP()

Returns the Wi-Fi IP, or '0.0.0.0' if Wi-Fi is not connected.

Device Provisioning

Once the EQSP32 library is running, use the EQConnect phone app to connect to the controller via Bluetooth. From EQConnect you can configure the Wi-Fi network credentials, set up the local timezone with daylight saving, and wirelessly monitor the EQSP32's I/O modes, states, and all connected expansion modules.

The "IoT Configuration" section offers additional options for defining a static IP or DHCP, updating the OTA (over-the-air) update password, and setting the MQTT user name and password.

For the EQSP32 to be discoverable via Bluetooth, the Bluetooth LED must be flashing. If it is off, a short press of the boot button enables BLE advertising for 3 minutes.

The Wi-Fi credentials are stored in internal flash. Each time the EQSP32 starts or restarts, it automatically tries to reconnect to the saved network. Even if a new program is uploaded, the Wi-Fi credentials are retained unless a full flash erase is selected during programming.

To force the EQSP32 to disconnect and erase the Wi-Fi credentials from flash, press and hold the boot button for 3 seconds. This resets the user networking parameters to defaults. If the developer initialized the system with custom default network parameters (credentials, static IP, etc.), those are applied instead after the 3-second press.

Boot & Reset

Reset

Press and release the "Reset" button to restart the device.

Boot

A short tap of the "Boot" button enables BLE advertising, making the EQSP32 discoverable from the EQConnect app.

Press and hold the "Boot" button for at least 3 seconds to force the device back to its default network configuration. If no custom defaults are set by the developer, the EQSP32 disconnects and forgets the configured Wi-Fi network and any static IP/DHCP parameters. Otherwise, the EQSP32 overwrites the user configuration with the developer's default parameters (default credentials and static IP/DHCP option).

Expansion Modules

The EQSP32 has an expansion connector for adding functionality for niche and tailor-made applications.

Warning — Before connecting any expansion module, make sure the EQSP32 is powered off.

To add an expansion module, mount it on the DIN rail next to the EQSP32 and gently slide it until the module's connector is fully inserted into the main EQSP32 controller. After power-up, the proprietary library runs expansion-module detection automatically on boot. Once boot completes, all additional values are available locally and in the database.

Sliding an expansion module into the EQSP32
Slide the module until its connector is fully inserted

↑ Back to top

Shopping Basket

Contact us for Availability