Wireless CAN-Interface for the ESP32 by Espressif. Which uses the cannelloni protocol to send CAN-Frames via UDP over an Wi-Fi tunnel.
- CAN-Frame accumulation in a UDP-Package
- send and receive CAN-Frames from a connected CAN-Bus
- CAN Driver configuration
- Arbitration ID filter (hardware and software)
- python-can support
- CAN-FD support
- UDP support
- Documentation
These following instructions will help you to install and run the project on the ESP32 for development and testing purposes.
Which hardware components and software are needed and how to install them
- ESP32 by Espressif
- CAN-Transceiver
- cables
- D-SUB connector (male)
Arduino IDE - The tool for flashing the ESP32
Unfortunatally no success to compile with Arduino IDE, therefore switch to PlatformIO (VSCode)
- Changed from CAN to TWAI (Two Wire Automotive Interface) function calls
- added dependend libraries to platformio.ini
- Changed from ArduinoJson from V5 to V6 (have be tested)
Still no success to make :( Can't fix the struct error...
Connect the following Pins from the ESP32 with the specified Pins of the CAN-Transceiver
ESP32 | CAN-Transceiver | |
---|---|---|
3.3 Volt | 3V3 | 3V3 |
Ground | GND | GND |
CTX | GPIO5 | CTX |
CRX | GPIO4 | CRX |
Connect the following Pins from the CAN-Transceiver with the specified Pins of the D-SUB connector
CAN-Transceiver | D-SUB connector | |
---|---|---|
CAN High | CANH | Pin 7 |
CAN Low | CANL | Pin 2 |
### Install and configure the Arduino IDE
1. Download and install the Arduino IDE
2. Open Preferences in the Arduino IDE ( File -> Preferences )
3. Include https://dl.espressif.com/dl/package_esp32_index.json under Additional Boards Manager URLs
4. Open the Board Manager ( Tools -> Board -> Boards Manager... )
5. Search for esp32 and install the esp32 by Espressif Systems
6. Finish! The installation should be completed in a few seconds
Connect the ESP32 via USB with a Computer and follow the instructions
1. Open the Arduino IDE
2. Choose a ESP32 Board ( Tools -> Board -> ESP32 Arduino)
3. Choose the used port ( Tools -> Port: -> COMx )
4. Download the Project and open the "CAN_Interface.ino" ( File -> Open...)
5. Press the Upload Button in the Arduino IDE
6. If everything went as expected a "Done uploading." message should appear
CAN-Interface is not suited for production purposes. It is not guaranteed that CAN-Frames will reach their destination or reach in the right order. Use the CAN-Interface only for purposes where packet loss is tolerable.
-
Connect the SUB-D connector from the CAN-Interface with a CAN-Bus
-
Make a Wi-Fi connection between a Computer and the access point of the CAN-Interface
-
To start the communication with the CAN-Interface send an initialization message to the UDP-Socket
-
Open an UDP-Socket
-
Build a Cannelloni Data Package containing the CAN-Frames to send (Header + encoded CAN-Frames)
class CANNELLONIDataPacket(object): """ Header for Cannelloni Data Packet """ def __init__(self): self.version = 0 self.op_code = 0 self.seq_no = 0 self.count = 0
-
Send the Cannelloni Data Package via UDP to the CAN-Interface
- Open an UDP-Socket
- Receive the UDP-Packages sent from the CAN-Interface
- Unpack the CAN-Frames using the Cannelloni Data Package
- Decode the CAN-Frames
The CAN-Interface can also be used with the library python-can which provides CAN support for Python.
In order to use the CAN-Interface with python-can, the library with support for the CAN-Interface has to be installed
TODO: Describe the use with python-can (entered in library? y/n)
- Philipp Fuxen - Initial work - PhilippFux
- cannelloni - SocketCAN over Ethernet tunnel - mguentner/cannelloni