RS232F/M 模块。
支持的产品:
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 代码块:
UiFlow2 RX 应用示例:
class RS232Module
构造函数
- class RS232Module(id, baudrate=9600, bits=8, parity=None, stop=1, *, ...)
构建指定 id 的 UART 对象。
更多参数请参考 init。
UIFLOW2:

方法
- 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:

- RS232Module.deinit()
关闭 UART 总线。
备注
在对对象调用
deinit()之后,将无法再对该对象调用init()。此情况下需要创建一个新的实例。UIFLOW2:

- RS232Module.any()
返回一个整数,用于统计在不阻塞的情况下可读取的字符数量。如果没有可用字符,则返回 0;如果有字符,则返回一个正数。即使有多个字符可供读取,该方法也可能返回 1。
若要对可用字符进行更复杂的查询,请使用 select.poll::。
poll = select.poll() poll.register(uart, select.POLLIN) poll.poll(timeout)
UIFLOW2:

- RS232Module.read([nbytes])
读取字符。如果指定了
nbytes,则最多读取这么多字节;否则尽可能读取更多数据。如果达到超时,也可能会提前返回。超时时间可在构造函数中配置。返回值:包含读取到的字节的 bytes 对象。超时则返回
None。UIFLOW2:



- RS232Module.readinto(buf[, nbytes])
将字节读入
buf。如果指定了nbytes,则最多读取这么多字节。否则,最多读取len(buf)字节。如果达到超时时间,可能会更早返回。超时时间可在构造函数中配置。返回值:读取并存储到
buf中的字节数;若超时则返回None。UIFLOW2:

- RS232Module.readline()
读取一行,以换行符结尾。如果达到超时时间,可能会提前返回。超时时间可在构造函数中配置。
返回值:读取到的行,或在超时时返回
None。UIFLOW2:

- RS232Module.write(buf)
将字节缓冲区写入总线。
返回值:写入的字节数,或在超时时为
None。UIFLOW2:






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

- RS232Module.flush()
等待直到所有数据均已发送完毕。若发生超时,将引发异常。超时时长取决于 tx 缓冲区大小和波特率。除非启用流控制,否则不应发生超时。
备注
对于 rp2、esp8266 和 nrf 端口,该调用会在最后一个字节发送时返回。如有需要,必须在调用脚本中添加一个字符的等待时间。
UIFLOW2:

- RS232Module.txdone()
判断是否所有数据都已发送完成或当前没有数据传输。在这种情况下,它返回
True。如果正在进行数据传输,则返回False。备注
对于 rp2、esp8266 和 nrf 端口,即使一次传输的最后一个字节仍在发送中,该调用也可能返回
True。如有需要,必须在调用脚本中增加一个字符的等待时间。UIFLOW2:




