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 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | #!/usr/bin/env python
"""
This example shows how sending a single message works.
"""
import can
def send_one():
"""Sends a single message."""
# this uses the default configuration (for example from the config file)
# see https://python-can.readthedocs.io/en/stable/configuration.html
with can.interface.Bus() as bus:
# Using specific buses works similar:
# bus = can.interface.Bus(bustype='socketcan', channel='vcan0', bitrate=250000)
# bus = can.interface.Bus(bustype='pcan', channel='PCAN_USBBUS1', bitrate=250000)
# bus = can.interface.Bus(bustype='ixxat', channel=0, bitrate=250000)
# bus = can.interface.Bus(bustype='vector', app_name='CANalyzer', channel=0, bitrate=250000)
# ...
msg = can.Message(
arbitration_id=0xC0FFEE, data=[0, 25, 0, 1, 3, 1, 4, 1], is_extended_id=True
)
try:
bus.send(msg)
print(f"Message sent on {bus.channel_info}")
except can.CanError:
print("Message NOT sent")
if __name__ == "__main__":
send_one()
|
Contents:
- Installation
- Configuration
- Library API
- CAN Interface Modules
- CANalyst-II
- CAN driver for Geschwister Schneider USB/CAN devices and bytewerk.org candleLight USB CAN interfaces
- isCAN
- IXXAT Virtual CAN Interface
- Kvaser’s CANLIB
- Multicast IP Interface
- NEOVI Interface
- NI-CAN
- PCAN Basic API
- Chinese CAN-USB interface (mfg. Robotell etc.)
- USB-CAN Analyzer
- CAN over Serial
- CAN over Serial / SLCAN
- SocketCAN
- SYSTEC interface
- USB2CAN Interface
- Vector
- Virtual
- Scripts
- Developer’s Overview
- History and Roadmap
Known Bugs¶
See the project bug tracker on github. Patches and pull requests very welcome!
Documentation generated
Jan 18, 2021