Commu 模块
这是模块 Commu 的驱动程序库,用于接收和发送 CAN / RS485 / I2C 数据。
支持以下产品:
UiFlow2 示例
CAN, RS485, I2C 通信
打开 commu_core2_example.m5f2 项目在 UiFlow2 中。
这个示例展示了如何使用 Commu 模块接收和发送数据。
UiFlow2 代码块:
示例输出:
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:5 Kbps -CAN_10KBPS:10 Kbps -CAN_20KBPS:20 Kbps -CAN_31K25BPS:31.25 Kbps -CAN_33KBPS:33 Kbps -CAN_40KBPS:40 Kbps -CAN_50KBPS:50 Kbps -CAN_80KBPS:80 Kbps -CAN_83K3BPS:83.33 Kbps -CAN_95KBPS:95 Kbps -CAN_100KBPS:100 Kbps -CAN_125KBPS:125 Kbps -CAN_200KBPS:200 Kbps -CAN_250KBPS:250 Kbps -CAN_500KBPS:500 Kbps -CAN_1000KBPS:1 Mbps。spi_baud (int) – 使用的 SPI 波特率,默认是 8000000。
canIDMode (int) –
使用的 CAN ID 模式 (MCP_STDEXT, MCP_EXTDONLY),默认是 MCP_STDEXT。
- 选项:
MCP_STDEXT: 标准+扩展模式MCP_EXTDONLY: 拓展模式
debug (bool) – 是否启用调试模式,默认为 “False”。
UiFlow2 代码块:

MicroPython 代码块:
from module import CommuModuleCAN commu = CommuModuleCAN(CommuModule.NORMAL, baudrate=16)
- recv(fifo=0, list=None, timeout=5000)
从 CAN 总线读取消息。
- 参数:
- 返回:
包含(can_id、is_extended、is_rtr、fmi、data)的元组
- 返回类型:
tuple
消息数据。
布尔值,表示信息 ID 是标准的还是扩展的。
布尔值,用于指示报文是否为 RTR 报文。
FMI(筛选匹配指数)值。
包含数据的数组。
UiFlow2 代码块:


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)
- class module.commu.CommuModuleRS485(id, **kwargs)
基类:
objectCommuModuleRS485 类包装了一个 UART 类的实例。
更多详情,请参阅 hardware.UART。
- class module.commu.CommuModuleI2C(id, **kwargs)
基类:
objectCommuModuleI2C 类包装了一个 I2C 类的实例。
更多详情,请参阅 machine.I2C. – 两线串行协议。




