串口通信

实验环境

亚博智能 K230 视觉识别模块
固件版本:CanMV_K230_YAHBOOM_micropython_V1.3.2.img.gz

注1:用其它厂家的K230也可以实现,只是代码部分需要稍作修改,代码部分亚博K230用的屏幕分辨率是640x480
注2:本文摘自亚博官网K230系列的教程,此处仅作分享作用

简介

本节我们介绍通过K230的串口与上位机进行通信

这里我们需要用到一个【USB转TTL模块】以及一根【PH2.0 4Pin转杜邦散头2.54(公转母,200mm)】

因为本节教程中,我们会使用电脑作为和K230通信的设备,而现代电脑通常只有USB接口,不直接提供TTL串口,所以我们需要使用一个USB转TTL模块进行 “翻译”

接线

在这里插入图片描述

快速开始

打开串口助手

在配套资料的【0.开发板资料】中,双击运行 UartAssist.exe 串口助手

在这里插入图片描述

打开之后,我们在①处选择USB转TTL模块在电脑中显示的串口号

一般情况下这个串口号会以CH340结尾

在这里插入图片描述

最快速的判断方法是通过拔出USB转TTL和插上之后进行对比,拔出后消失的串口号就是USB转TTL的串口

在这里插入图片描述

在这里插入图片描述

运行代码

我们打开 CanMV IDE,将 K230 连接至电脑。

按 Ctrl + N 键新建一份代码,并删除所有自动生成的代码内容

复制下面的代码并粘贴到IDE中 [ 源码汇总 / 02.Basic / 05.uart.py ]

# 导入串口通信库 
# (Import Yahboom UART communication library)
from ybUtils.YbUart import YbUart

# 创建串口实例,设置波特率为115200
# (Create UART instance with baud rate set to 115200)
# 波特率是指每秒传输的比特数,115200是常用的高速通信速率
# (Baud rate refers to bits per second, 115200 is a commonly used high-speed communication rate)
uart = YbUart(baudrate=115200)

# 发送数据到连接的设备
# (Send data to the connected device)
# 发送字符串"Hello Yahboom"并附加换行符
# (Send the string "Hello Yahboom" with a newline character)
uart.send("Hello Yahboom\n")

# 无限循环,持续监听串口数据
# (Infinite loop to continuously monitor serial port data)
while True:
    # 读取串口接收到的数据
    # (Read data received from the serial port)
    # 如果没有数据,将返回None或空字符串
    # (If no data is available, it will return None or an empty string)
    data = uart.read()
    
    # 检查是否接收到数据
    # (Check if data was received)
    if data:
        # 将接收到的数据打印到控制台
        # (Print the received data to the console)
        print(data)

# 注意:由于上面的无限循环,这段代码实际上永远不会执行
# (Note: Due to the infinite loop above, this code will never execute)
# 关闭串口,释放资源
# (Close the UART and release resources)
uart.deinit()

点击CanMV IDE左下角的绿色的运行按钮

可以观察到,串口助手中接受到了K230发送的消息
在这里插入图片描述

对应代码中的

uart.send(“Hello Yahboom\n”)

然后我们尝试用串口助手向K230发送信息

在这里插入图片描述

观察到CanMV IDE的串行终端中有如下输出
在这里插入图片描述

这里有几个常见的问题:

  1. 为什么字符串是一个 b’xxxxxxxxxx (发送的内容)'的格式 ?

    答:接收到的信息默认是bytes的数据类型。可以使用.decode方法转为字符串

    注意,这里暂时不能接收中文字符

  2. 为什么逗号","变成了 “\xef\xbc\x8c” ?

    答:因为发送的时候使用的是中文的逗号,中文字符的bytes形式就是这样的。

    *更新:read方法中,设置decode=True可以正常解析大部分的中文字符了

  3. 为什么分为了两行?

    因为默认的接受缓冲区大小为128字节,超出缓冲区大小的就会作为新的一次接收

    • 缓冲区大小可以修改

常见问题 & 补充

USB转TTL模块

为什么 K230 和 电脑通信需要USB转TTL模块?

  1. 接口差异:K230的通信几口使用TTL(晶体管-晶体管逻辑)串口通信,而现代电脑通常只有USB接口,不直接提供TTL串口。
  2. 电平转换:TTL串口使用的是0V和3.3V/5V的电平标准,而USB使用不同的电平标准。USB转TTL模块可以安全地转换这些电平,防止硬件损坏。
  3. 驱动支持:USB转TTL模块内置了必要的电路和芯片(如CH340、CP2102、FTDI等),能够让电脑将USB连接识别为虚拟串口(COM端口)。

这个模块本质上是一个"翻译器",让使用不同通信标准的设备能够顺利交换数据。

关闭串口助手

在默认情况下,点击右上角关闭按键,串口助手不会彻底关闭,而是隐藏到了系统右下角托盘图标处

在这里插入图片描述

在串口助手没有完全关闭的时候,如果你重新打开了一个串口助手软件,点击【打开】,会报错串口被占用

YbUart API文档

类概述

YbUart是一个基于MicroPython的串口通信封装类,提供了简单的串口初始化、数据收发功能。

构造函数

__init__(self, baudrate=115200)

初始化串口设备。

参数:

  • baudrate (int): 串口波特率,默认115200

功能:

  • 配置GPIO9为UART1_TXD (发送引脚)
  • 配置GPIO10为UART1_RXD (接收引脚)
  • 初始化UART1设备

方法

send(text)

发送数据到串口。

参数:

  • text: 要发送的数据

read(size=128, decode=False)

从串口读取数据。

参数:

  • size (int): 读取的最大字节数,默认128字节
  • decode (bool): 是否将读取的数据解码为UTF-8字符串,默认False

返回:

  • 如果decode=True,返回解码后的字符串
  • 如果decode=False,返回原始字节数据
  • 如果没有数据可读,返回None

deinit()

关闭并释放串口设备。

使用示例

from ybUtils.YbUart import YbUart

# 创建串口实例
uart = YbUart(baudrate=115200)

# 发送数据
uart.send("Hello Yahboom\n")

while True:
    # 读取数据
    data = uart.read()
    if data:
        print(data)

# 关闭串口
uart.deinit()
Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐