Commu Module

这是模块 Commu 的驱动程序库,用于接收和发送 CAN / RS485 / I2C 数据。

支持以下产品:

commu

UiFlow2 示例

CAN, RS485, I2C 通信

打开 commu_core2_example.m5f2 项目在 UiFlow2 中。

这个示例展示了如何使用 Commu 模块接收和发送数据。

UiFlow2 代码块:

example.png

示例输出:

None

MicroPython 示例

CAN, RS485, I2C 通信

这个示例展示了如何使用 Commu 模块接收和发送数据。

MicroPython 代码块:

 1# SPDX-FileCopyrightText: 2025 M5Stack Technology CO LTD
 2#
 3# SPDX-License-Identifier: MIT
 4
 5import os, sys, io
 6import M5
 7from M5 import *
 8from module import CommuModuleCAN
 9from module import CommuModuleRS485
10from module import CommuModuleI2C
11from hardware import Pin
12
13
14title0 = None
15label0 = None
16label1 = None
17label2 = None
18commu_0 = None
19commu_1 = None
20commu_2 = None
21
22
23def setup():
24    global title0, label0, label1, label2, commu_0, commu_1, commu_2
25
26    M5.begin()
27    Widgets.fillScreen(0x222222)
28    title0 = Widgets.Title(
29        "COMMUModule Core2 Example", 3, 0xFFFFFF, 0x0000FF, Widgets.FONTS.DejaVu18
30    )
31    label0 = Widgets.Label("CAN Rec:", 1, 77, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18)
32    label1 = Widgets.Label("RS485 Rec:", 1, 121, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18)
33    label2 = Widgets.Label("I2C List:", 1, 166, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18)
34
35    commu_0 = CommuModuleCAN(0x00, baudrate=16)
36    commu_1 = CommuModuleRS485(2, baudrate=115200, bits=8, parity=None, stop=1, tx=14, rx=13)
37    commu_2 = CommuModuleI2C(0, scl=Pin(22), sda=Pin(21), freq=100000)
38
39
40def loop():
41    global title0, label0, label1, label2, commu_0, commu_1, commu_2
42    M5.update()
43    if commu_0.any():
44        label0.setText(str((str("CAN Rec:") + str((commu_0.recv())))))
45    if BtnA.isPressed():
46        commu_0.send("uiflow2", 0, extframe=False)
47    elif BtnB.isPressed():
48        label2.setText(str((str("I2C List:") + str((commu_2.scan())))))
49    if commu_1.any():
50        label1.setText(str((str("RS485 Rec:") + str((commu_1.read())))))
51
52
53if __name__ == "__main__":
54    try:
55        setup()
56        while True:
57            loop()
58    except (Exception, KeyboardInterrupt) as e:
59        try:
60            from utility import print_error_msg
61
62            print_error_msg(e)
63        except ImportError:
64            print("please update to latest firmware")

示例输出:

None

API参考

CommuModule

class module.commu.CommuModuleCAN(mode=0, baudrate=16, spi_baud=8000000, canIDMode=0, debug=False)

基类:MCP2515_CAN

创建一个 CommuModuleCAN 对象

参数:
  • mode (int) –

    使用的 CAN 模式 (NORMAL, LISTEN_ONLY),默认是 NORMAL。

    选项:
    • NORMAL: 正常模式

    • LISTEN_ONLY: 监听模式

  • baudrate (int) –

    使用的波特率,默认是 CAN_1000KBPS。

    选项:
    • CAN_5KBPS: 5Kbps

    • CAN_10KBPS: 10Kbps

    • CAN_20KBPS: 20Kbps

    • CAN_31K25BPS: 31.25Kbps

    • CAN_33KBPS: 33Kbps

    • CAN_40KBPS: 40Kbps

    • CAN_50KBPS: 50Kbps

    • CAN_80KBPS: 80Kbps

    • CAN_83K3BPS: 83.33Kbps

    • CAN_95KBPS: 95Kbps

    • CAN_100KBPS: 100Kbps

    • CAN_125KBPS: 125Kbps

    • CAN_200KBPS: 200Kbps

    • CAN_250KBPS: 250Kbps

    • CAN_500KBPS: 500Kbps

    • CAN_1000KBPS: 1Mbps

  • spi_baud (int) – 使用的 SPI 波特率,默认是 8000000。

  • canIDMode (int) –

    使用的 CAN ID 模式 (MCP_STDEXT, MCP_EXTDONLY),默认是 MCP_STDEXT。

    选项:
    • MCP_STDEXT: 标准+扩展模式

    • MCP_EXTDONLY: 拓展模式

  • debug (bool) – 是否启用调试模式,默认为 “False”。

UiFlow2 代码块:

init.png

MicroPython 代码块:

from module import CommuModuleCAN

commu = CommuModuleCAN(CommuModule.NORMAL, baudrate=16)
info()

获取错误信息。

返回:

当前的错误信息。

返回类型:

str

UiFlow2 代码块:

info.png

MicroPython 代码块:

commu.info()
any()

Check if any message is available.

返回:

检查是否有消息可用。

返回类型:

bool

UiFlow2 代码块:

any.png

MicroPython 代码块:

commu.any()
recv(fifo=0, list=None, timeout=5000)

从 CAN 总线读取消息。

参数:
  • fifo (int) – fifo 是一个整数,可以是任何数字,并与 Pyb.CAN 兼容。

  • list (list) – list 是一个可选的列表对象,将用作返回值。

  • timeout (int) – timeout 是等待接收的超时时间(毫秒)。

返回:

包含(can_id、is_extended、is_rtr、fmi、data)的元组

返回类型:

tuple

  • 消息数据。

  • 布尔值,表示信息 ID 是标准的还是扩展的。

  • 布尔值,用于指示报文是否为 RTR 报文。

  • FMI(筛选匹配指数)值。

  • 包含数据的数组。

UiFlow2 代码块:

recv_message.png

recv_message_into.png

MicroPython 代码块:

commu.recv(0)

buf = bytearray(8)
lst = [0, 0, 0, 0, memoryview(buf)]
# No heap memory is allocated in the following call
commu.recv(0, lst)
send(data, can_id, extframe=False)

发送消息到 CAN 总线。

参数:
  • data (str) – 消息数据。

  • can_id (int) – The CAN ID.

  • extframe (bool) – 是否使用扩展帧格式。

返回:

消息数据。

返回类型:

str

UiFlow2 代码块:

send.png

MicroPython 代码块:

commu.send('uiflow2', 0, extframe=False)
class module.commu.CommuModuleRS485(id, **kwargs)

基类:object

CommuModuleRS485 类包装了一个 UART 类的实例。

更多详情,请参阅 hardware.UART

class module.commu.CommuModuleI2C(id, **kwargs)

基类:object

CommuModuleI2C 类包装了一个 I2C 类的实例。

更多详情,请参阅 machine.I2C. – 两线串行协议。