想用ESP32实现CAN通讯,上网查有一篇文章关于ESP32实现CAN通讯的。实验了,可以用,但当CAN的线断开会发生死机,必须是CANH和CANL线保持连接才能正常工作。在库管理器中查找,CAN的库还是挺多的,发现了印度人Sandeep Mistry写的CAN库。前面的文章介绍过这个人写的库,是SX1278的库。说一下这个库的应用过程。
库下载
在库管理器中找到CAN:
从介绍可以看出,这个库可以被ESP32使用。并且不用Microchip的MCP2515,使用TJA1000兼容的模块。在这里下载就可以了。
硬件连接
在软件的介绍上说要使用3.3V的CAN transceiver. 我采用了TJA1050,这个模块的电源是+5V的,如果不接+5V,程序不能正常工作。
Requires an external 3.3V CAN transceiver, such as a TI SN65HVD230.
CAN transceiver | ESP32 |
---|---|
3V3 | 3V3 |
GND | GND |
CTX | GPIO 5 |
CRX | GPIO 4 |
CTX and CRX pins 可以改变,在使用begin函数前用 CAN.setPins(rx, tx). 在这里因为我采用了TJA1050,电源换成了+5V,接线正确后就不会出现死机了。
程序
用例子程序的发送和接收就可以实验了。通讯很简单。这个程序只要是连线正确,在发送信息后不会因为CAN通讯线断开而死机。
后记
网友问用TJA1050不行,我用的板子如下:
最左下角的就是TJA1050,通讯正常。
有许多网友对通讯有疑问,把电路图贴这里,供大家参考:
没有上拉,也没有下拉。直接将CAN的高低线引出。我的CAN_TX和CAN_RX用的是库中的默认管脚,4和5.