环境搭建:资料在网上已经有很多了。推荐资料:环境搭建。如果下载很慢,无法下载下来的话,推荐资料:环境搭建
在安装完环境之后,我们便可以安装CAN总线库了。CAN库:https://github.com/miwagner/ESP32-Arduino-CAN。库的安装请先下载为ZIP文件,然后在项目->加载库->添加ZIP库就可以直接加入。参考以下代码:
#include <ESP32CAN.h>
#include <CAN_config.h>
CAN_device_t CAN_cfg;
void setup() {
Serial.begin(115200);
Serial.println("iotsharing.com CAN demo");
CAN_cfg.speed=CAN_SPEED_1000KBPS;
CAN_cfg.tx_pin_id = GPIO_NUM_5;
CAN_cfg.rx_pin_id = GPIO_NUM_4;
CAN_cfg.rx_queue = xQueueCreate(10,sizeof(CAN_frame_t));
//start CAN Module
ESP32Can.CANInit();
}
void loop() {
CAN_frame_t rx_frame;
//receive next CAN frame from queue
if(xQueueReceive(CAN_cfg.rx_queue,&rx_frame, 3*portTICK_PERIOD_MS)==pdTRUE){
//do stuff!
if(rx_frame.FIR.B.FF==CAN_frame_std)
printf("New standard frame");
else
printf("New extended frame");
if(rx_frame.FIR.B.RTR==CAN_RTR)
printf(" RTR from 0x%08x, DLC %d\r\n",rx_frame.MsgID, rx_frame.FIR.B.DLC);
else{
printf(" from 0x%08x, DLC %d\n",rx_frame.MsgID, rx_frame.FIR.B.DLC);
for(int i = 0; i < 8; i++){
printf("%c\t", (char)rx_frame.data.u8[i]);
}
printf("\n");
}
}
else
{
rx_frame.FIR.B.FF = CAN_frame_std;
rx_frame.MsgID = 1;
rx_frame.FIR.B.DLC = 8;
rx_frame.data.u8[0] = 'h';
rx_frame.data.u8[1] = 'e';
rx_frame.data.u8[2] = 'l';
rx_frame.data.u8[3] = 'l';
rx_frame.data.u8[4] = 'o';
rx_frame.data.u8[5] = 'c';
rx_frame.data.u8[6] = 'a';
rx_frame.data.u8[7] = 'n';
ESP32Can.CANWriteFrame(&rx_frame);
}
}
这里推荐一个基于ESP32的SLCAN项目:https://github.com/mintynet/esp32-slcan,希望通过这个项目,可以加深对ESP32的CAN的理解。