Skip to the content
6 layers100 × 50 mmArchive, the printed circuit board in 3D

If you are looking for IronMaple ESP32‐FRC‐devkit resources, please switch branch to dev-board.

Size
100 × 50 mm
Copper layers
6
Thickness
1.6 mm
Parts
92
Nets
92
Pads
490
Tracks, vias
97, 16
Routed
Yes
KiCad
KiCad 8.0 (file 20240108)
Created
14 May 2025
Updated
22 Oct 2026

Overview

Archive is an open-source printed circuit board by sikaxn, from the sikaxn/FRC-Custom-CAN-Sensor repository on GitHub, published under the GPL-3.0 licence. It is a 6-layer board of 100 × 50 mm with 92 parts on 92 nets, routed with 97 tracks and 16 vias.

It is built around the CP2104EK, ESP32-WROOM-32D and TJA1051T/3/1, with the LMR36510ADDA, USBLC6-2P6 and PMEG6020AELRX among its other parts. Its parts include 29 capacitors, 22 resistors, 12 connectors, 7 ICs and 7 diodes. It belongs with the ESP32 boards of this library.

Main components

10

README

readme.md

IronMaple ESP32‐FRC‐devkit sponsored by JLCPCB

If you are looking for IronMaple ESP32‐FRC‐devkit resources, please switch branch to dev-board.

Code, CAD models: https://github.com/sikaxn/FRC-Custom-CAN-Sensor/tree/dev-board/pcb

Manual: https://github.com/sikaxn/FRC-Custom-CAN-Sensor/wiki/800.-IronMaple-ESP32%E2%80%90FRC%E2%80%90devkit-Manual

Design file: https://oshwlab.com/sikaxn/seal-v2-dev-board

Factory test code: https://studenttechsupport.com/customcanespfw/factory/

Firmware tbd fix

Addressable LED

  1. Allow change number of pixel over CAN DONE
  2. offline detection on roborio driver DONE

Battery Tracking

  1. Indicator Task that use IM dev board RGB LED DONE
  2. Better CAN protocol - Allow writing energy form roboRIO by user DONE
  3. Better CAN protocol - Allow user to trigger tag rescan over CAN DONE
  4. Better CAN protocol - More status feedback from ESP32 (tag write error) DONE
  5. Better CAN protocol - Empty message upon startup DONE
  6. Allow change CAN Device Number using web tool DONE
  7. APP improvment - init new serial number follow BEST protocol (or disable this in setting)
  8. APP improvment - App should not be set as default NFC app on Android

IM ESP Devkit demo

  1. Bugfix - Change CAN Device Number using web tool currently not working. DONE
  2. Maybe merge Addressable LED with it.

Battery Tracking + addressable LED combined firmware

  1. New firmware that combine those two together. DONE

Custom CAN sensor with roboRIO

Please also check out the WiKi section for more documentation!

https://github.com/sikaxn/FRC-Custom-CAN-Sensor/wiki

Some resources in another branch

This repo need some cleanup. Will do later.

https://github.com/sikaxn/FRC-Custom-CAN-Sensor/tree/dev-board

IronMaple ESP32‐FRC‐devkit sponsored by JLCPCB

If you are looking for IronMaple ESP32‐FRC‐devkit resources, please switch branch to dev-board.

Code, CAD models: https://github.com/sikaxn/FRC-Custom-CAN-Sensor/tree/dev-board/pcb

Manual: https://github.com/sikaxn/FRC-Custom-CAN-Sensor/wiki/800.-IronMaple-ESP32%E2%80%90FRC%E2%80%90devkit-Manual

Design file: https://oshwlab.com/sikaxn/seal-v2-dev-board

Factory test code: https://studenttechsupport.com/customcanespfw/factory/

Web firmware flasher

Pre built ESP32 firmware for Battery RFID Tracker and Addressable LED Controller. Just Chrome, USB and flash.

https://studenttechsupport.com/customcanespfw/

Web flasher source code: https://github.com/sikaxn/sikaxn.github.io/tree/master/customcanespfw

ChiefDelphi Thread

https://www.chiefdelphi.com/t/custom-can-sensor-some-good-progress/501764

Video

Potentiometer analog input https://www.youtube.com/watch?v=bEm6USGRP-E

LED (pin 13) digital output https://www.youtube.com/shorts/q937u09llhw

roboRIO heartbeat (look at the LED blinking while enabled) https://www.youtube.com/shorts/c1ieu9o8Lzo

⚠️ Disclaimer

This project is for demo and under work. Faulty CAN frame could bring entire CAN bus down.

This project use AI generated content.


What's in this repository:

  1. [Arduino Mega] Digital Analog bi-directional (Docs / Arduino Firmware / roboRIO / RIO Simulator)
  2. [Arduino Mega] REV Colour sensor (Docs / Arduino Firmware / roboRIO) (this share the same roboRIO code with the first one)
  3. [Arduino Mega] LCD Screen (Arduino Firmware / roboRIO / RIO Simulator)
  4. NOT FRC LEGAL [ESP32] Robomaster motor gateway (dual CAN on ESP32) (Arduino Firmware / roboRIO)
  5. NOT FRC LEGAL Robomaster DT7 Remote on CAN (Arduino Firmware / roboRIO)
  6. [ESP32] Battery Tracking System (Arduino Firmware / roboRIO / Android APP / Docs)
  7. [ESP32] ToF using 4 VL53L1X (Docs / Arduino Firmware / roboRIO / UITool / ROI Calculator Tool)
  8. [ESP32] Addressable LED Controller (Arduino Firmware / roboRIO)
  9. [ESP32] Battery Tracking (Arduino Firmware / roboRIO) / Docs
  10. [ESP32] Battery Tracking LF (Arduino Firmware / roboRIO) / Docs
  11. [ESP32] REV and Andymark Colour sensor (Arduino Firmware / roboRIO) / Docs

Important reminder of ESP32 radio:

Per FRC Game Manual (2025) R707 and E301, Wi-Fi radio should not be used within competition area and Bluetooth radio should not be used if robot is competing on the field. As for now, none of the code utilizing ESP32 have any wireless capability. However, if further update enabled this capability, the use of such device and software should be carefully planned and coordinated to stay in compliance with the game manual.


How FRC CAN bus works

The 'CAN ID' we talked about when setting up motor controllers (Spark, Kraken, PDP, etc) is a number from 0-63. This is not the CAN identifier (message ID) used in CAN data layer. FRC Use a very specific scheme outlined in FRC CAN specification to convert certain information to CAN identifier. All device connected to roboRIO must follow this scheme when determine what ID to send data to and read form.

https://docs.wpilib.org/en/stable/docs/software/can-devices/can-addressing.html#requirements-for-frc-can-nodes

CAN identifier is calculated from device ID (device type ID), manufacturer ID, API ID (in the documentation it talked about API Class and Index but doesn't matter and it is just a suggestion. Each device will have its unique API ID designed for its use) and device number (0-63 as the traditional 'CAN ID' we talked about in FRC).

You must generate your CAN identifier (message ID) using this very specific way. A device will have multiple CAN message sent to and from roboRIO (and possibly to other non-roboRIO device). These different messages will share the same device type ID, manufacturer ID and device number. API ID will change based on use.


Update

  1. REVCOlourSensorV3 Arduino sketch has been updated to do conversion in code. In addition, rm_dt7 is added to handle Robomaster / DJI DT7 Remote with DR16. This is not legal to use in FRC. However you could still take a look at these conversion.
text
// === CAN Constants ===
#define DEVICE_TYPE_ID        0x0A  //DONOT CHANGE
#define MANUFACTURER_ID  0x08  //DONOT CHANGE
#define DEVICE_NUMBER    33  // Device Number 0-63
#define STATUS_API_ID        0x180
#define COLOR_SENSOR_API_ID  0x184
#define CONTROL_API_ID       0x190
#define HEARTBEAT_ID         0x01011840

uint32_t makeCANMsgID(uint8_t deviceID, uint8_t manufacturerID, uint16_t apiID, uint8_t deviceNumber) {
  return ((uint32_t)(deviceID & 0xFF) << 24) |
         ((uint32_t)(manufacturerID & 0xFF) << 16) |
         ((uint32_t)(apiID & 0x3FF) << 6) |
         (deviceNumber & 0x3F);
}
  1. An ID converter script is added. see below for usage.

  2. DO NOT change DEVICE_TYPE_ID and MANUFACTURER_ID as this will result roboRIO code stop working.


image

Message ID Generator GUI Tool

A minimal Tkinter application for converting between FRC 29-bit CAN IDs and their four fields.

image

CANDbg Message Viewer tool

A minimal Tkinter application viewing CAN messages using python-can.

Support Ctrl + C to copy message and roboRIO heartbeat decoding.

image


Parts

92
QtyValueFootprintReferences
1722uCapacitor_SMD:C_01005_0402MetricC3, C5, C7, C11, C12, C13, C15, C19, C20, C21, C22, C23, C24, C26, C28, C29 +1
9100nCapacitor_SMD:C_01005_0402MetricC1, C4, C9, C10, C14, C16, C17, C18, C27
71KResistor_SMD:R_0402_1005MetricR6, R8, R9, R10, R14, R15, R21
510KResistor_SMD:R_0402_1005MetricR7, R13, R16, R17, R18
4Hole_PadMountingHole:MountingHole_3.2mm_M3_Pad_ViaH1, H2, H3, H4
34u7Capacitor_SMD:C_01005_0402MetricC2, C6, C25
3Conn_01x04Connector_PinHeader_1.00mm:PinHeader_1x04_P1.00mm_VerticalJ2, J5, J13
3SW_SPSTButton_Switch_SMD:SW_Push_1P1T_NO_6x6mm_H9.5mmEN1, IO0, SW1
222RResistor_SMD:R_0402_1005MetricR4, R5
24k7Resistor_SMD:R_0402_1005MetricR11, R12
25K1Resistor_SMD:R_0402_1005MetricR1, R2
2Conn_02x02Connector_PinHeader_1.00mm:PinHeader_2x02_P1.00mm_VerticalJ7, J12
2LEDLED_SMD:LED_0201_0603MetricD4, D7
2PMEG6020AELRDiode_SMD:Nexperia_CFP3_SOD-123WD5, D6
2TLV1117LV-3.3VPackage_TO_SOT_SMD:SOT-223-3_TabPin2U5, U7
110kResistor_SMD:R_0402_1005MetricR3
1113KResistor_SMD:R_0402_1005MetricR20
11A PolyfuseFuse:Fuse_1206_3216Metric_Pad1.42x1.75mm_HandSolderF1
120KResistor_SMD:R_0402_1005MetricR19
122uHInductor_SMD:L_1008_2520MetricL1
12601-1103Library:CONN3_2601-1103_WAGJ3
12601-1106Library:CONN6_2601-1106_WAGJ14
1BC817Package_TO_SOT_SMD:SOT-23Q2
1BLM21PG221Inductor_SMD:L_0603_1608Metric_Pad1.05x0.95mm_HandSolderFB1
1CP2104Package_DFN_QFN:QFN-24-1EP_4x4mm_P0.5mm_EP2.6x2.6mmU2
1Conn_02x12Connector_PinHeader_1.00mm:PinHeader_2x12_P1.00mm_VerticalJ6
1ESP32-WROOM-32DLibrary:ESP32-WROOM-32D-3dU1
1LED_RGBALED_SMD:LED_RGB_Wuerth-PLCC4_3.2x2.8mm_150141M173100D3
1LL4148Diode_SMD:D_MiniMELFD1
1LMR36510ADDAPackage_SO:Texas_HTSOP-8-1EP_3.9x4.9mm_P1.27mm_EP2.95x4.9mm_Mask2.4x3.1mm_ThermalViasU6
1MCP2515_EXPConnector_PinHeader_1.00mm:PinHeader_1x07_P1.00mm_VerticalJ11
1PolyfuseFuse:Fuse_1206_3216Metric_Pad1.42x1.75mm_HandSolderF2
1R120Resistor_SMD:R_0402_1005MetricR22
1RC522_0Connector_PinHeader_1.00mm:PinHeader_1x08_P1.00mm_VerticalJ9
1RC522_1Connector_PinHeader_1.00mm:PinHeader_1x08_P1.00mm_VerticalJ10
1SANYOU_SRD_Form_CRelay_THT:Relay_SPDT_SANYOU_SRD_Series_Form_CK1
1SW_DIP_x01Button_Switch_SMD:SW_DIP_SPSTx01_Slide_6.7x4.1mm_W6.73mm_P2.54mm_LowProfile_JPinCAN_TERM1
1TJA1051T-3Package_SO:SOIC-8_3.9x4.9mm_P1.27mmU4
1UMH3NPackage_TO_SOT_SMD:SOT-363_SC-70-6Q1
1USBLC6-2P6Package_TO_SOT_SMD:SOT-666U3
1USB_C_Receptacle_USB2.0_16PConnector_USB:USB_C_Receptacle_HRO_TYPE-C-31-M-12J1
1YELLOWLED_SMD:LED_0201_0603MetricD2

More from sikaxn/FRC-Custom-CAN-Sensor

1
  • 4 layers40 × 40 mmEsptof, the printed circuit board in 3D

    Esptof

    sikaxn/FRC-Custom-CAN-Sensor

    If you are looking for IronMaple ESP32‐FRC‐devkit resources, please switch branch to dev-board.

    43 parts12GPL-3.0

Similar boards

  • 4 layers92 × 88 mmIOT, the printed circuit board in 3D

    IOT

    Habib-creater/ESP32-IoT-Monitoring-Control-Board

    4-layer ESP32-based IoT monitoring and control board with environmental sensing, relay control, USB-C, and Qwiic expansion.

    63 parts1
  • 4 layers100 × 100 mmWroom board, the printed circuit board in 3D

    Wroom board

    SinaKarvandi/PCB-Designs

    Blue Pill PCB

    63 parts1GPL-3.0
  • 4 layers100 × 80 mmESP32, the printed circuit board in 3D

    ESP32

    Tanmayeers/Projects

    Specifications: 1. Operting Voltage: 9V 2. Operating Current: 200mA 3. Output Voltage Swing: 6.5V 4. 3dB - Bandwidth: 100 ± 10 Hz 5. Noise: 5.406mVrms

    63 parts1
  • 4 layers82.5 × 78.7 mmESP WROOM 32D, the printed circuit board in 3D

    ESP WROOM 32D

    Pyisoe-Thame/ESP_WROOM_32D

    This repository contains files and designs created while following a YouTube tutorial on KiCad. The ESP-WROOM-32D is the same chip used in NodeMCU-32S development board.

    64 parts
  • 4 layers104.1 × 61 mmBigtest, the printed circuit board in 3D

    Bigtest

    YusufAlghoneimy/ESP32-PCB-Design

    Youtube PCB reference: made by morten (https://www.youtube.com/watch?v=b-7bMl6fJio&t=8320s)

    59 parts
  • 4 layers85 × 65 mmMarch 03 ESP, the printed circuit board in 3D

    March 03 ESP

    More414/PCB-designing

    63 parts
  • 2 layers113 × 116.5 mmPregnancy tester, the printed circuit board in 3D

    Pregnancy tester

    divquan/embedded-system-designs

    This repository contains designs for embedded systems, including schematics, PCB layouts, and fabrication files. Ideal for learning and project inspiration.

    52 partsMIT

Questions

How big is the Archive PCB?

It measures 100 × 50 mm and has 6 copper layers, 1.6 mm thick.

What parts does the Archive use?

92 parts, built around the CP2104EK, ESP32-WROOM-32D, TJA1051T/3/1 and LMR36510ADDA. 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 Archive KiCad files?

From the sikaxn/FRC-Custom-CAN-Sensor repository on GitHub, at the commit this page was made from: the board is pcb/archive/nz/nz.kicad_pcb and its schematic pcb/archive/esp-rm-frc-bridge/esp-rm-frc-bridge.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Archive design in my own project?

Its repository publishes it under the GPL-3.0 licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).