Skip to the content
PCBKitNew board
2 layers90 × 66 mmCan modbus tap, the printed circuit board in 3D

Spy on hardware interactions

Size
90 × 66 mm
Copper layers
2
Thickness
1.6 mm
Parts
41
Nets
67
Pads
214
Tracks, vias
569, 60
Pours
4
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
8 Oct 2026
Updated
8 Oct 2026

Overview

Can modbus tap is an open-source printed circuit board by reliablereefs, from the reliablereefs/can-modbus-tap repository on GitHub. It is a 2-layer board of 90 × 66 mm with 41 parts on 67 nets, routed with 569 tracks and 60 vias.

It is built around the ESP32-S3-WROOM-1-N8, ISO1042BDW and RFM-0505S, with the ADS1115IDGSR, AP2112K-3.3 and ISO1640BD among its other parts. Its parts include 15 resistors, 9 capacitors, 7 ICs, 3 diodes and 2 connectors. It belongs with the ESP32 boards of this library.

Main components

9

README

README.md

CAN / MODBUS tap

Listen-only probe for a 24 V accessory port that uses a USB-A shell. An ESP32-S3 records classic CAN frames, a collector stores them, and MODBUS RTU payloads inside those frames are decoded into request/response pairs and a register map.

The probe cannot transmit. The isolated CAN transceiver's TXD pin is tied to its logic supply, so the driver stays recessive, and the ESP32 TWAI controller runs in listen-only mode. Use it on equipment you are allowed to monitor.

Bring-up before any connection

The USB-A plug is not USB. Do not plug it into a computer, and do not use a normal USB cable between the equipment port and anything else. A 24 V pin in that shell will damage a USB host.

  1. With the tap unplugged, meter the equipment port.
  2. Identify ground and the pin that sits near 24 V.
  3. Scope the other two pins. Classic CAN idle holds both near 2.5 V. RS-485 idle is a differential offset without that 2.5 V pair bias.
  4. Wire the tap's USB-A plug to match the measured port: pin 1 = 24 V, pin 2 = CANL, pin 3 = CANH, pin 4 = GND. See docs/hardware.md.
  5. Power the tap from its USB-C port. The 24 V pin is measured and is not the tap's supply.
  6. Confirm frames in the collector before trusting a bitrate lock.

If the scope does not show CAN bias, stop. This board's controller only decodes classic CAN. An RS-485 MODBUS RTU pair needs a different transceiver.

Layout

text
can-modbus-tap/
  docs/hardware.md     board, pinout, isolation, BOM notes
  docs/protocol.md     capture record, upload JSON, MODBUS pairing
  hardware/bom.csv
  firmware/            ESP-IDF project for ESP32-S3
  collector/           SQLite ingest, decode, and browser UI
mermaid
flowchart LR
  port["Equipment port"] --> choke["Choke and TVS"]
  choke --> iso["ISO1042 TXD tied high"]
  iso --> esp["ESP32-S3 listen-only"]
  v24["24 V divider"] --> adc["ADS1115"]
  adc --> i2c["ISO1640"]
  i2c --> esp
  esp --> flash["Flash ring"]
  esp --> col["Collector"]

Firmware

Requires ESP-IDF 5.3. The Wi-Fi SSID and collector URL are compile-time settings, so they stay out of the git tree.

bash
cd firmware
idf.py set-target esp32s3
idf.py menuconfig   # CAN MODBUS Tap
idf.py build flash monitor

Set the SSID, password, and TAP_COLLECTOR_URL. Leave bitrate at 0 to scan 25 kbit/s through 1 Mbit/s. Set a fixed rate once the bus is identified. An empty SSID still records to the on-module flash ring.

The activity LED (GPIO2) stays on while frames arrive. GPIO5 is the TWAI transmit test point and is not routed to the transceiver.

Collector

bash
cd collector
go run ./cmd/collector -listen 0.0.0.0:8080 -db data/tap.db

Open http://127.0.0.1:8080/. Pages:

PathContents
/Raw CAN frames
/modbusCRC-valid MODBUS RTU payloads
/transactionsRequest paired with the next response, 500 ms window
/mapRegister addresses sorted by how often they appear
/v1/frames.csvRecent raw frames

POST /v1/frames has no authentication. Run the collector on the lab network. Details are in docs/protocol.md.

bash
cd collector && go test ./...

Parts

41
QtyValueFootprintReferences
5100nFC_0402_1005MetricC2, C3, C4, C5, C8
44.7kR_0603_1608MetricR4, R5, R6, R7
310uFC_0805_2012MetricC1, C6, C7
210kR_0603_1608MetricR10, R11
222R_0603_1608MetricR14, R15
25.1kR_0603_1608MetricR8, R9
112.0kR_0603_1608MetricR2
1120R_0603_1608MetricR13
11kR_0603_1608MetricR3
11uFC_0402_1005MetricC9
1330R_0603_1608MetricR12
191.0kR_0603_1608MetricR1
1ACT45B-510-2PACT45B-510-2PL1
1ADS1115IDGSRMSOP-10_3x3mm_P0.5mmU4
1AP2112K-3.3SOT-23-5U7
1AP7361C-33E-13SOT-223-3_TabPin2U6
1BOOTSW_PUSH_6mmSW1
1BZT52C3V6D_SOD-123D2
1ESP32-S3-WROOM-1-N8ESP32-S3-WROOM-1U1
1ISO1042BDWSOIC-16W_7.5x10.3mm_P1.27mmU2
1ISO1640BDSOIC-8_3.9x4.9mm_P1.27mmU3
1LEDLED_0603_1608MetricD3
1NUP2105LT1GSOT-23D1
1RESETSW_PUSH_6mmSW2
1RFM-0505SRECOM_RFM-0505SU5
1TERMPinHeader_1x02_P2.54mm_VerticalJP1
1TWAI_TXTestPoint_Pad_D1.5mmTP1
1USB-A plugUSB3_A_Plug_Wuerth_692112030100_HorizontalJ1
1USB-CUSB_C_Receptacle_GCT_USB4105-xx-A_16P_TopMnt_HorizontalJ2

Questions

How big is the Can modbus tap PCB?

It measures 90 × 66 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Can modbus tap use?

41 parts, built around the ESP32-S3-WROOM-1-N8, ISO1042BDW, RFM-0505S and ADS1115IDGSR. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Can modbus tap KiCad files?

From the reliablereefs/can-modbus-tap repository on GitHub, at the commit this page was made from: the board is hardware/kicad/can-modbus-tap.kicad_pcb and its schematic hardware/kicad/can-modbus-tap.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Can modbus tap design in my own project?

Its repository states no licence, so its author keeps all rights: ask reliablereefs before reusing the design.

Similar boards

  • 4 layers73 × 33 mmCAN485-dongle, the printed circuit board in 3D

    CAN485-dongle

    Mehdi-Ldj/usb-can-rs485-dongle

    CAN-485 diagnostic gateway — rev A hardware

    77 partsCERN-OHL-P-2.0
  • 2 layersLV Sensor, the printed circuit board in 3D

    LV Sensor

    Gregification/BeeMS

    Battery Management System

    68 parts5MIT
  • 4 layers85 × 50 mmPdlc, the printed circuit board in 3D

    Pdlc

    brown-studios/pdlc

    A circuit board for driving PDLC film from 12 V DC

    127 parts7MIT
  • 4 layers195 × 45 mmBed lift, the printed circuit board in 3D

    Bed lift

    j9brown/bed-lift

    Motorized bed lift system

    154 parts2MIT
  • 4 layers180 × 130 mmShield, the printed circuit board in 3D

    Shield

    Nicolboy/KICAD-C2000-powershield

    Shield d'isolation, alimentation et interconnexion pour TMS320 C2000, conçu sous KiCad 10.

    213 partsCERN-OHL-S-2.0
  • 2 layers33 × 18.7 mmEasyISO, the printed circuit board in 3D

    EasyISO

    Protocentral/protocentral_easyiso_hardware

    ProtoCentral easyISO isolated Qwiic adapter — hardware design files (CERN-OHL-P v2)

    25 partsCERN-OHL-P-2.0
  • 4 layers50 × 50 mmHSCanT, the printed circuit board in 3D

    HSCanT

    cherry-embedded/HSCanT-hardware

    HSCanT is a USB to 4-channel CAN FD tool designed based on the HPM5321 chip.

    130 parts52Apache-2.0