python-can

The python-can library provides controller area network support for Python, providing common abstractions to different hardware devices, and a suite of utilities for sending and receiving messages on a can bus.

python-can runs any where Python runs; from high powered computers with commercial can to usb devices right down to low powered devices running linux such as a BeagleBone or RaspberryPi.

More concretely, some example uses of the library:

  • Passively logging what occurs on a can bus. For example monitoring a commercial vehicle using its OBD-II port.
  • Testing of hardware that interacts via can. Modules found in modern cars, motocycles, boats, and even wheelchairs have had components tested from Python using this library.
  • Prototyping new hardware modules or software algorithms in-the-loop. Easily interact with an existing bus.
  • Creating virtual modules to prototype can bus communication.

Brief example of the library in action: connecting to a can bus, creating and sending a message:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
from __future__ import print_function

import can

def send_one():
    bus = can.interface.Bus()
    msg = can.Message(arbitration_id=0xc0ffee,
                      data=[0, 25, 0, 1, 3, 1, 4, 1],
                      extended_id=False)
    try:
        bus.send(msg)
        print("Message sent on {}".format(bus.channel_info))
    except can.CanError:
        print("Message NOT sent")

if __name__ == "__main__":
    send_one()

Contents:

Installation and Quickstart

See the readme included with the source code.

https://bitbucket.org/hardbyte/python-can

Known Bugs

See the project bug tracker on bitbucket. Patches and pull requests very welcome!

Documentation generated

September 10, 2016