Creative Commons images are CC BY-NC-SA 3.0

Description: The CAN-BUS Shield provides your Arduino or Redboard with CAN-BUS capabilities and allows you to hack your vehicle. This shield allows you to poll the ECU for information including coolant temperature, throttle position, vehicle speed, and engine rpms. You can also store this data or output it to a screen to make an in-dash project.

It uses the Microchip MCP2515 CAN controller with the MCP2551 CAN transceiver. CAN connection is via a standard 9-way sub-D for use with OBD-II cable. Ideal for automative CAN application. The shield also has a uSD card holder, serial LCD connector and connector for an EM506 GPS module. These features make this shield ideal for data logging application.

Note: A DB9 Cable is not included with this shield. Please be sure to check Recommended Products section below for a recommended cable to use with this board.

Note: This product is a collaboration with SK Pang Electronics. A portion of each sales goes back to them for product support and continued development.


  • CAN v2.0B up to 1 Mb/s
  • High speed SPI Interface (10 MHz)
  • Standard and extended data and remote frames
  • CAN connection via standard 9-way sub-D connector
  • Power can supply to Arduino by sub-D via resettable fuse and reverse polarity protection.
  • Socket for EM506 GPS module
  • Micro SD card holder
  • Connector for serial LCD
  • Reset button
  • Joystick control menu navigation control
  • Two LED indicator


Recommended Products

Customer Comments

  • Go the example working fine using the ecusim 2000 and the example code.

    But now I need to transition to an industrial can environment using this shield: Would someone please explain: 1) How to do 1Mbps instead of 500 kbps? The example lib does have CANSPEED_1000 defined.

    2) Need to use the DB9 connector. How to change the jumpers to use normal CAN signals instead of OBD-II signals on the DB9 connector? Is there some soldering/desoldering to do?


  • Hi guys, I would like to know if it is possible to get the accumulated mileage information by using this shield. I want to get this information and send it to a computer or mobile.

  • I’m having pretty good success with this shield but I’m seeing some “noise” using the ECU Demo. The data seems to be accurate 90% of the time, but it’ll occasionally switch to another data type or will jump to zero. The prefix here is a millis() printout.

    6042: 849 rpm 6059: 849 rpm 6075: 849 rpm 6091: 0 g/s … 6430: 0 g/s 6444: 1800 rpm 6461: 1823 rpm 6478: 1823 rpm

    Is this something I should look into in the library or sketch, or could there be some noise or inconsistency from the car? I’m trying to narrow down where the fault lies.

    • Basic trouble shooting step would be to check one item at a time - I’d verify you don’t have any bad connections on your shield, and then verify there’s nothing weird reading on the cable and in the car connector. After that, the library would be the next step to check.

  • I have connected this CAN-BUS Shield to OBD-II connector of a 1996 Nissan Maxima. When I power up the board(SparkFun_CAN_Demo) I get “CAN Init ok” followed by the selection menu, but it does not prints anything after entering anyone of the option. It prints the selected option but no data. Am I missing something?

    • Are you using our DB9 to OBD-II cable? If not, you may need to double check your pinout on your cable to ensure it’s connecting pins 6 and 14 from the data link connector on your car to the appropriate pins on the CAN-Bus Shield.

      • Yes I am using SparkFun DB9 to OBD-II connector.

        • Hmm. It sounds like you need a bit more in-depth debugging than we can do via comments. Please contact techsupport@sparkfun dot com with your set up, the code you’re using, and any errors you might be getting. They will be able to assist you more in depth, and if there is an issue with your board, get you a replacement.

          • Ok thanks a lot. I will contact tech support.

            • Hello Toni_K,

              I just tried the same setup in a different car(2010 Hundai Sonata) and it worked perfectly fine. The problem was with my old car.

              Thank you for all the support. I would definately like to buy you a beer to honor the beerware..!!

              • Glad you got it figured out! If you ever make it out to Boulder, I’ll certainly take you up on that. In the mean time, happy hacking!

  • How would I edit the CAN library to work with an AEM EMS-4?

    • AEM EMS-4

      I haven’t seen much on this, but from a quick Google search, it looks like this is an open-source protocol based on CAN. I found a spec sheet here that lists the message formats and protocols.

      To update the library, I’d recommend the following steps:

      No guarantees that will work though - you may need to dig deeper into the library commands to update specs for full functionality, but that should at least get you started.

  • Does this shield support K-Line?

    • K-Line, or pin 7, is broken out to the CAN-H header if you have the jumper configured properly. Please take a look at SJ4 in the schematic to trace this out. However, the example code is written to support CAN-H on that line. If you’d rather use a different protocol, you will need to find or write your own example code supporting this.

      • When I bought the shield I downloaded the schematic. There isn’t any SJ4. There is instead in the latest schematic but I suppose it is relative to another rev of the shield.

        Anyway an example code for k-line would be really appreciated if there is any chance to use the shield also with this protocol of communication.

        • If you have the older version of the shield without SJ4, then you will need to cut the traces and use jumper wires to attach the K-Line to the CAN-H line on the chip.

          Regarding the code, we don’t currently have any examples of that, but you could rewrite the library to match the K-Line protocol message structure in place of the CAN message structure. There’s a good basic summary here, and there’s also this Arduino thread which may be helpful for you as well.

  • Guys, I need some serious help. I am using this shield to communication with my Honda 2006’s ECU. But whenever I connect the shield with the car and run the demo code it only gives one response “CAN Bus Demo” and nothing else. Any help please?

    • Please contact tech support. It sounds like there is an issue with your shield or circuit, as the demo code should at least print out “CAN Init Success” or “CAN Init Fail”. If you aren’t getting either of those, your shield and board are likely not communicating.

      • yes, this is the problem. The shield is not working, even the demo code doesn’t work. I’ll definitely contact the support team.

  • Will this work on any CAN-BUS? I need it for an industrial application, not automotive. Thanks

  • I am using the default sketch for the GPS_DEMO (running a 506 gps) and the following hookup Arduino Mega : SPI (50-53) <-> Shield : SPI (10-13) / Arduino Mega : GND, 5V, 3.3V, RESET, IOREF <-> Shield : GND, 5V, 3.3V, RESET, IOREF / Arduino Mega : Digital 4&5 <-> Shield : Digital 4&5 The GPS gets a fix, but it never outputs to the serial. Am I missing something?

    • Probably something to do with the software serial pins on the Arduino Mega if yo uare not bale to view data through the serial monitor. Check your pin definitions and the limitations of the Arduino Mega Pins if you haven’t already => .

      Also, check to see if you have satellites in view. If you are in a building or in a noisy environment, you won’t receive a signal and not get a solid fix.

  • I am using MEGA R3 with this CAN-BUS Shield. It seems it is not able to initialize CAN.

    I can either “CAN-Bus Demo” or Below reply.

    CAN-Bus Demo Can’t init CAN Please choose a menu option. 1.Speed 2.RPM 3.Throttle 4.Coolant Temperature 5.O2 Voltage 6.MAF Sensor

    I did connect the SPI wires as suggest by Toni.

    • Toni_K / last year / 1

      Double check that you’ve updated the pin definitions in the code to match the new wiring, especially the CS pin. If those haven’t been updated, your Arduino is trying to initialize the CAN-Bus using the wrong connections, and you won’t be able to initialize the IC.

  • I’m planning to set up CAN communication with the Arduino Due and need a CAN shield/breakout board. The operaing voltage of the Due is 3,3V. Is it possible to connect the shield to the Due?

    • Toni_K / last year / 2

      It’s not recommended. The CAN-Bus shield mostly operates at 5V, but it also handles 12V coming in to the board when plugged in to a CAN port.

  • Is this board fully compatible with Arduino Mega 2560? Which pins it uses?

    • Toni_K / last year / 2

      This uses the SPI pins from the Uno footprint by default, so it is not plug-in compatible with the Mega. You will need to run jumper wires from the shield’s pins to the Mega’s SPI pins.

      • Is there an image that shows where to hook up the jumper wires?

        • Toni_K / last year / 2

          You can find them on a lot of folks' projects, but these are the basic pins you’ll need to identify on your board to connect.

          MEGA SPI: 50 (MISO), 51 (MOSI), 52 (SCK), 53 (SS). UNO SPI (this will also be the shield footprint): 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK).

  • JSt1 / last year / 1

    Does it support J1939?

    • Toni_K / last year / 1

      There are some example projects with the libraries updated to work with J1939, though our library is not currently set up that way. Check out one example here.

  • Could this board be used to emulate the vehicle side? Not the scanner?

    • You could send out raw CAN data simulating that coming from the vehicle from the CAN +/-, 5V/GND pins broken out on the board. However, you’d need to do a lot of code modification for that to properly simulate the vehicle functionality.

  • You say this is new. What is the difference versus the previous part DEV-10039? Thanks.

    • It has the Uno R3 compatible footprint, jumpers to configure the DB9 connector for different OBD-II cables, and general production improvements for manufacturing.

Customer Reviews

3.4 out of 5

Based on 7 ratings:

5 star
4 star
3 star
2 star
1 star

3 of 3 found this helpful:

Great learning project for CAN interface

I used it for interfacing with a 125k vehicle CAN bus. Soldering the headers were fairly easy, but I struggled with the 9-way OBD-II to CAN conversion. I’ll agree with another review when it come to making pins 2 and 7 the standard Lo and Hi. Let the few who need OBD-II struggle with the conversion.

2 of 2 found this helpful:

documentation poor

Documentation for this device seems to be lacking. I ended up purchasing a pican shield for the pi2.

2 of 2 found this helpful:

Connected great to my car's canbus

With the OBD2 accessory cable an an Uno, I was able to eavesdrop on my car’s CAN-BUS.

2 of 2 found this helpful:

kinda ok

After fighting with the libraries for almost a week i finally got it right to retrieve some usable data from the car. I switched to another library to confirm the speed at which my car was sending data. i still couldn’t see “human” readable data until i found a fork of the sparkfun library, after some modifications to the sketch i was able to use it. As for the shield itself, i would have preferred if it was shipped with headers. i only realized this after my delivery and needed to place a second order only for the headers.

7 of 7 found this helpful:

Creat Shield for the price

Ordered one to build a display to show MPH, RPM, Engine temperature and Throttle. I made some modifications to Canbus Library to show imperial measurements instead metric ones. Added a 4 line I2C LCD display and it worked great. Board also supplies 12 V to the un regulated input of the UNO. Don’t forget to order the ODB to DB9 cable.

5 of 6 found this helpful:

Nice features, missing some basics

I like how many things are packed into it. Price is very fair. Really like the option to cut the board and make the DB9 connector use pins 2 and 7 like any professional CAN equipment uses. This option is why I bought the board. I really didn’t like that the Seeed CAN shield didn’t have this option.

Cons: Chip select pin can not be changed. The library doesn’t look like it has a simple option for this either. Switched to the coryjfowler library. I really wish you would have at least done what the Seeed CAN shield did and give me one other pin as a choice. Had to add 120ohms to make it work on a bench. The Seeeeeed shield gave me screw terminals to do this, but not this board. Also, wish that I didn’t have to modify the board to make it work with industry standard pins 2+7 on the DB9. Lastly, the ad doesn’t mention that the shield is completely bare. Please at least update the listing notes to suggest that you buy headers for it.

This board is probably better for the person that wants all the extra features, but if you just want a CAN shield and use CAN regularly, I wouldn’t buy it if you already have a Seeed shield. You’re better off hacking up the Seeed board to support pins 2 + 7 if you already own one.

A lot more than needed

Packs a lot of great stuff into a small design. While it’s great to have all the features, I think most of it is overkill, like the GPS, Memory card, joystick and reset button and all the supporting components for these items. This board could probably be 1/8 of its current size and stack only the couple of pins it needs, leaving the arduino board free to be used for other purposes. While it is great that it can be stacked on top of the arduino or red board, it would also be nice if there was an enclosure for it. Other than that it is a great board with a lot of nice features.

Related Tutorials

Getting Started with OBD-II

October 8, 2015

A general guide to the OBD-II protocols used for communication in automotive and industrial applications.

CAN-Bus Shield Hookup Guide

October 8, 2015

A basic introduction to working with the CAN-Bus shield.