Arduino Canbus Monitor Save

Can bus monitoring tool based on arduino and can bus shield. Implements CAN ASCII/SLCAN protocol compatible with Lawicel CAN232/CANUSB. Can be used for monitoring low speed CAN (interior can bus of most cars, less than 500kbps). For higher speeds serial port can become a bottleneck in case data density is high.

Project README

arduino-canbus-monitor Build Status Coverity Scan Analytics

CAN BUS monitoring software based on Arduino with Seeduino/ElecFreaks CAN BUS shield based on MCP2515 (Numerous other MCP2515 based CAN BUS modules from ebay and aliexpress work well to).

This software implements CAN ASCII / Serial CAN / SLCAN protocol compatible with Lawicel CAN232/CANUSB.

As for PC counterpart software I personally used and can recommend two tools:

  1. [Windows] CANHacker tool v.2.00.01 (by fuchs) to sniff and visualize data on the bus. You can download CANHacker tool from this forum page: (P.S. Looks like no longer operating, here is a copy of installation file: CANHackerV2.00.01.exe)

  2. [Windows] CAN-COOL (by MHS Elektronik), open source, but unfortunaly available only in German. Download link: (Make sure you select RS232 and SL-CAN protocol and then click hardware bus reset icon on a toolbar)

  3. [Linux] SLCAN/SocketCAN can be used See details in the end of this README file

This monitor uses CAN BUS library forked from

Copyright (C) 2015,2016 Anton Viktorov [email protected]

You can buy me a beer if you like the tool :o) Donate

See protocol definition here and here

Commands not supported/not implemented:

  • s, W, M, m, U.

Commands modified:

  • S - supports not declared 83.3 rate
  • F - returns MCP2515 error flags
  • Z - extra Z2 option enables 4 byte timestamp vs standard 2 byte (60000ms max)
'S' |   YES+      |   Sn[CR]               Setup with standard CAN bit-rates where n is 0-8.
    |             |                        S0 10Kbit          S4 125Kbit         S8 1Mbit
    |             |                        S1 20Kbit          S5 250Kbit         S9 83.3Kbit
    |             |                        S2 50Kbit          S6 500Kbit
    |             |                        S3 100Kbit         S7 800Kbit
's' |    -        |   sxxyy[CR]            Setup with BTR0/BTR1 CAN bit-rates where xx and yy is a hex value.
'O' |   YES       |   O[CR]                Open the CAN channel in normal mode (sending & receiving).
'L' |   YES       |   L[CR]                Open the CAN channel in listen only mode (receiving).
'C' |   YES       |   C[CR]                Close the CAN channel.
't' |   YES       |   tiiildd...[CR]       Transmit a standard (11bit) CAN frame.
'T' |   YES       |   Tiiiiiiiildd...[CR]  Transmit an extended (29bit) CAN frame
'r' |   YES       |   riiil[CR]            Transmit an standard RTR (11bit) CAN frame.
'R' |   YES       |   Riiiiiiiil[CR]       Transmit an extended RTR (29bit) CAN frame.
'P' |   YES       |   P[CR]                Poll incomming FIFO for CAN frames (single poll)
'A' |   YES       |   A[CR]                Polls incomming FIFO for CAN frames (all pending frames)
'F' |   YES+      |   F[CR]                Read Status Flags.
'X' |   YES       |   Xn[CR]               Sets Auto Poll/Send ON/OFF for received frames.
'W' |    -        |   Wn[CR]               Filter mode setting. By default CAN232 works in dual filter mode (0) and is backwards compatible with previous CAN232 versions.
'M' |    -        |   Mxxxxxxxx[CR]        Sets Acceptance Code Register (ACn Register of SJA1000). // we use MCP2515, not supported
'm' |    -        |   mxxxxxxxx[CR]        Sets Acceptance Mask Register (AMn Register of SJA1000). // we use MCP2515, not supported
'U' |   YES       |   Un[CR]               Setup UART with a new baud rate where n is 0-6.
'V' |   YES       |   v[CR]                Get Version number of both CAN232 hardware and software
'v' |   YES       |   V[CR]                Get Version number of both CAN232 hardware and software
'N' |   YES       |   N[CR]                Get Serial number of the CAN232.
'Z' |   YES+      |   Zn[CR]               Sets Time Stamp ON/OFF for received frames only. EXTENSION to LAWICEL: Z2 - millis() timestamp w/o standard 60000ms cycle
'Q' |   YES  todo |   Qn[CR]               Auto Startup feature (from power on). 

Linux SLCAN instructions


Install can-utils first. On Ubuntu and other Debian-based distros can-utils package is included into standard repositories:

sudo apt install can-utils

For other distros please follow respective instructions, start from here

Create CAN device

sudo slcan_attach -f -s4 -o /dev/ttyUSB0
sudo slcand -S 115200 /dev/ttyUSB0 can0  
sudo ifconfig can0 up

where 115200 is port speed, /dev/ttyUSB0 - name of your arduino device. can be different

To dump running traffic

candump can0

To delete CAN device

sudo ifconfig can0 down
sudo killall slcand
Open Source Agenda is not affiliated with "Arduino Canbus Monitor" Project. README Source: latonita/arduino-canbus-monitor
Open Issues
Last Commit
1 month ago

Open Source Agenda Badge

Open Source Agenda Rating