Skip to the content
PCBKitNew board
4 layers50 × 60 mmPiCCANTE OBD Dongle, the printed circuit board in 3D

PiCCANTE OBD Dongle

Alia5/PiCCANTE104

PiCCANTE is a powerful tool for exploring and reversing CAN busses of vehicles, based on Raspberry Pi Pico (any model)

Size
50 × 60 mm
Copper layers
4
Thickness
1.6 mm
Parts
35
Nets
52
Pads
238
Tracks, vias
217, 95
Pours
13
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
29 Mar 2025
Updated
26 Jan 2026

Overview

PiCCANTE OBD Dongle is an open-source printed circuit board by Alia5, from the Alia5/PiCCANTE repository on GitHub, published under the GPL-3.0 licence. It is a 4-layer board of 50 × 60 mm with 35 parts on 52 nets, routed with 217 tracks and 95 vias.

It is built around the TCAN3413DRB, TPS5430DDA and B340A. Its parts include 12 resistors, 4 capacitors, 4 ICs, 2 diodes and 1 connector. It belongs with the interfaces and adapters boards and the RP2040 boards of this library.

Main components

3

README

Readme.md

Build Status License: GPL-3.0 Release Issues PRs Welcome Discord

PiCCANTE 🌶️

PiCCANTE Car Controller Area Network Tool for Exploration

PiCCANTE is a powerful hacking tool for accessing, exploring, and manipulating vehicle CAN bus networks, built on the affordable Raspberry Pi Pico platform. Designed for researchers, security professionals, and automotive enthusiasts looking to dive deep into vehicle systems without expensive proprietary equipment.

⚠️ Always exercise caution when connecting to vehicle systems. ⚠️

ℹ️ About PiCCANTE

PiCCANTE is designed to be a dead-simple, dirt-cheap, and readily-available hardware platform for vehicle research and exploration.
As cars become more and more computerized, manufacturers keep locking them behind proprietary tools and restrictive systems, even connect vehicles to the internet, yet they still rely on communication standards from the 1980s.
Car hacking and independent research grows increasingly important to discover security vulnerabilities, reverse engineer vehicle systems, and empower owners with custom tools for diagnostics and tuning that support the Right to Repair movement.

The project leverages Raspberry Pi Pico (2 [W]) development boards, selected for their exceptional affordability, global availability, impressive specifications, and well-documented open-source SDK.

🎯 Core Goals

Keep it D.I.R.T.Y 😉

  • Dead-Simple 🔨
    • Simple enough for perfboard soldering with minimal components. (Proper PCB available!)
    • No fiddling around with compilers and SDKs: Pre-built firmware releases for immediate use.
  • Inexpensive 💰
    • Minimal hardware requirements to keep costs dirt-cheap.
    • Based on affordable, off-the-shelf components.
  • Readily-Available 🌎
    • Fully open-source hardware and software.
    • Uses widely available Raspberry Pi Pico boards.
  • Tool-Compatible 🔌
    • Seamless integration with existing CAN tools.
  • Your-First Choice 💡
    • Driverless across all major operating systems.
    • Easy to use for beginners and experts alike.
    • 🔜 Documentation

✨ Features

  • ✅ Up to 3× CAN 2.0B interfaces (2× on RP2040 (Pico[W]), 3× on RP2350 (Pico 2[W]))
  • ✅ 1× USB-CDC PiCCANTE command + GVRET (binary only) interface
    • Compatible with SavvyCAN and other automotive tools
  • ✅ Up to 3× USB-CDC SLCAN interfaces (dedicated to each CAN channel)
  • ✅ LED status indicators
  • ✅ Command line interface for configuration and diagnostics
  • ✅ Auto (Deep) sleep on idle + Wakeup on CAN activity.
  • ✅ WiFi support (on Pico W models)
    • ✅ Create WiFi access point (wifi ap <ssid> <password> <channel>)
    • ✅ Connect to existing WiFi networks (wifi connect <ssid> <password>)
    • ✅ WiFi status and configuration commands
    • ✅ PiCCANTE configuration + GVRET interface as Telnet server
  • ✅ Web-based configuration interface (on Pico W models)
    • ✅ Fully responsive on desktop and mobile
    • ✅ Full device configuration
    • ✅ Device Monitoring
    • 🔜 Integrated Web CLI:
      • 🔜 Live CAN-bus monitoring
      • 🔜 ELM327 commands
    • 🔜 MITM mode configuration
  • ✅ Bluetooth support (on Pico W models)
  • ☑️ (partial) ELM327 emulator
    • ☑️ Partially implemented AT command set
      • Setup up CAN bus, auto protocol detection and filters (🔜) are missing.
        Configure the CAN bus beforehand - this is a hacking-tool, you should now your vehicles CAN bus settings.
    • ✅ Support for USB, Bluetooth or WiFi communication
    • ✅ PID request and response
      • ✅ 11bit and 29bit addressing
      • ✅ Multi-Frame PID support (ISO-TP)
      • ✅ Fast mode when number of answered frames is known
    • ✅ Report vehicle battery voltage (if ADC is connected)
    • 🔜 Adaptive Timeouts
  • ✅ 3D printable case designs for creating PiCCANTE based OBD-II dongles
  • 🔜 Data logging to SD card
  • 🔜 MITM mode for advanced analysis / vehicle tuning
  • 🔜 (Software) CAN filters

🔧 Hardware

For more information, checkout the hardware directory.

Simplest version

PiCCANTE is designed to be modular and can be built with just a few components.
The simplest version just uses a Pico board and a CAN transceiver.

🛒 What You'll Need

  • 1× Raspberry Pi Pico (any model, RP2040 or RP2350)
    • Note: The Pico 2 W (RP2350) is recommended for full feature support, including WiFi and Bluetooth.
  • 1-3× CAN transceivers (readily available SN65HVD or any other 3.3V compatible transceiver)
    • Note: ⚠️ Most readily available transceiver breakout-boards have a 120 Ohm terminating Resistor on them, when connecting to an existing (terminated) CAN bus this needs to be removed. ⚠️
  • USB cable

If you want more features, you can add an SD card slot, a buck converter, and other things.

Show Details

OBD-II Dongle (DIY Perfboard)

A full PiCCANTE based OBD-II dongle is simple enough to be soldered onto double-sided perfboard.

Show Details

A perfboard version fits on a 60mm x 50mm board and the 3D printable case measures just 97mm x 56mm including the OBD-II connector.

It cam be built with the following components (but you can omit anything you don't need):

  • Pi Pico (2 [W])
  • 3x CAN transceivers (eg. SN65HVD, any 3.3V compatible transceiver will do)
  • buck-converter
  • SD card slot
  • Voltage divider for measuring the vehicle's battery voltage
  • Schottky diode for safe dual power supply (1N5817)
  • Case:
    • ABS/ASA or PETG filament
    • 3x M3 screws
    • 3x M3 heatset inserts
    • 1x male OBD-II connector (I used this one)
    • Wires

OBD-II Dongle (Manufactured PCB)

A proper PCB with better CAN transceivers can be found in the hardware directory.
It is made with KiCAD and can be manufactured by any PCB manufacturer.

Show Details

💾 Software

Pre-compiled binaries for all official Raspberry Pi Pico boards are available as CI action artifacts in the GitHub repository.

When connected via USB, PiCCANTE exposes up to 4× USB-CDC interfaces:

  • 1× Combined PiCCANTE command + GVRET (binary) interface
    • Always the first exposed CDC device.
    • Also exposed via telnet if enabled on WiFi enabled boards.
  • Up to 3× SLCAN interfaces (dedicated to each CAN channel)

🚀 Basic Usage Examples

🐧 Linux with can-utils (slcan)
bash
# Set up SLCAN interface
sudo slcand -o -s6 -t hw -S 3000000 /dev/ttyACM1 can0
sudo ip link set up can0

# Monitor CAN traffic
candump can0
🖥️ Cross Platform with SavvyCAN
  1. Connect PiCCANTE to USB
  2. Open SavvyCAN
  3. Go to Connection ➡️ Open Connection Window ➡️ Add device Connection
  4. Select "Serial Connection (GVRET)" and choose the appropriate COM port / TTY
  5. Click "Create New Connection"

⌨️ PiCCANTE Commands

text
atz             - Enable ELM mode (if ELM327-Emulator is on USB)
binary          - Toggle GVRET binary mode (binary <on|off>)
can_bitrate     - Change CAN bus bitrate (can_bitrate <bus> <bitrate>)
can_disable     - Disable CAN bus (can_disable <bus>)
can_enable      - Enable CAN bus with specified bitrate (can_enable <bus> <bitrate>)
can_status      - Show status of CAN buses
echo            - Toggle command echo (echo <on|off>)
elm             - Configure ELM327 interface and mode (elm <usb|bt PIN|wifi>  <can0|can1|can2>)
help            - Display this help message
idle_timeout    - Set idle timeout in minutes (idle_timeout disable|<minutes>)
led_mode        - Set LED mode (led_mode <0-3>) 0=OFF, 1=Power, 2=CAN Activity
log_level       - Set log level (log_level <0-3>). 0=DEBUG, 1=INFO, 2=WARNING, 3=ERROR
reset           - Reset the system (reset)
save            - Save current settings to flash
set_num_busses  - Set number of CAN buses (can_num_busses [number])
settings        - Show current system settings
sleep           - Enter deep sleep mode (sleep)
sys_stats       - Display system information and resource usage (sys_stats [cpu|heap|fs|tasks|uptime|adc|wifi])
telnet          - Enable or disable Telnet and set port (telnet enable|disable | telnet <port
version         - Display version information (version)
wifi            - Manage WiFi settings (wifi info | wifi connect <ssid> <password> | wifi ap <ssid> <password> <channel> | wifi disable)

❓ Frequently Asked Questions

🔄 Why only CAN2.0B and not CAN FD/XL?

The Raspberry Pi Pico has no native CAN support. The PIO can2040 implementation we're using only supports CAN 2.0B (due to licensing issues).
However, if you need CAN FD or other bus types, feel free to open a PR supporting a CAN controller (like MCP2518FD).

🔌 Can I use PiCCANTE with Linux/Windows/macOS?

Yes! PiCCANTE is designed to be cross-platform. It works with any operating system as a standard USB device with no special drivers required.
For SLCAN interfaces, Linux users can use can-utils to provide a SocketCAN interface, while all platforms support the GVRET/SLCAN interface through tools like SavvyCAN.

💻 How many CAN buses can I monitor simultaneously?

Up to 3 CAN buses on the RP2350 (Pico 2/2W) and up to 2 CAN buses on the RP2040 (original Pico/Pico W).
Each bus has a dedicated USB-CDC SLCAN interface.

🔧 Why build my own instead of buying a commercial CAN adapter?

PiCCANTE gives you a fully open-source solution at a fraction of the cost of commercial tools.
You get complete control over the hardware and software, the ability to customize for specific needs, and valuable learning experience about CAN networks and embedded systems.

❓ Troubleshooting

  • Issue: CAN bus not receiving data
    Solutions:

    • Verify CAN status with can_status command
    • Verify wiring and bitrate settings
    • Check for proper bus termination resistance (remove resistor on the transceiver if connected to an existing CAN-bus)
  • Issue: LED not lighting up / blinking
    Solutions:

    • Check USB connection and power
    • Check led_mode command on the first USB CDC device

🛠️ Development

PiCCANTE is built using the Raspberry Pi Pico SDK and follows standard Pico development practices. This section covers how to set up your development environment, build the project, and extend its functionality.

🧰 Prerequisites

🔄 Environment Setup

  1. Install the Pico SDK:

    Follow the instructions in the Pico SDK documentation to install the SDK

  2. Clone PiCCANTE:

    bash
    git clone git@github.com:Alia5/PiCCANTE.git
    cd PiCCANTE
    git submodule update --init --recursive

🏗️ Building

💻 Command Line
  1. Configure with CMake:

    bash
    cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Release
  2. Build the project:

    bash
    cmake --build build --config Release
🖥️ Using VS Code
  1. Open the PiCCANTE folder in VS Code
  2. Press F1 and select "CMake: Configure"
  3. Press F7 to build the project
  4. To flash, connect a Pico in BOOTSEL mode and press F5

👥 Contributing

Contributions to PiCCANTE are welcome! Whether it's bug reports, feature requests, documentation improvements, or code contributions, your help makes this project better.

  • Bug Reports: Open an issue describing the problem and steps to reproduce it
  • Feature Requests: Open an issue describing the desired functionality
  • Code Contributions: Fork the repository, make your changes, and submit a pull request

Extending PiCCANTE

PiCCANTE is designed to be extensible. Here are some key areas where you might want to extend functionality:

  • Adding new commands: Extend the command interpreter to add custom commands.
  • Implementing new protocols: Add new protocol handlers in their respective directories.
  • Car-specific tools: Fork PiCCANTE to create a car-specific tool and diagnostics dongle.
  • Custom gauges: Fork PiCCANTE and use it as a base controller to implement custom gauges.
  • Custom data logging: Implement custom data logging to SD card to monitor your vehicle on a track day.

📄 License

text
PiCCANTE - PiCCANTE Car Controller Area Network Tool for Exploration
Copyright (C) 2025 Peter Repukat

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <https://www.gnu.org/licenses/>.

Parts

35
QtyValueFootprintReferences
7~Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJCAN0, JCAN1, JCAN2, JCAN2Term0, JCAN2Term1, JCAN2Term2, JUART1
510KResistor_SMD:R_0603_1608MetricR7, R8, R9, R10, R11
3120Resistor_SMD:R_0603_1608MetricR1, R2, R5
3TCAN3413DREasyEDA:SOP-8_L4.9-W3.9-P1.27-LS6.0-BL-1U1, U2, U5
210kResistor_SMD:R_0603_1608MetricR12, R14
2B340AEasyEDA:SMA_L4.4-W2.6-LS5.0-RDD1, D2
2LOGOLOGOG***, G***
10.01µFCapacitor_SMD:C_0603_1608MetricC2
1100kResistor_SMD:R_0603_1608MetricR15
110µFCapacitor_SMD:C_1206_3216MetricC3
110µFCapacitor_SMD:C_0603_1608MetricC1
115µHEasyEDA:IND-SMD_L4.0-W4.0L1
1220uFCapacitor_SMD:C_1206_3216MetricC4
14kResistor_SMD:R_0603_1608MetricR13
1Micro_SD_CardEasyEDA:TF-SMD_503398-1892J1
1RaspberryPi_Pico_WPiCO_CUSTOM_KEEPOUT:RaspberryPi_Pico_W_SMD_THT_COMBO_CUSTOM_KEEPOUTA1
1TPS5430DDAPackage_SO:TI_SO-PowerPAD-8_ThermalViasU4
1~Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_HorizontalJPWR1

Questions

How big is the PiCCANTE OBD Dongle PCB?

It measures 50 × 60 mm and has 4 copper layers, 1.6 mm thick.

What parts does the PiCCANTE OBD Dongle use?

35 parts, built around the TCAN3413DRB, TPS5430DDA and B340A. 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 PiCCANTE OBD Dongle KiCad files?

From the Alia5/PiCCANTE repository on GitHub, at the commit this page was made from: the board is hardware/PiCCANTE-OBD-Dongle/PCB/PiCCANTE-OBD-Dongle.kicad_pcb and its schematic hardware/PiCCANTE-OBD-Dongle/PCB/PiCCANTE-OBD-Dongle.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the PiCCANTE OBD Dongle 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).

Similar boards

  • 2 layers105.2 × 71.1 mmOnyx PCB, the printed circuit board in 3D

    Onyx PCB

    CuriousMotor/Onyx-Stepper-Motherboard

    The successor of the iconic Arduino-CNC-shield

    96 parts56MIT
  • 2 layers75.8 × 92.5 mmESP32 STEPPER CONTROL PCB, the printed circuit board in 3D

    ESP32 STEPPER CONTROL PCB

    JohnDecebal/UNDR

    UNDR AUTO is a fully automatic WDT (Weiss Distribution Technique) tool designed for espresso enthusiasts. This open-source DIY project combines 3D printed parts with electronic and mechanical components to create a…

    48 parts46
  • 2 layers85 × 56 mmOrange juice board, the printed circuit board in 3D

    Orange juice board

    jeji/orange_juice

    A orange pi zero shield board for 3D printer with klipper features

    56 parts13GPL-3.0
  • 2 layers99 × 56 mmOrange juice board, the printed circuit board in 3D

    Orange juice board

    jeji/orange_juice_2

    For Orange Pi zero 2 with klipper and more advance feature

    56 parts5
  • 4 layers70 × 76 mmBalanced receiver, the printed circuit board in 3D

    Balanced receiver

    brbcza/balanced-receiver

    Balanced Audio Receiver

    139 partsGPL-3.0
  • 2 layers83.4 × 58 mmRemote switch, the printed circuit board in 3D

    Remote switch

    cburlacu/remote_switch

    A remote switch based on ESP8266

    41 parts
  • 4 layers60.2 × 60.5 mmESP32 FlightController, the printed circuit board in 3D

    ESP32 FlightController

    durveshpathak1989/kicad-local-agent

    Free local Ollama agent for generating and validating KiCad project files

    73 partsMIT
  • 2 layers108.5 × 69.9 mmUsbpd adapter, the printed circuit board in 3D

    Usbpd adapter

    fachat/pcb_bits

    Various libs for symbols, footprints, partial schematics

    132 parts