Page 1 of 8
CAN-Bus Shield Hookup Guide
Introduction
The CAN-Bus Shield provides your Arduino or Redboard with CAN-Bus
capabilities and allows you to hack your vehicle!
CAN-Bus Shield connected to a RedBoard.
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.
Materials Required
You will need the CAN-Bus Shield in order to follow along with this hookup
guide.
CAN-BUS Shield
DEV-1326 2
Page 2 of 8
We also recommend you have access to the following materials.
CAN-Bus Shield Hookup Guide SparkFun Wish List
MicroSD Card with Adapter - 8GB
COM-11609
This is an 8 gig microSD memory card. It's perfect for massive datalo…
GPS Receiver - EM-506 (48 Channel)
GPS-12751
The EM-506 GPS receiver from [USGlobalSat](http://www.usglobalsa…
Serial Enabled 16x2 LCD - Black on Green 5V
LCD-09393
This is the latest evolution of our serial LCD. Included on a single boa…
Arduino Stackable Header Kit - R3
PRT-11417
These headers are made to work with the Arduino Uno R3, Leonardo…
OBD-II to DB9 Cable
CAB-10087
Once you've hacked everything, why not go out in the garage and ha…
SparkFun RedBoard - Programmed with Arduino
DEV-12757
At SparkFun we use many Arduinos and we're always looking for the…
Suggested Reading
If you aren’t familiar with the following concepts, you may want to review
these tutorials before attempting to work with the CAN-Bus Shield.
•
•
•
•
•
•
Installing Arduino Libraries
Arduino Shields
Through-hole Soldering
MicroSD Shield
GPS Shield
Getting Started with OBD-II
Hardware Overview
There are several features to be aware of on the CAN-Bus Shield.
CAN-Bus Shield with features labeled.
1. DB9 Connector
The primary hardware feature on this shield is the DB9 connector. This
allows you to interface to OBD-II ports with a DB9 to OBD-II cable.
Page 3 of 8
2. GPS Connector
The GPS connector on-board is a 6-pin, JST SH compatible connector. The
board is designed to interface with either the EM-506 GPS Receiver, or the
GP-735 GPS Receiver. The GND jumper allows the user to modify the GPS
connector for units that do not have a GND connection on pin 5 of the
connector.
3. LCD Connector
The LCD footprint on the shield is compatible with a male 3-pin JST
connector and can interface with any of our serial LCD screens. The
connection is designed for 5V LCDs, so don’t accidentally plug in a 3.3V
option! The pin order is 5V, GND, and RX/D6 when looking at the shield
straight on.
4. JoyStick
The joystick included on the shield provides a basic user interface for
controlling screen displays or selecting CAN scan settings. The connector
gives 5 basic user options:
•
•
•
•
•
Up
Down
Left
Right
Click selection
5. microSD Slot
This slot provides the user with the option of storing collected data onto a
microSD card. Data collected can include user input on the joystick, CANBus information collected, LCD outputs, or general I/O data.
6. Jumpers
There are six jumpers present on the CAN-Bus Shield.
• 6a. SJ1 and SJ2 - These two jumpers allow the user to select
between UART and Software Serial for the GPS unit to communicate
with the Arduino.
• 6b. SJ3 - This allows the user to separate pin 5 on the GPS
connector from the GND line. This jumper comes closed by default.
• 6c. SJ4, SJ5, and SJ6 - These three jumpers allow the user to select
the DB9 pin configuration between OBD-II and CAN. The jumpers
are defaulted to the OBD-II configuration that matches SparkFun’s
OBD-II to DB9 cable.
Note: Though the pin configuration is labeled as OBD-II, this is
still a CAN-specific device. The jumpers are simply for
configuring the shield to work with other OBD-II/CAN-Bus
cables if necessary.
For reference, here are the configuration options showing which pins are
selected on the DB9 connector for each setting.
Jumper Configurations for DB9 Pins
Bus Lines
CAN-H
CAN Pins
Pin 7
OBD-II Pins
Pin 3
Solder Jumper
SJ4
Page 4 of 8
CAN-L
Pin 2
Pin 5
SJ6
GND
Pin 3
Pin 2
SJ5
7. CAN Pins
4 CAN lines are broken out to allow you direct access to the raw CAN data
coming off of the DB9 connector. These pins are:
•
•
•
•
5V
GND
CAN H (CAN HIGH)
CAN L (CAN LOW)
Again, this data is raw coming off of the CAN-Bus. It has not been filtered
through the MCP2515 or the MCP2551 ICs.
Communication Methods
Because of all of the different hardware features on the shield, there are a
couple different communication methods used.
• SPI - The MCP2515 IC and the microSD slot both communicate with
the Arduino via the SPI lines. The CAN Chip Select line is located
on D10 . The SD Chip Select line is connected to D9 .
• Analog In - The joystick is connected to pins A1-A5 on the Arduino.
Each direction of the joystick has its own analog input.
• Software Serial/UART - The LCD and GPS both communicate over
serial lines with the Arduino. The LCD’s RX line connects to D6 . The
GPS either connects via Software Serial to D4 and D5 , or to the
UART port on D0 and D1 .
Hardware Hookup
Solder Connectors
To get your CAN-Bus shield hooked up, solder on the Arduino Stackable
Headers.
You can use the RedBoard to hold the headers in place while soldering
them to the shield.
Once those are soldered, consider how you want to connect your LCD
screen. You can use either male or female headers with 0.1" spacing, or
the JST connector. Solder your interface choice onto the shield at this time
as well.
Page 5 of 8
Make sure you solder the connector onto the top of the shield, so you can
access it while the shield is inserted in the RedBoard.
Connect the Brain!
In our case, the brain will be the RedBoard. Insert your shield into the
RedBoard. Take your time and go slowly to prevent bending the header
pins.
Connect the Extras
We recommend plugging in the GPS unit, LCD screen, and microSD card
now. If you don’t plan to use any of these features, you can skip this step.
If you’re planning on putting your CAN-Bus/RedBoard combination into an
enclosure, you may want to consider using an extension cable for the GPS
unit. Enclosures can block the satellites from view and lead to spotty GPS
functionality, so placing the GPS unit outside of any enclosures should
alleviate those issues.
Note: If you are not using the EM-506, verify the pinout of your GPS
unit and make sure the GND jumper is in the proper configuration for
your unit.
We also recommend connecting your LCD screen at this time. Your method
of connecting the LCD screen will depend on what connector you soldered
onto the shield previously. Looking the shield straight on, the connections
are 5V, GND, and TX, if you are not using the JST connector.
Make sure you use a formatted microSD card. Once all the extras are
connected, your circuit should look like the following:
Connect to your CAN-enabled device
This can be a simulator or a vehicle. Plug the DB9 connector into the
shield, and plug the DLC connector into the device to which you plan on
talking. If your shield+Arduino turns on now, that’s ok. The vehicle/simulator
can power the board over the cable.
Final Circuit
Page 6 of 8
Once everything is inserted, your circuit should look similar to the following:
In this case, we show the circuit connected to a CAN simulator. However,
you could instead have your circuit connected to a DLC in a CAN-enabled
vehicle.
Here we see the circuit connected to Pete Dokter’s VW.
Arduino Code
Download the Library
There’s a really great library available for working with the CAN-Bus shield.
You will need to download this and install it in your Arduino IDE. You can
either search for it in the Arduino Library Manager or download the most
recent version from the GitHub repository.
D O W N L O A D CA N - B U S S H I EL D L I B RA RY
If you aren’t sure how to install the Arduino library, please take a look at our
tutorial here.
Example Sketches
There are several different example sketches included in the library, each
with different functionality.
1.SparkFun_CAN_Demo - This sketch allows you test the CAN
functionality of the board by itself.
2. SparkFun_ECU_Demo - This sketch runs all hardware on the shield
together, and logs CAN data and GPS data to the SD card, while outputting
data over the serial LCD. You will need to instally the TinyGPS library and
the SD library for this to work.
3.SparkFun_GPS_Demo- This sketch runs through using the GPS
module. You will need to instally the TinyGPS library for this to work.
4.SparkFun_Joystick_Demo - This quick sketch allows you to test the
functionality of the on board joystick.
5.SparkFun_SD_Demo - This sketch allows you to verify and test
functionality of the microSD socket on board. You will need to install the SD
library for this to work.
Page 7 of 8
6.SparkFun_SerialLCD_Demo - A quick sketch to make sure your serial
LCD screen is functioning properly.
For our example, we are going to run through the ECU_Demo sketch, but
feel free to use or modify the other sketches. If you decided to not plug in
the microSD card, GPS unit and LCD screen, you should instead run the
CAN_Demo.
ECU_Demo
This sketch shows off the basic functionality of each part of the shield.
Once you’ve installed the library, open up Arduino and upload this code to
your RedBoard.
Check through the comments in the code for details of what each section
does, but the general flow of the sketch is as follows:
1. The Arduino initializes the pins, variables, and baud rates for the
GPS, LCD, uSD card, and CAN-Bus.
2. In the setup loop, each device is started, and verified that everything
is connected as it should. Both the CAN-Bus and uSD card will print
either success or failure messages to the LCD screen.
3. The shield will wait for the user to click the joystick to begin collecting
data off of the GPS module and the CAN-Bus.
4. Once the user has clicked to begin logging, the CAN-Bus will poll for
the engine RPM, and will write the latitude, longitude, and GPS
speed. A message that the unit is logging will appear on the LCD
screen, and the actual engine RPM will be printed to the Serial
monitor. The data collected is written to the uSD card.
5. Each loop, the code checks if the user has clicked the joystick. If so,
the unit stops logging.
/*******************************************************
*********************
ECU CANBus Reader and Logger
Toni Klopfenstein @ SparkFun Electronics
September 2015
https://github.com/sparkfun/CANBus_Shield
This example sketch works with the CANBus shield from S
parkFun Electronics.
If you’ve uncommented the lines for serial debugging, you should see
something like this:
Engine RPM readings from CAN-Bus shield hooked up to a simulator.
Page 8 of 8
Once you have collected some readings, you can pull your uSD card out
and take a look at the data recorded. There should be a file on your uSD
card called “DATA.TXT”, and it should include information like the following:
Note: If you’re only recording blank readings for your GPS, as shown
above, make sure you have your GPS unit in an area with a good satellite
view.
Once you’ve verified data is being stored to the uSD card, you’re good to
go! You’ve successfully interfaced with your vehicle’s CAN-Bus and can
now start digging into diagnostic codes and building projects around your
engine’s data.
Resources and Going Further
Going Further
Once you’ve gotten the basic functionality of the CAN-Bus shield working,
you can start hacking your car and interfacing your own electronics to your
vehicle. Try checking out different PIDs on the CAN-Bus with your vehicle,
or see if you can interface the CAN-Bus to control LEDs, speakers, and
more!
If you have any feedback, please visit the comments or contact our
technical support team at TechSupport@sparkfun.com.
Additional Resources
You can use these resources for more project ideas or troubleshooting.
•
•
•
•
CAN-Bus Shield Repository
MCP2515 Datasheet
MCP2551 Datasheet
OBD-II UART Hookup Guide
https://learn.sparkfun.com/tutorials/can-bus-shield-hookup-guide?_ga=1.195105900.1939... 10/22/2015