跳转到内容

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 逻辑电平。