RS232F/M 模块。

支持的产品:

RS232F 模块。

RS232M Module

MicroPython 发送(TX)应用示例:

 1# SPDX-FileCopyrightText: 2024 M5Stack Technology CO LTD
 2#
 3# SPDX-License-Identifier: MIT
 4
 5import os, sys, io
 6import M5
 7from M5 import *
 8from module import RS232Module
 9import time
10
11
12rs232_0 = None
13
14
15def setup():
16    global rs232_0
17
18    M5.begin()
19    Widgets.fillScreen(0x222222)
20
21    rs232_0 = RS232Module(
22        1,
23        baudrate=115200,
24        bits=8,
25        parity=None,
26        stop=1,
27        tx=(0),
28        rx=(35),
29        txbuf=256,
30        rxbuf=256,
31        timeout=0,
32        timeout_char=0,
33        invert=0,
34        flow=0,
35    )
36
37
38def loop():
39    global rs232_0
40    M5.update()
41    rs232_0.write("hello M5" + "\r\n")
42    time.sleep(1)
43
44
45if __name__ == "__main__":
46    try:
47        setup()
48        while True:
49            loop()
50    except (Exception, KeyboardInterrupt) as e:
51        try:
52            from utility import print_error_msg
53
54            print_error_msg(e)
55        except ImportError:
56            print("please update to latest firmware")

MicroPython 应用示例:

 1# SPDX-FileCopyrightText: 2024 M5Stack Technology CO LTD
 2#
 3# SPDX-License-Identifier: MIT
 4
 5import os, sys, io
 6import M5
 7from M5 import *
 8from module import RS232Module
 9import time
10
11
12rs232_0 = None
13
14
15def setup():
16    global rs232_0
17
18    M5.begin()
19    Widgets.fillScreen(0x222222)
20
21    rs232_0 = RS232Module(
22        1,
23        baudrate=115200,
24        bits=8,
25        parity=None,
26        stop=1,
27        tx=(0),
28        rx=(10),
29        txbuf=256,
30        rxbuf=256,
31        timeout=0,
32        timeout_char=0,
33        invert=0,
34        flow=0,
35    )
36
37
38def loop():
39    global rs232_0
40    M5.update()
41    if rs232_0.any():
42        print(rs232_0.readline())
43    time.sleep(1)
44
45
46if __name__ == "__main__":
47    try:
48        setup()
49        while True:
50            loop()
51    except (Exception, KeyboardInterrupt) as e:
52        try:
53            from utility import print_error_msg
54
55            print_error_msg(e)
56        except ImportError:
57            print("please update to latest firmware")

UiFlow2 代码块:

tx_example.png

UiFlow2 RX 应用示例:

rx_example.png

core_rs232_tx_example.m5f2

cores3_rs232_rx_example.m5f2

class RS232Module

构造函数

class RS232Module(id, baudrate=9600, bits=8, parity=None, stop=1, *, ...)

构建指定 id 的 UART 对象。

更多参数请参考 init。

UIFLOW2:

init.png

方法

RS232Module.init(baudrate=9600, bits=8, parity=None, stop=1, *, ...)

使用给定参数初始化 UART 总线:

  • baudrate 是时钟频率。

  • bits 是每个字符的位数,可以是 7、8 或 9。

  • parity 为校验位,可为 None、0(偶校验)或 1(奇校验)。

  • stop 是停止位的数量,为 1 或 2。

某些移植版本可能支持的额外仅关键字参数包括:

  • tx 指定要使用的 TX 引脚。

  • rx 用于指定要使用的 RX 引脚。

  • rts specifies the RTS (output) pin to use for hardware receive flow control.

  • cts 指定用于硬件发送流控制的 CTS(输入)引脚。

  • txbuf 用于指定 TX 缓冲区的长度(以字符为单位)。

  • rxbuf 用于指定 RX 缓冲区的长度(以字符数为单位)。

  • timeout 用于指定等待第一个字符的时间(单位:ms)。

  • timeout_char 指定字符之间等待的时间(单位:ms)。

  • invert 用于指定要反转的线路。

    • 0 不会反转线路(两条线路的空闲状态均为逻辑高)。

    • RS232Module.INV_TX 将反转 TX 线(TX 线的空闲状态现为逻辑低)。

    • RS232Module.INV_RX 将反转 RX 线(RX 线的空闲状态现在为逻辑低)。

    • RS232Module.INV_TX | RS232Module.INV_RX 将反转两条线路(空闲状态为逻辑低)。

  • flow 用于指定要使用的硬件流控信号。该值为位掩码。

    • 0 将忽略硬件流控制信号。

    • RS232Module.RTS 将通过 RTS 输出引脚在接收 FIFO 具有足够空间以接收更多数据时进行信号指示,从而启用接收流量控制。

    • RS232Module.CTS 将启用发送流量控制,当 CTS 输入引脚发出信号表示接收端缓冲区空间不足时,将暂停传输。

    • RS232Module.RTS | RS232Module.CTS 将同时启用两者,以实现完整的硬件流控制。

备注

可以在同一个对象上多次调用 init(),以便动态重新配置 UART。这允许使用单个 UART 外设为连接到不同 GPIO 引脚的不同设备提供服务。在这种情况下,同一时间只能为一个设备提供服务。另外,不要调用 deinit(),因为这会阻止再次调用 init()

UIFLOW2:

setup.png

RS232Module.deinit()

关闭 UART 总线。

备注

在对对象调用 deinit() 之后,将无法再对该对象调用 init()。此情况下需要创建一个新的实例。

UIFLOW2:

deinit.png

RS232Module.any()

返回一个整数,用于统计在不阻塞的情况下可读取的字符数量。如果没有可用字符,则返回 0;如果有字符,则返回一个正数。即使有多个字符可供读取,该方法也可能返回 1。

若要对可用字符进行更复杂的查询,请使用 select.poll::。

poll = select.poll()
poll.register(uart, select.POLLIN)
poll.poll(timeout)

UIFLOW2:

any.png

RS232Module.read([nbytes])

读取字符。如果指定了 nbytes,则最多读取这么多字节;否则尽可能读取更多数据。如果达到超时,也可能会提前返回。超时时间可在构造函数中配置。

返回值:包含读取到的字节的 bytes 对象。超时则返回 None

UIFLOW2:

read_all.png

read_bytes.png

read_raw_data.png

RS232Module.readinto(buf[, nbytes])

将字节读入 buf。如果指定了 nbytes,则最多读取这么多字节。否则,最多读取 len(buf) 字节。如果达到超时时间,可能会更早返回。超时时间可在构造函数中配置。

返回值:读取并存储到 buf 中的字节数;若超时则返回 None

UIFLOW2:

readinto.png

RS232Module.readline()

读取一行,以换行符结尾。如果达到超时时间,可能会提前返回。超时时间可在构造函数中配置。

返回值:读取到的行,或在超时时返回 None

UIFLOW2:

readline.png

RS232Module.write(buf)

将字节缓冲区写入总线。

返回值:写入的字节数,或在超时时为 None

UIFLOW2:

write.png

write1.png

write_line.png

write_list.png

write_raw_data.png

write_raw_data_list.png

RS232Module.sendbreak()

在总线上发送中断(break)条件。这会将总线拉低,其持续时间长于正常传输一个字符所需的时间。

UIFLOW2:

sendbreak.png

RS232Module.flush()

等待直到所有数据均已发送完毕。若发生超时,将引发异常。超时时长取决于 tx 缓冲区大小和波特率。除非启用流控制,否则不应发生超时。

备注

对于 rp2、esp8266 和 nrf 端口,该调用会在最后一个字节发送时返回。如有需要,必须在调用脚本中添加一个字符的等待时间。

UIFLOW2:

flush.png

RS232Module.txdone()

判断是否所有数据都已发送完成或当前没有数据传输。在这种情况下,它返回 True。如果正在进行数据传输,则返回 False

备注

对于 rp2、esp8266 和 nrf 端口,即使一次传输的最后一个字节仍在发送中,该调用也可能返回 True。如有需要,必须在调用脚本中增加一个字符的等待时间。

UIFLOW2:

txdone.png