Hardware

An ESP32-S3 driving four VEX V5 Competition Switch ports through optocouplers. Hardware revision 1.1.

Overview

MCUESP32-S3-WROOM-1-N16R8
Flash16 MB, dio mode
USB bridgeCH340C
Ports4 × RJ11, driven in unison
IsolationPC817C optocoupler per signal (8 total)
PowerUSB-C, with TP4056 battery charging

Every output is optically isolated, so there is no electrical path between the V5 and the USB host. The board sinks the V5's own signal lines rather than driving voltage into them.

Pin map

Each port carries an ENABLE/DISABLE line and a DRIVER/AUT line. All four ports move together.

PortENABLE/DISABLEDRIVER/AUT
1IO7IO15
2IO16IO17
3IO18IO8
4IO19IO20
SignalHIGHLOW
ENABLE/DISABLEDisabled (safe)Enabled
DRIVER/AUTAutonomousDriver
The two signals have opposite safe levels. ENABLE/DISABLE rests HIGH, DRIVER/AUT rests LOW. The firmware drives them explicitly rather than through one shared polarity.

IO19 and IO20 are the ESP32-S3 native USB D−/D+ pins, used here as ordinary GPIO for port 4. That is why native USB-Serial is unavailable and all serial traffic runs over the CH340C on UART0 (IO43/IO44).

Firmware constants

ConstantValueMeaning
WATCHDOG_TIMEOUT_MS600 msManual-mode comms watchdog. Suspended during a timed period.
HEARTBEAT_INTERVAL_MS1000 msUnsolicited heartbeat event interval.
PERIOD_MIN_MS1 msShortest timed period.
PERIOD_MAX_MS600000 msLongest timed period (10 minutes).
TWDT_BACKSTOP_MS10000 msTask-watchdog margin past duration_ms; a firmware hang reboots to Disabled.
IDENTIFY_DURATION_MS3000 msLength of the identify indication.

Building the firmware

PlatformIO, with the target and build flags pinned in firmware/platformio.ini.

Flash mode must be dio. The N16R8 modules boot-loop the second-stage bootloader when flashed with a qio image. The setting is pinned in platformio.ini so builds, uploads and merged images all inherit it.

ARDUINO_USB_CDC_ON_BOOT must stay 0. Mapping Serial to native USB points the firmware at a dead interface on this board.

Design files

The full design is published under CERN-OHL-P-2.0 — free to manufacture, modify and sell. See the license. The board was drawn in EasyEDA Pro; the gerbers below are what the fabricator needs and are readable by any CAM tool.

FileFormatSize
Gerbers and drill filesRS-274X + Excellon, zip98 KB
SchematicPDF308 KB
Bill of materialsXLSX9 KB
Pick and placeXLSX11 KB
3D modelSTEP, zip2.6 MB
Board outlineDXF, zip220 KB
EasyEDA Pro projectEPRJ21.3 MB

Fabrication was ordered from the gerber archive as-is: 4 layers, 1.6 mm FR-4, 1 oz copper, HASL. The pick-and-place and BOM files are formatted for JLCPCB assembly.

The .eprj2 project file only opens in EasyEDA Pro. Everything needed to build the board without it — gerbers, drills, BOM, placement, outline and 3D model — is listed above.

Sources are versioned alongside the firmware at github.com/Elevation-Robotics/OpenFC.

Not VEX hardware

OpenFC is an independent open-source project of Elevation Robotics. It is not manufactured, endorsed, approved or sponsored by VEX Robotics or the REC Foundation, and is not affiliated with either. Those names appear here only to describe what the board is compatible with.