MCP2515
MCP2515 通过 SPI 总线 与 ESPHome 通信;要使用它,你必须在 ESPHome 配置中定义至少一条
SPI 总线,并且同时包含 mosi_pin 和 miso_pin。
下方的接线选项部分说明了如何连接 MCP2515。
# 示例配置条目canbus: - platform: mcp2515 cs_pin: GPIOXX can_id: 4 bit_rate: 50kbps on_frame: - can_id: 500 then: - lambda: |- std::string b(x.begin(), x.end()); ESP_LOGD("canid 500", "%s", &b[0] ); - light.turn_off: light_1 - can_id: 501 then: - light.turn_on: id: light_1 brightness: !lambda "return (x.size() > 0) ? (float) x[0]/255 : 0;"NOTE
MCP2515 只提供两个接收缓冲区,每个循环周期读取一次。 这意味着,如果一个循环周期(通常为 16ms,可能更长)内收到超过两个 CAN 帧,帧将被丢弃。
这一限制使 MCP2515 不适合中高速 CAN 总线,尤其是汽车 CAN 总线。 请尽可能使用 esp32_can 组件。
-
cs_pin (必填, Pin Schema):用于通知 SPI 设备何时 在 SPI 总线上监听数据。每个 SPI 设备都有自己的
CS线路。有时也称为SS。 -
clock (可选, enum):MCP2515 设备上使用的时钟晶振频率。可选值为
8MHZ、12MHZ、16MHZ或20MHZ。默认为8MHZ。 -
mode (可选, enum):工作模式。可选值为:
NORMAL:正常工作。 (默认)LOOPBACK:回环模式,适用于测试与设备之间的连接。LISTENONLY:仅接收数据。
-
包含 Canbus 的所有其他选项。
NOTE
并非所有时钟和波特率的组合都受支持。不受支持的组合在
编译时不会被标记。如果你怀疑这是问题所在,请检查 ESPHome 设备的日志,查看是否有类似 Invalid frequency/bitrate combination 的消息。
最简单的方法是使用已完全组装好的板子,只需在 MISO 线上添加一个电阻。这样 MOSI、SCK 和 CS 会超出规范范围,但这很少成为问题。
更复杂的方案是使用电平转换器,正确地转换 3.3V 和 5V 逻辑电平。