【雕爷学编程】MicroPython手册之 WiPy 特定端口库 wipy.machine.UART.any()

MicroPython是为了在嵌入式系统中运行Python 3编程语言而设计的轻量级版本解释器。与常规Python相比,MicroPython解释器体积小(仅100KB左右),通过编译成二进制Executable文件运行,执行效率较高。它使用了轻量级的垃圾回收机制并移除了大部分Python标准库,以适应资源限制的微控制器。

MicroPython主要特点包括:
1、语法和功能与标准Python兼容,易学易用。支持Python大多数核心语法。
2、对硬件直接访问和控制,像Arduino一样控制GPIO、I2C、SPI等。
3、强大的模块系统,提供文件系统、网络、图形界面等功能。
4、支持交叉编译生成高效的原生代码,速度比解释器快10-100倍。
5、代码量少,内存占用小,适合运行在MCU和内存小的开发板上。
6、开源许可,免费使用。Shell交互环境为开发测试提供便利。
7、内置I/O驱动支持大量微控制器平台,如ESP8266、ESP32、STM32、micro:bit、掌控板和PyBoard等。有活跃的社区。

MicroPython的应用场景包括:
1、为嵌入式产品快速构建原型和用户交互。
2、制作一些小型的可 programmable 硬件项目。
3、作为教育工具,帮助初学者学习Python和物联网编程。
4、构建智能设备固件,实现高级控制和云连接。
5、各种微控制器应用如物联网、嵌入式智能、机器人等。

使用MicroPython需要注意:
1、内存和Flash空间有限。
2、解释执行效率不如C语言。
3、部分库函数与标准版有差异。
4、针对平台优化语法,订正与标准Python的差异。
5、合理使用内存资源,避免频繁分配大内存块。
6、利用原生代码提升速度关键部位的性能。
7、适当使用抽象来封装底层硬件操作。

总体来说,MicroPython让Python进入了微控制器领域,是一项重要的创新,既降低了编程门槛,又提供了良好的硬件控制能力。非常适合各类物联网和智能硬件的开发。
在这里插入图片描述

MicroPython 是一种适用于微控制器的 Python 语言的精简实现,它可以让开发者使用 Python 语法和标准库来编写嵌入式应用程序。WiPy 是一种基于 ESP32 芯片的无线开发板,它支持运行 MicroPython 固件。MicroPython 特定于 WiPy 的库是一组为 WiPy 设计的模块,它们提供了 WiPy 的特有功能和硬件接口的访问。MicroPython 特定于 WiPy 的库的主要特点如下:

1、它包含了一些与 WiPy 相关的模块,如 machine, network, pycom, uos 等,它们分别提供了 WiPy 的机器级别控制,网络连接,灯光控制,操作系统接口等功能。
2、它还包含了一些通用的 MicroPython 模块,如 binascii, hashlib, math, random, struct, time 等,它们提供了一些常用的数据处理,加密,数学,随机数,数据结构,时间等功能。
3、它遵循了 MicroPython 的设计原则,即简洁,高效,可移植和兼容。

在这里插入图片描述
MicroPython的 wipy.machine.UART.any() 是一个用于返回可读取字符数的方法。它可以用来判断 UART 总线上是否有数据到达,以及是否需要进行读取操作。

wipy.machine.UART.any() 的主要特点有:

它是 wipy.machine.UART 类的一个方法,需要先创建一个 UART 对象,然后调用该方法。
它的返回值是一个整数,表示可以在不阻塞的情况下读取的字符数。
如果没有可用字符,则返回 0,如果有字符,则返回正数。
即使有多个字符可供读取,该方法也可能返回 。要更复杂地查询可用字符,请使用 select.poll 方法。

wipy.machine.UART.any() 的应用场景有:

实现非阻塞的数据读取。通过调用该方法,可以避免在没有数据时等待或超时,提高程序的效率和响应性。
实现数据的缓冲和处理。通过调用该方法,可以根据可用字符的数量来决定是否进行数据的缓冲和处理,避免数据的丢失或错误。
实现数据的分帧和解析。通过调用该方法,可以根据可用字符的数量来判断数据帧的开始和结束,以及进行数据帧的解析和校验。

以下是 MicroPython 的 wipy.machine.UART.any() 几个实际运用程序案例:

案例一:实现非阻塞的数据读取

from machine import UART
uart = UART(0, 9600) # 创建并初始化 UART 对象
while True:
    if uart.any(): # 如果有可读取字符
        data = uart.read() # 读取所有可用字符
        print(data) # 打印数据
    # do other things

案例二:实现数据的缓冲和处理

from machine import UART
uart = UART(0, 9600) # 创建并初始化 UART 对象
buffer = b'' # 创建一个空字节缓冲区
while True:
    n = uart.any() # 获取可读取字符数
    if n > 0: # 如果有可读取字符
        buffer += uart.read(n) # 将读取到的字符追加到缓冲区
    if len(buffer) > 100: # 如果缓冲区长度超过100字节
        process(buffer) # 处理缓冲区中的数据
        buffer = b'' # 清空缓冲区

案例三:实现数据的分帧和解析

from machine import UART
uart = UART(0, 9600) # 创建并初始化 UART 对象
frame = b'' # 创建一个空字节帧
while True:
    n = uart.any() # 获取可读取字符数
    if n == 0: # 如果没有可读取字符
        if frame: # 如果帧不为空
            parse(frame) # 解析帧中的数据
            frame = b'' # 清空帧
    elif n == 1: # 如果有一个可读取字符
        char = uart.read(1) # 读取一个字符
        if char == b'\x7E': # 如果是帧起始符(假设为0x7E)
            frame = char # 将帧设为该字符
        elif frame: # 如果帧不为空
            frame += char # 将字符追加到帧中
    else: # 如果有多个可读取字符
        frame += uart.read(n) # 将所有字符追加到帧中

案例四:读取串口数据并处理:

import machine

# 初始化UART
uart = machine.UART(1, baudrate=9600, pins=("P3", "P4"))

# 读取串口数据并处理
while True:
    if uart.any():
        data = uart.read(1)  # 读取一个字节
        process_data(data)

在这个示例中,我们使用uart.any()方法检查UART接收缓冲区中是否有可用的数据。如果有数据可用,我们使用uart.read()方法读取一个字节的数据,并将其传递给process_data()函数进行处理。

案例五:判断串口数据是否满足特定条件:

import machine

# 初始化UART
uart = machine.UART(1, baudrate=9600, pins=("P3", "P4"))

# 判断串口数据是否满足特定条件
while True:
    if uart.any():
        data = uart.read(1)  # 读取一个字节
        if data == b'\n':
            print("接收到换行符")

在这个示例中,我们使用uart.any()方法检查UART接收缓冲区中是否有可用的数据。如果有数据可用,我们使用uart.read()方法读取一个字节的数据,并通过判断数据是否等于换行符\n来执行特定的操作。

案例六:检查串口数据是否超过阈值:

import machine

# 初始化UART
uart = machine.UART(1, baudrate=9600, pins=("P3", "P4"))

# 检查串口数据是否超过阈值
while True:
    if uart.any() > 10:  # 阈值设为10个字节
        print("接收到超过10个字节的数据")

在这个示例中,我们使用uart.any()方法检查UART接收缓冲区中是否有可用的数据,并通过比较其返回值与设定的阈值来判断是否接收到超过10个字节的数据。

案例七:实时数据接收:使用 wipy.machine.UART.any() 可以检查串口缓冲区中是否有可用的数据。以下是一个实时接收串口数据的示例:

import machine

# 初始化 UART 对象
uart = machine.UART(1, baudrate=9600)

while True:
    if uart.any():
        data = uart.read()
        print(data)

在这个示例中,我们创建了一个 UART 对象,并通过指定串口号和波特率进行初始化。在一个循环中,我们使用 uart.any() 方法来检查串口缓冲区中是否有可用的数据。如果有数据可用,我们使用 uart.read() 方法读取数据并进行处理。这样可以实现实时接收串口数据的功能。

案例八:数据传输控制:使用 wipy.machine.UART.any() 可以控制数据传输的流程。以下是一个示例,演示如何在串口接收到特定数据后才继续执行程序:

import machine

# 初始化 UART 对象
uart = machine.UART(1, baudrate=9600)

while True:
    if uart.any():
        data = uart.read()
        if data == b'GO':
            print('开始执行任务')
            # 执行任务的代码
            break

在这个示例中,我们创建了一个 UART 对象,并通过指定串口号和波特率进行初始化。在一个循环中,我们使用 uart.any() 方法来检查串口缓冲区中是否有可用的数据。如果有数据可用,我们使用 uart.read() 方法读取数据并进行处理。如果接收到的数据是 b’GO’,则打印一条消息并执行相应的任务。

案例九:延时检测:使用 wipy.machine.UART.any() 可以在一定的时间范围内检测串口是否有数据到达。以下是一个示例,演示如何在指定时间内检测串口数据:

import machine
import time

# 初始化 UART 对象
uart = machine.UART(1, baudrate=9600)

start_time = time.ticks_ms()
timeout = 5000  # 设置超时时间为 5 秒

while True:
    if uart.any():
        data = uart.read()
        print(data)
        break

    current_time = time.ticks_ms()
    elapsed_time = time.ticks_diff(current_time, start_time)
    if elapsed_time >= timeout:
        print('超时,未接收到数据')
        break

在这个示例中,我们创建了一个 UART 对象,并通过指定串口号和波特率进行初始化。我们使用 time.ticks_ms() 方法获取当前时间,并设置一个超时时间为 5 秒。在一个循环中,我们使用 uart.any() 方法来检查串口缓冲区中是否有可用的数据。如果有数据可用,我们使用 uart.read() 方法读取数据并进行处理。如果超过了设定的超时时间,我们打印一条超时的消息。

这些示例展示了 MicroPython 中 wipy.machine.UART.any() 的用法,包括实时数据接收、数据传输控制和延时检测。根据具体的应用需求,您可以相应地调整和扩展这些示例。请注意,在使用 uart.any() 方法时,需要考虑缓冲区的大小以及适当的数据处理方式,以避免数据丢失或其他问题的发生。

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
Uart2any 调试软件用于系统串口调试及基于串口的Can总线转换器的调试。配合U2clrs使用。 Uart2any 串口调试可自动获取系统串口并可按设定的波特率、数据位、停止位、校验位发送接收数据;支持字符串方式和HEX方式;Uart2Can 串口调试可支持U2clrs的RS232接口、RS485接口、LIN总线、38kHz红外通信等接口的调试; Uart2any支持对U2clrs的基于串口的Can总线转换器的调试;可设置Can转换器波特率、滤波器模式及滤波器ID、发送指定ID及长度的标准数据帧、扩展数据帧;发送指定ID的标准远程帧、扩展远程帧;接收Can报文; Uart2any从V1.10版本开始支持Modbus设备调试功能,可读写线圈、离散输入、寄存器等;目前支持Modbus发送功能码01,02,03,04,05,06,15,16,22和23,并对返回的报文进行自动解析; Uart2any从V1.20版本开始支持LIN总线设备调试功能。Uart2any支持对U2clrs的基于串口的LIN总线转换器的调试;支持LIN总线1.x和2.0 版本;支持主从模式,可设置的主任务,单个手动或自动连续发送;数据可设置从任务响应;显示接收报文含错误报文,报文格式含时标 、ID、数据长度、数据;可指定标识数据长度;   Uart2any从V1.30版本开始支持DL645智能电表设备的调试;DL645规约用于多功能电能表的费率装置与数据终端设备进行数据交换时的物理连接和协议。Uart2any支持97版和07版规约;支持两套规约下的全部功能码的数据交互,支持数据广播,定时发送等功能;接收到的数据报文由Uart2any进行解析,并输出结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

驴友花雕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值