
Esptof
sikaxn/FRC-Custom-CAN-Sensor
If you are looking for IronMaple ESP32‐FRC‐devkit resources, please switch branch to dev-board.

If you are looking for IronMaple ESP32‐FRC‐devkit resources, please switch branch to dev-board.
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.
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
Design file: https://oshwlab.com/sikaxn/seal-v2-dev-board
Factory test code: https://studenttechsupport.com/customcanespfw/factory/
Please also check out the WiKi section for more documentation!
https://github.com/sikaxn/FRC-Custom-CAN-Sensor/wiki
This repo need some cleanup. Will do later.
https://github.com/sikaxn/FRC-Custom-CAN-Sensor/tree/dev-board
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
Design file: https://oshwlab.com/sikaxn/seal-v2-dev-board
Factory test code: https://studenttechsupport.com/customcanespfw/factory/
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
https://www.chiefdelphi.com/t/custom-can-sensor-some-good-progress/501764
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
This project is for demo and under work. Faulty CAN frame could bring entire CAN bus down.
This project use AI generated content.
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.
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.
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.
// === 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);
}An ID converter script is added. see below for usage.
DO NOT change DEVICE_TYPE_ID and MANUFACTURER_ID as this will result roboRIO code stop working.

A minimal Tkinter application for converting between FRC 29-bit CAN IDs and their four fields.
A minimal Tkinter application viewing CAN messages using python-can.
Support Ctrl + C to copy message and roboRIO heartbeat decoding.

| Qty | Value | Footprint | References |
|---|---|---|---|
| 17 | 22u | Capacitor_SMD:C_01005_0402Metric | C3, C5, C7, C11, C12, C13, C15, C19, C20, C21, C22, C23, C24, C26, C28, C29 +1 |
| 9 | 100n | Capacitor_SMD:C_01005_0402Metric | C1, C4, C9, C10, C14, C16, C17, C18, C27 |
| 7 | 1K | Resistor_SMD:R_0402_1005Metric | R6, R8, R9, R10, R14, R15, R21 |
| 5 | 10K | Resistor_SMD:R_0402_1005Metric | R7, R13, R16, R17, R18 |
| 4 | Hole_Pad | MountingHole:MountingHole_3.2mm_M3_Pad_Via | H1, H2, H3, H4 |
| 3 | 4u7 | Capacitor_SMD:C_01005_0402Metric | C2, C6, C25 |
| 3 | Conn_01x04 | Connector_PinHeader_1.00mm:PinHeader_1x04_P1.00mm_Vertical | J2, J5, J13 |
| 3 | SW_SPST | Button_Switch_SMD:SW_Push_1P1T_NO_6x6mm_H9.5mm | EN1, IO0, SW1 |
| 2 | 22R | Resistor_SMD:R_0402_1005Metric | R4, R5 |
| 2 | 4k7 | Resistor_SMD:R_0402_1005Metric | R11, R12 |
| 2 | 5K1 | Resistor_SMD:R_0402_1005Metric | R1, R2 |
| 2 | Conn_02x02 | Connector_PinHeader_1.00mm:PinHeader_2x02_P1.00mm_Vertical | J7, J12 |
| 2 | LED | LED_SMD:LED_0201_0603Metric | D4, D7 |
| 2 | PMEG6020AELR | Diode_SMD:Nexperia_CFP3_SOD-123W | D5, D6 |
| 2 | TLV1117LV-3.3V | Package_TO_SOT_SMD:SOT-223-3_TabPin2 | U5, U7 |
| 1 | 10k | Resistor_SMD:R_0402_1005Metric | R3 |
| 1 | 113K | Resistor_SMD:R_0402_1005Metric | R20 |
| 1 | 1A Polyfuse | Fuse:Fuse_1206_3216Metric_Pad1.42x1.75mm_HandSolder | F1 |
| 1 | 20K | Resistor_SMD:R_0402_1005Metric | R19 |
| 1 | 22uH | Inductor_SMD:L_1008_2520Metric | L1 |
| 1 | 2601-1103 | Library:CONN3_2601-1103_WAG | J3 |
| 1 | 2601-1106 | Library:CONN6_2601-1106_WAG | J14 |
| 1 | BC817 | Package_TO_SOT_SMD:SOT-23 | Q2 |
| 1 | BLM21PG221 | Inductor_SMD:L_0603_1608Metric_Pad1.05x0.95mm_HandSolder | FB1 |
| 1 | CP2104 | Package_DFN_QFN:QFN-24-1EP_4x4mm_P0.5mm_EP2.6x2.6mm | U2 |
| 1 | Conn_02x12 | Connector_PinHeader_1.00mm:PinHeader_2x12_P1.00mm_Vertical | J6 |
| 1 | ESP32-WROOM-32D | Library:ESP32-WROOM-32D-3d | U1 |
| 1 | LED_RGBA | LED_SMD:LED_RGB_Wuerth-PLCC4_3.2x2.8mm_150141M173100 | D3 |
| 1 | LL4148 | Diode_SMD:D_MiniMELF | D1 |
| 1 | LMR36510ADDA | Package_SO:Texas_HTSOP-8-1EP_3.9x4.9mm_P1.27mm_EP2.95x4.9mm_Mask2.4x3.1mm_ThermalVias | U6 |
| 1 | MCP2515_EXP | Connector_PinHeader_1.00mm:PinHeader_1x07_P1.00mm_Vertical | J11 |
| 1 | Polyfuse | Fuse:Fuse_1206_3216Metric_Pad1.42x1.75mm_HandSolder | F2 |
| 1 | R120 | Resistor_SMD:R_0402_1005Metric | R22 |
| 1 | RC522_0 | Connector_PinHeader_1.00mm:PinHeader_1x08_P1.00mm_Vertical | J9 |
| 1 | RC522_1 | Connector_PinHeader_1.00mm:PinHeader_1x08_P1.00mm_Vertical | J10 |
| 1 | SANYOU_SRD_Form_C | Relay_THT:Relay_SPDT_SANYOU_SRD_Series_Form_C | K1 |
| 1 | SW_DIP_x01 | Button_Switch_SMD:SW_DIP_SPSTx01_Slide_6.7x4.1mm_W6.73mm_P2.54mm_LowProfile_JPin | CAN_TERM1 |
| 1 | TJA1051T-3 | Package_SO:SOIC-8_3.9x4.9mm_P1.27mm | U4 |
| 1 | UMH3N | Package_TO_SOT_SMD:SOT-363_SC-70-6 | Q1 |
| 1 | USBLC6-2P6 | Package_TO_SOT_SMD:SOT-666 | U3 |
| 1 | USB_C_Receptacle_USB2.0_16P | Connector_USB:USB_C_Receptacle_HRO_TYPE-C-31-M-12 | J1 |
| 1 | YELLOW | LED_SMD:LED_0201_0603Metric | D2 |

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

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.


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

jayatharshan12-design/ESP32-Custom-Development-Board-PCB-Design

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.

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


divquan/embedded-system-designs
This repository contains designs for embedded systems, including schematics, PCB layouts, and fabrication files. Ideal for learning and project inspiration.
It measures 100 × 50 mm and has 6 copper layers, 1.6 mm thick.
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.
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.
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).