EvoScan Port 4.0 Wideband Serial Input: MAX3232 Hookup Guide

How to connect a serial (RS-232) wideband controller to the EvoScan Port 4.0 through a MAX3232 module, which gauge to switch on in the dashboard, and how to read the Wideband menu’s status line when nothing shows up.

The short version: three wires from the module to the XIAO ESP32-S3: module VCC to 3V3, module GND to GND, and the module’s receive output (usually the pin marked RXD) to D0. The wideband’s serial-out wire goes into the module’s RS-232 input (DB9 pin 3) and its serial ground to the module’s ground (DB9 pin 5). Nothing goes to D1, and nothing is sent back to the wideband: the Port only listens.

Which route does your wideband use?

Your widebandRouteMAX3232 needed?
AEM OBD-II CAN X-Series: 30-0333 or 30-0334, its CAN pair on the steering-column CAN pair CAN, plain 11-bit, at the gauge’s default settings: it answers OBD-II PID 0x24 requests at 0x7E6. Enable AEM OBD-II CAN X-Series 30-0333 / 30-0334 AFR (CAN pair, not the D0 serial wire; 30-0300 / 30-0310 use their serial wire instead). Details in the next section. No
AEM UEGO 30-4100 / 30-4110, the AEM X-Series 30-0300 / 30-0310 serial wire, AEM Inline 30-2310, Innovate LC-1 / LC-2 / MTX-L / LM-2 / LM-1, Zeitronix Zt-2 / Zt-3, PLX iMFD, AutoMeter and Stack Pro Plus Serial, through the MAX3232 into D0. This page. Yes
Any wideband with a 0-5 V analogue output, on an Evo X or Ralliart Analogue. Wire the output to the engine ECU’s rear O2 input and enable Rear O2 Wideband; nothing connects to the Port itself. No

AEM OBD-II CAN X-Series: 30-0333 or 30-0334

The one wideband Port 4.0 reads over CAN is AEM’s OBD-II CAN X-Series: the 30-0333 gauge kit or the 30-0334. It needs no MAX3232 and no serial wire. Port 4.0 polls it the way the EvoScan Windows software has since 2022, over plain 11-bit CAN at 500 kbit/s: the gauge answers OBD-II PID 0x24 requests at 0x7E6 and replies from 0x7EE.

  • Wire the AEM gauge’s CAN pair (AEMnet+ / CAN-H and AEMnet- / CAN-L) to the same steering-column CAN pair as the Port 4.0, beside the Port’s own taps. Do not wire or plug it into the OBD-II port: on the Evo X that connector is on the other side of the ETACS gateway, and the Port’s requests never reach it. AEM’s own instructions plug the gauge into the OBD-II port, which is why a gauge fitted that way shows nothing in EvoScan.
  • Leave the gauge at its default OBD-II settings. Port 4.0 supports the defaults only: ECU #6 (0x7E6), PID O2 #1 (0x24), 11-bit IDs, 500 kbps. A gauge set to another ECU #, another PID or 29-bit IDs is never answered.
  • Tick AEM OBD-II CAN X-Series 30-0333 / 30-0334 AFR (CAN pair, not the D0 serial wire; 30-0300 / 30-0310 use their serial wire instead) in the Wideband group. The Wideband menu then counts the replies; “no reply” with the gauge powered means the wrong bus or changed settings.
  • The standard X-Series 30-0300 gauge and 30-0310 inline broadcast AEMnet instead, which Port 4.0 does not read. Those two connect through their blue serial wire and the MAX3232, exactly as described below.

What you need

  • A MAX3232 RS-232 to TTL module, about $2 from any electronics supplier. It must be a MAX3232, the 3.3 V part. A MAX232 module is 5 V only: it will not run from 3.3 V, and its output would put 5 V into the Port, which the ESP32-S3 pins are not rated for. The common type has a DB9 socket on one end and a four-pin header (VCC, GND, TXD, RXD) on the other; the bare type has a header on each side. Either works.
  • Three short lengths of hook-up wire, heat-shrink and a soldering iron.
  • The wideband’s serial-out wire and its serial ground (the table in step 3 names them for each controller), or the wideband’s PC data cable plus a male-to-male null-modem adapter.
  • Optional: a multimeter, for the checks in the troubleshooting section.
RS-232 side 3.3 V logic side Wideband controller AEM, Innovate, Zeitronix, PLX, AutoMeter / Stack serial out serial ground MAX3232 module R1IN (DB9 pin 3) GND (DB9 pin 5) VCC GND RXD (R1OUT) TXD (T1IN) EvoScan Port 4.0 XIAO ESP32-S3 3V3 GND D0 D1 (not used) leave open RS-232 data shared ground 3.3 V 3.3 V logic The Port only listens. Nothing is wired to the module’s TXD pin or to the XIAO’s D1.
The whole circuit. RS-232 levels on the left of the module, 3.3 V logic on the right. Five wires in total, and the grounds are one net.
Step 1

Power the module from the XIAO’s 3V3 pin

Module VCC to the XIAO’s 3V3 pin, module GND to a XIAO GND pin. Not the 5V pin: the MAX3232’s output swings all the way up to its supply voltage, and the ESP32-S3’s inputs are 3.3 V parts. At 3.3 V the module still makes its own RS-232 voltages internally (that is what the four small capacitors on it are for), so nothing is lost.

Step 2

Module output to D0

The module has two data pins on its TTL side. One is the receiver’s output: the RS-232 data from the wideband, turned into 3.3 V logic. That pin goes to the XIAO’s D0 pin (GPIO 1). On most DB9 modules it is the pin marked RXD, meaning “connect this to your receiver”. The other pin, usually marked TXD, is an input into the module: a D0 wired there never sees a byte. Leave it unconnected.

Labels vary between modules, and nothing is damaged by trying the other pin. If the Wideband menu shows 0 bytes in step 5, move the D0 wire to the other data pin. With a multimeter you can settle it first: the pin you want has continuity to pin 12 (R1OUT) of the MAX3232 chip. The chip pinout is in the troubleshooting section.

D0 is the top-left pin of the XIAO with the USB-C socket at the top. Solder the wire to the top of the header pin where it comes through the XIAO board. The CAN breakout board underneath does not use D0. D1, next to it, is not used by the wideband at all.

USB-C ESP32-S3 D0 (GPIO1) D1 (GPIO2) D2 (GPIO3) D3 (GPIO4) D4 (GPIO5) D5 (GPIO6) D6 (GPIO43) serial in, from module RXD (R1OUT) not used by the wideband, leave free used by the CAN board 5V GND 3V3 D10 (GPIO9) D9 (GPIO8) D8 (GPIO7) D7 (GPIO44) do not power the module from 5 V to the module’s GND to the module’s VCC used by the CAN board (SPI) used by the CAN board Seen from above with the USB-C socket at the top. Only D0, 3V3 and GND are used for the wideband.
XIAO ESP32-S3 pin map. The wideband uses D0 (top left), 3V3 and GND (right side). Everything else stays as it is.
DB9 socket MAX3232 VCC GND TXD RXD to the XIAO’s 3V3 pin to the XIAO’s GND pin leave unconnected (it is an input) to the XIAO’s D0 pin (R1OUT) DB9 pin 3 = data in (R1IN) DB9 pin 5 = ground DB9 pin 2 = the module’s output, not used Some modules swap the TXD / RXD labels. The pin you want is the receiver’s output. If 0 bytes arrive, move the D0 wire to the other data pin. Nothing is harmed either way.
A typical DB9 module. The TTL header goes to the XIAO: VCC to 3V3, GND to GND, RXD to D0, TXD to nothing.
Step 3

Wideband serial wire to the module’s RS-232 input

The wideband’s serial-out wire goes to the module’s receiver input, the MAX3232’s R1IN. On a module with a DB9 socket that is DB9 pin 3, and the wideband’s serial ground goes to DB9 pin 5. Pin 2 is the module’s own output: a wire put there is never read. On a bare module use the RS-232-side pin that leads to chip pin 13 (R1IN), with the ground pin beside it.

The module’s DB9 socket is wired to plug straight into a PC’s COM port: it listens on pin 3, where a PC talks, and talks on pin 2, where a PC listens. A wideband is also built to plug into a PC, so its data cable puts the data on pin 2 of its own plug. Plug that cable straight into the module and you have two talkers on pin 2 and nobody listening. Either put a male-to-male null-modem adapter (one part, it swaps pins 2 and 3) between the cable and the module, or skip the cable and solder the data wire straight onto the module’s pin 3 pad and the ground onto pin 5. The soldered way is also the neater install.

The grounds must be shared. Run the wideband’s serial ground (or its power ground) to the module’s ground, which is the Port’s ground. A wideband grounded only to the chassis somewhere else usually still works in a car, but a dedicated ground wire to the module is the reliable way.

The module’s DB9 socket, looking into the holes pin 3: data in (R1IN). The wideband’s serial-out wire goes here. 5 4 3 2 1 9 8 7 6 pin 5: ground (the wideband’s serial ground) pin 2: the module’s own output, not this one The numbers are moulded into the connector face. On the back of the board (the solder side) the order is mirrored.
The female DB9 on the module, seen from the front. Data into pin 3, ground on pin 5. Pin 2 is an output and reads nothing.

Where each controller’s serial output is

ControllerSerial outSerial groundNotes
AEM UEGO 30-4100 / 30-4110 gaugeBLUE wirethe gauge’s BLACK ground; run a wire from the same ground point to the moduleAFR or lambda follows the gauge’s switch; the Port handles both.
AEM X-Series 30-0300 / 30-0310BLUE wire, harness pin 5 “Serial / RS-232 Output”gauge groundTheir AEMnet CAN output is not read by Port 4.0: the serial wire is the route for these two. The OBD-II models 30-0333 / 30-0334 go on CAN instead, see the section above.
AEM Inline 30-2310GREY wirecontroller ground19200 baud.
Innovate LC-1OUT port, 2.5 mm stereo jack: the ring carries serial out, the sleeve is ground; the tip is serial IN. Confirm with a meter (the data contact reads negative volts at idle).jack sleeveFit the terminator plug in the IN port, as for PC logging.
Innovate LC-2, MTX-L, LM-2OUT port, 4-pin Molex. Innovate cable p/n 3812 (Molex to 2.5 mm) gives you the same ring and sleeve as above.jack sleeveNothing in the IN port. Do not plug or unplug the serial ports while the unit is powered.
Innovate LM-1Its PC serial cable: DB9 pin 2 = dataDB9 pin 5Needs the null-modem adapter, or move the two wires to the module’s pins 3 and 5.
Zeitronix Zt-2, Zt-3DATA port through the supplied RJ-12 to DB-9 plug: DB-9 pin 2 = dataDB-9 pin 5Use the supplied plug, not the RJ-12 pins directly: the DATA port also carries power for Zeitronix displays. Data starts 6 s (2010 model) or 15 s (2009) after power-up.
PLX iMFD (SM-AFR)2.5 mm jack serial outputjack sleeveSome PLX units output TTL levels: if the status line counts breaks, tick the invert switch.
AutoMeter Pro Plus, Stack Pro PlusVIOLET wire “Serial Out”VIOLET/BLACK wire “Serial Ground”Sends “htg” while the sensor heats, then one reading per line.
Step 4

Switch on the gauge that matches the controller

Open the dashboard and its parameter list, tap the Wideband filter button, and tick the AFR gauge for your device. One only: the gauge selects the device’s protocol and baud rate, and the last one ticked wins.

ControllerGauge to tickBaud
AEM UEGO 30-4100 / 30-4110, AEM X-Series on the serial wireAEM X-Series / 30-4100 UEGO Serial 9600 AFR9600
AEM Inline 30-2310AEM Inline 30-2310 Serial 19200 AFR19200
Innovate LC-1, LC-2, MTX-L, LM-2Innovate LC-1/LC-2/MTX-L/LM-2 AFR (ISP2)19200
Innovate LM-1Innovate LM-1 AFR (ISP1)19200
Zeitronix Zt-2 model 2009Zeitronix Zt-2 (2009) AFR9600
Zeitronix Zt-2 model 2010, Zt-3Zeitronix Zt-2/Zt-3 (2010) AFR9600
PLX iMFD (SM-AFR)PLX iMFD AFR19200
AutoMeter Pro Plus, Stack Pro PlusAutoMeter (Stack) Pro Plus AFR9600

Do not tick AEM OBD-II CAN X-Series 30-0333 / 30-0334 AFR (CAN pair, not the D0 serial wire; 30-0300 / 30-0310 use their serial wire instead) for a wideband on the serial wire. That gauge polls the CAN bus and the serial input stays closed. The same goes for Rear O2 Wideband, which reads the engine ECU, not D0.

Step 5

Read the Wideband menu

Tap the Wideband button again to open its menu. It shows the active source and the latest AFR, and under them a status line for the serial input that refreshes every two seconds. (If your menu has no status line, your firmware predates it: update from the dashboard first.) With everything right and the wideband warmed up, it reads something like this:

D0 at 9600 baud: 1842 bytes, 307 packets, last byte 60 ms ago [31 34 2E 37 0D 0A 31 34 2E 37 0D 0A]. Receiving and decoding.

The bytes and packets counters are the quickest wiring test you have. They count from the moment the gauge is enabled, so a bytes counter that stays at 0 means D0 is not seeing the wideband’s data at all, and a packets counter that stays at 0 while bytes arrive means the device is not the one the gauge expects. Anything other than “Receiving and decoding” is covered in the troubleshooting section below.

Done. The AFR gauge follows the wideband, the reading is logged on the same timeline as the ECU data, and the fuel-trim calculations use it.

Troubleshooting

Common mistakes

  • D0 on the wrong module pin. D0 is taken from the module’s TXD-marked pin (an input) instead of the RXD-marked one, the receiver’s output (R1OUT). Move it to the other pin. Nothing is harmed either way.
  • The wideband’s wire on DB9 pin 2 instead of pin 3. Pin 2 is the module’s output; the receiver input (R1IN) is pin 3. A PC data cable plugged straight into the module makes exactly this mistake, which is what the null-modem adapter is for.
  • No shared ground. The wideband’s serial ground must reach the module’s GND, which is the Port’s GND. Without it the receiver has nothing to measure the signal against and the counters stay at 0 or fill with junk.
  • The wrong gauge is on. AEM OBD-II CAN X-Series 30-0333 / 30-0334 AFR (CAN pair, not the D0 serial wire; 30-0300 / 30-0310 use their serial wire instead) polls the CAN bus and leaves D0 closed, so does Rear O2 Wideband. Tick the serial gauge for your device instead, and only that one.
  • 5 V on the module. VCC on the XIAO’s 5V pin runs the module at 5 V and feeds 5 V logic into D0. Move it to 3V3. A module built around a MAX232 rather than a MAX3232 cannot run at 3.3 V at all; replace it.
  • The wideband is not sending yet. Every controller streams only after its warm-up: a Zeitronix starts its data 6 to 15 seconds after power, an Innovate sends warm-up and calibration status first, an AutoMeter sends “htg” while heating. Give it a minute with the engine running before judging the wiring.
  • Innovate IN port. An LC-1 streaming to a logger needs its terminator plug in the IN port; an LC-2, MTX-L or LM-2 wants nothing connected to IN. The data comes out of the OUT port.
  • Two gauges ticked. Only one serial source can be open. The last gauge ticked wins; untick the others.

What the status line means

The status line saysWhat is happeningWhat to do
“AEM OBD-II CAN X-Series (30-0333 / 30-0334): 0 replies from 0x7EE. No reply yet …”The OBD-II CAN gauge is on and nothing answers 0x7E6; D0 is closed.For a serial wideband, tick its serial gauge (AEM X-Series / 30-4100 UEGO Serial 9600 AFR for an X-Series on its serial wire). For the OBD-II gauge, check its CAN pair is on the steering-column pair and its settings are the defaults.
“Serial input not in use: this gauge is the engine ECU’s rear O2 input …”Rear O2 Wideband is on; D0 is closed.Tick your device’s serial gauge.
“Serial input not in use: enable the one serial AFR gauge …”No serial gauge is ticked.Tick one (step 4).
“The serial port on D0 is not open”The device could not start its serial port.Reboot the device. If it persists, press “Upload diagnostic log now” on the dashboard’s Admin page and contact support.
0 bytes, no breaksD0 sees a quiet line: nothing is driving it.Wiring. RXD not TXD on D0 (step 2), pin 3 not pin 2 (step 3), VCC on 3V3 and GND on GND, grounds shared, wideband powered and past its warm-up.
0 bytes, breaks countingSomething drives D0 but it idles low: a TTL-polarity output through the module.Tick “Invert the serial RX signal” in the same menu and give it a few seconds.
bytes, 0 packets, frame errors or breaksThe bit timing is off: the wrong baud rate for the device, or the wrong polarity.Tick the gauge that matches the device. If it already does, try the invert switch.
bytes, 0 packets, no errorsClean bytes, but in another device’s protocol.Tick the gauge that matches the device. The last bytes in brackets say which it is: B2 8x headers are Innovate, 00 01 02 Zeitronix, 80 .. 40 PLX, digits with a dot and 0D 0A an AEM or AutoMeter line.
packets, but no AFRDecoding fine; the device has no reading yet.Wait for the warm-up. The text above the status line shows the Innovate warm-up or calibration state, or the AutoMeter’s “htg” / “rdy”.
“Receiving and decoding”Working.Nothing.

Checks with a multimeter

  • Module VCC to GND: 3.2 to 3.4 V with the Port powered.
  • Wideband serial-out wire to ground, wideband powered: a steady negative voltage, about -5 to -12 V, is an RS-232 line idling and is what you want. 0 V means the wideband is not sending or you have the wrong wire. A steady +3 to +5 V means a TTL-polarity output: wire it the same way and tick the invert switch.
  • The module pin on D0, to ground: about 3.3 V at idle. 0 V at idle with the wideband connected means the polarity is inverted (invert switch) or you are on the wrong pin.
  • Continuity, module unpowered: the header pin you put on D0 must connect to chip pin 12 (R1OUT); the DB9 pin 3 pad must connect to chip pin 13 (R1IN).
MAX3232 chip, pin 1 beside the dot 1C1+ 2V+ 3C1- 4C2+ 5C2- 6V- 7T2OUT 8R2IN 16VCC3.3 V from the XIAO 15GNDground 14T1OUTto DB9 pin 2 (unused) 13R1INfrom DB9 pin 3: the wideband’s data 12R1OUTto the header pin on D0 11T1INthe header’s TXD pin, leave open 10T2IN 9R2OUT Continuity check: the header pin you put on D0 must beep to pin 12, and the DB9 pin 3 pad must beep to pin 13.
The chip on the module. Only the first receiver is used: R1IN (13) from the wideband, R1OUT (12) to D0.

If it still does not work

Contact EvoScan support with the exact text of the Wideband menu’s status line, the name of the gauge you ticked, the wideband make and model, and a photo of the module’s wiring at both ends. Those four things identify nearly every case in the table above without a second round of questions.

Questions

Can I use D1 instead of D0?

No. The serial input is D0 (GPIO 1) only. D1 is not connected to anything in the firmware, so a wire there is never read.

Does the Port send anything to the wideband?

No. The input is receive-only, which is why the module’s TXD pin stays open. The old Windows software’s LC-1 recalibrate command is not part of the Port.

Do I need the invert switch?

Not for any controller in the tables above: they all drive a PC COM port, and the MAX3232 delivers the right polarity to D0. The switch is for a device with a TTL-level serial output (some PLX units), and the status line tells you when that is the case.

Can I log two widebands?

One serial source at a time. A second wideband can come in over CAN (an AEM OBD-II CAN X-Series 30-0333 / 30-0334 on the Port’s CAN pair) or, on an Evo X or Ralliart, through the engine ECU’s rear O2 input with its 0-5 V analogue output.

AFR or lambda?

An AEM or AutoMeter gauge sends whichever it is displaying; a value below 3.0 is taken as lambda and multiplied by 14.7. Innovate and Zeitronix packets are decoded to AFR at 14.7.

The reading drops out when the engine starts.

The wideband restarts during cranking and heats up again. The Port keeps running, so the gauge comes back on its own when the stream resumes.