- Arduino UNO R4 WiFi CAN Bus
- Goals
- Hardware & Software Needed
- Controller Area Network (CAN)
- Circuit
- Code Examples
- CAN Write
- CAN Read
- Summary
- Wifi to can bus
- Description
- Functionality
- Mode L2
- Mode TCP
- Specifications
- Wireless CAN Bus Logger — Easily Access Your Data via WiFi
- In this article
- CL3000 WiFi modes
- Access point mode
- Station mode
- FTP server push mode
- ESP32 WiFi, Bluetooth Classic, BLE, CAN Bus Module
- Features
- Development Resources
- Programming Support
- Bluetooth & BLE Information
- Internet of Things Projects with ESP32: Build exciting and powerful IoT projects
Arduino UNO R4 WiFi CAN Bus
In this tutorial you will learn how to use the CAN controller on the Arduino UNO R4 WiFi board. The CAN controller is embedded in the UNO R4 WiFi’s microcontroller (RA4M1). CAN is a serial protocol that is mainly used in the automotive industry.
Please note that CAN controller requires an external transceiver to function. Instructions and hardware examples are provided in this tutorial.
Goals
The goals of this tutorial are:
- Get an overview of the built-in CAN library
- Learn how to connect a board to a CAN transceiver module
- Send a CAN message between two Arduinos
Hardware & Software Needed
* In this tutorial, we are using a SN65HVD230 breakout module.
Controller Area Network (CAN)
The CAN bus uses two wires: CAN high and CAN low. On the UNO R4 WiFi, these pins are:
To communicate with other CAN devices however, you need a transceiver module. In this tutorial, we will be using a SN65HVD230 breakout. To connect this, you can follow the circuit diagram available in the section below.
For this tutorial, we will use a simple example that sends a CAN message between two UNO R4 WiFi devices. If you wish, you can also connect an existing CAN device to the UNO R4 WiFi.
Circuit
To connect the CAN transceiver, follow the table and circuit diagram below:
UNO R4 WiFi | CAN Transceiver |
---|---|
D13 (CANRX0) | CANRX |
D10 (CANTX0) | CANTX |
3.3V | VIN/VCC/5V |
GND | GND |
Then, between the CAN transceivers, connect the following:
CAN Transceiver 1 | CAN Transceiver 2 |
---|---|
CANH (HIGH) | CANH (HIGH) |
CANL (LOW) | CANL (LOW) |
Code Examples
The following code examples needs to be uploaded to each of the UNO R4 WiFi boards, one will send a message, one will receive it. These examples are available in the Renesas core, and using the Arduino IDE, you can access them by navigating to File > Examples > Arduino_CAN > CANWrite/CANRead
The library used is built in to the core, so no need to install the library if you have the core installed.
To initialize the library, use
CAN.begin(CanBitRate::BR_250k)
CAN Write
To send a CAN message, you can create a
1uint8_t const msg_data[] = 0xCA,0xFE,0,0,0,0,0,0>; 2 memcpy((void *)(msg_data + 4), &msg_cnt, sizeof(msg_cnt)); 3CanMsg msg(CAN_ID, sizeof(msg_data), msg_data);
After you have crafted a CAN message, we can send it off, by using the
1#include 2 3static uint32_t const CAN_ID = 0x20; 4 5 void setup() 6 7 Serial.begin(115200); 8 while (!Serial) > 9 10 if (!CAN.begin(CanBitRate::BR_250k)) 11 12 Serial.println("CAN.begin(. ) failed."); 13 for (;;) > 14 > 15 > 16 17static uint32_t msg_cnt = 0; 18 19 void loop() 20 21 /* Assemble a CAN message with the format of22 * 0xCA 0xFE 0x00 0x00 [4 byte message counter]23 */ 24 uint8_t const msg_data[] = 0xCA,0xFE,0,0,0,0,0,0>; 25 memcpy((void *)(msg_data + 4), &msg_cnt, sizeof(msg_cnt)); 26 CanMsg msg(CAN_ID, sizeof(msg_data), msg_data); 27 28 /* Transmit the CAN message, capture and display an29 * error core in case of failure.30 */ 31 if (int const rc = CAN.write(msg); rc 0) 32 33 Serial.print ("CAN.write(. ) failed with error code "); 34 Serial.println(rc); 35 for (;;) > 36 > 37 38 /* Increase the message counter. */ 39 msg_cnt++; 40 41 /* Only send one message per second. */ 42 delay(1000); 43 >
CAN Read
To read an incoming CAN message, first use
1#include 2 3 void setup() 4 5 Serial.begin(115200); 6 while (!Serial) > 7 8 if (!CAN.begin(CanBitRate::BR_250k)) 9 10 Serial.println("CAN.begin(. ) failed."); 11 for (;;) > 12 > 13 > 14 15 void loop() 16 17 if (CAN.available()) 18 19 CanMsg const msg = CAN.read(); 20 Serial.println(msg); 21 > 22 >
Summary
This tutorial shows how to use the CAN bus available on the UNO R4 WiFi, and how to send and receive data using the Arduino_CAN library.
Read more about this board in the Arduino UNO R4 WiFi documentation.
Wifi to can bus
Description
Not all sensor network applications can deal with the wiring involved with a wireline CAN solution. Sometimes there is a just a gap that cannot easily be crossed with a wire. Other times it is just not practical, for example because the system is a temporary setup, which does not warrant clean installation of the wiring involved.
CAN-bus is really just intended a wire-based technology and must of it’s features depend on the physical medium. However, if we don’t bother too much about priorities and bus error features, then there is no reason not to route CAN-bus telegrams over a wireless medium. This is also acknowledged by CAN in Automation, the group behind CANopen, with their publications CiA 315 «Generic frame for wireless tunneling of CAN messages and for transfer of diagnostic data» and CiA 457 «CANopen interface profile wireless transmissions».
Functionality
- Wireless networking for CAN-bus data
- Bridges operate as CANopen ® device with device monitoring & configuration
- Transparent for J1939 or other 29-bit CAN applications
- Transparent for CAN-FD, FD can be disabled for individual bridges
- Supports up to 8 clients in the wireless domain in Layer-2 AP mode
- Supports encrypted point-to-point link in TCP/IP mode
- Configuration via CANopen or via PC application on micro-USB port
- Possibility for branding or custom firmware with specific behaviour
Mode L2
In Layer-2 mode, one bridge operates in access-point mode. The other bridges operate in station mode and connect to the AP-mode bridge. The default mode is Layer-2-AUTO, this starts the bridge in station mode and tries to connect to a access-point bridge. If no such bridge is found, then the device will become an access-point itself.
Mode TCP
The TCP modes are for establishing a TCP/IP based link between two bridge devices. Because this uses standard TCP/IP, the bridges can connect to any WiFi access-point.
Specifications
- Globally approved 2.4GHz ISM band using 802.11b/g/n protocol (Wi-Fi)
- CANopen® interface profile wireless transmission (CiA 457 + custom)
- Large FIFO buffers allow for buffering of bursts on either side
- Separate priority FIFO helps in preserving timing of messages with ID ≤ 0x100 CANopen SYNC message PLL on receiving devices to reduce radio latency jitter effects
- Supports LSS node ID assignment and Fastscan (CiA 305)
- Supports firmware update via wired or wireless CAN interface or locally via USB
- Supports power management & monitoring features (CiA 302-9 + custom for monitoring of bus voltage, input current, CPU voltage and CPU temperature)
- Supports custom heartbeat messages, using additional bytes for status
Wireless CAN Bus Logger — Easily Access Your Data via WiFi
In this intro we show how the CL3000 WiFi CAN logger can be used to collect your data via WiFi across 3 powerful modes: Access point, Station and Push.
Note: We are migrating from the CL3000 — please see our 2nd generation, the CANedge2. The CANedge2 offers superior functionality with powerful software like telematics dashboards, a Python API and telematics platforms.
In this article
CL3000 WiFi modes
The CL3000 works like a CL2000 with WiFi. This means you can log raw RTC-timestamped CAN data to the SD card — and stream data in real-time via USB. On top of this, the CL3000 offers 3 WiFi modes as outlined below.
Access point mode
The CAN logger ships in AP mode, meaning that it will simply show up as a «hotspot» on your PC, phone or tablet.
Just log on and access your data by entering a pre-specified link in your browser (e.g. «ID0001/»).
Example: You’re in the field with your iPad and wish to collect CAN bus data from a hard-to-reach logger. You get in range, log on to the hotspot and download the log files you need — while the CAN logger continues logging!
Station mode
The IoT CAN logger can easily be configured to auto-connect to an existing WiFi hotspot. Once connected, your CAN bus data is accessible via any device on the network via your link & password. A hotspot could be e.g. a local network router, a PC/phone/tablet built-in hotspot or mobile hotspots in trucks.
Pro Tip: If you want to access the logger outside your local network, this can be done if you are on the same VPN as the hotspot. Alternatively, you can easily set up port forwarding to turn your access link into an online website for easy global access.
Example: You need to monitor CAN based equipment at a client site. By connecting your CL3000 to their router with port forwarding, you can access log files anytime, anywhere — without bothering your client.
FTP server push mode
In both AP and STA mode, the WiFi CAN logger can be set up to automatically push new log files to a FTP server. Once a log file has been uploaded, it is deleted from the SD card to free up space and avoid duplicate transfers.
Example: You need to collect J1939 data across 50 trucks on a daily basis. With the PUSH mode, the J1939 log files in a truck can be uploaded on-the-go via e.g. a mobile WiFi 4G celluar hotspot in the truck to a cloud server. Or, the data can be uploaded when the trucks return to the garage and loggers come within range of the local WiFi router. In both cases, the data can be auto pushed to a single FTP server folder for easy processing at scale.
Ready to collect your CAN data via WiFi?
Get your CL3000 today!
ESP32 WiFi, Bluetooth Classic, BLE, CAN Bus Module
This board comes with an onboard ESP32 WROOM-32 WiFi, Bluetooth Classic, BLE Module, and a CAN Bus port with a transceiver. Also, onboard is an RGB LED, IO pins on a 0.1″ pad.
Programming is accomplished through the popular Arduino IDE connected to the USB-to-Serial converter with USB-C connector, automatic bootloader and reset.
The ESP32 is a series of low-cost, low-power system-on-chip microcontrollers with integrated Wi-Fi and dual-mode Bluetooth. The ESP32 series employs a Tensilica Xtensa LX6 microprocessor in both dual-core and single-core variations and includes built-in antenna switches, RF balun, power amplifier, low-noise receive amplifier, filters, and power management modules.
Features
- 240 MHz dual core Tensilica LX6 microcontroller with 600 DMIPS
- Integrated 512 KB SRAM
- Integrated 802.11b/g/n HT40 WiFi transceiver, baseband, stack and LWIP
- Integrated dual mode Bluetooth (classic and BLE)
- 4 MByte flash included in the WROOM32 module
- On-board PCB antenna
- Programming via USB-C connector
- CAN Bus transceiver
- SPI, IIC, I2S, UART ports accessible through onboard connections
- ADC, DAC channels accessible through onboard connections
- External power supply (7 VDC to 12 VDC) with reverse polarity protection
- Extended operating temperature range of -40C to +85C
- Size: 62 mm x 42 mm (2.5″ x 1.6″). Add 12 mm (0.5″) for the terminal block.
Development Resources
Programming Support
Bluetooth & BLE Information
Internet of Things Projects with ESP32: Build exciting and powerful IoT projects
The ESP32, a low-cost MCU with integrated Wi-Fi and BLE capabilities, comes with a variety of modules and development boards for building IoT applications efficiently. Wi-Fi and BLE are standard network stacks for Internet-of-Things applications providing cost-effective solutions for your business and project requirements.
This book is a fundamental guide for developing ESP32 programs and starts by explaining GPIO (General Purpose I/O) programming with sensor devices. The reader gets up to speed with ESP32 development through several IoT projects such as weather stations, sensor loggers, smart homes, Wi-Fi cams, and Wi-Fi wardriving. The reader learns how to use ESP32 boards to facilitate interactions between mobile applications and cloud servers, such as AWS.
By the end of this book, you’ll have learned how to control a range of IoT projects using the ESP32 chip.