【花雕动手做】CanMV K230 AI 视觉识别模块之实现串口通信
什么是 CanMV K230?
CanMV K230是一款高性价比的RISC-V边缘AI平台,凭借低功耗、强视觉处理能力和开放的开发生态,成为嵌入式AI开发的理想选择,尤其适合需要快速部署视觉与AI功能的创客、中小企业及教育场景。CanMV 是一套 AI 视觉开发平台,K230 是其核心芯片。该模块结合了图像采集、AI推理、边缘计算等能力,适合嵌入式视觉应用开发。
CanMV:类似 OpenMV 的图像处理框架,支持 Python 编程,简化视觉识别开发流程。
K230 芯片:嘉楠科技推出的 AIoT SoC,采用 RISC-V 架构,内置第三代 KPU(AI加速单元),算力高达 6 TOPS,性能是 K210 的 13.7 倍。
【花雕动手做】CanMV K230 AI视觉模块之实现串口通信
K230 串口通信可通过 MicroPython 的 YbUart 类实现,支持与电脑或其他设备进行数据收发,常用于调试、数据交互或控制指令传输。串口通信基础概念
K230 的串口通信基于 UART(通用异步收发器),通过 TX(发送)和 RX(接收)引脚与外部设备进行数据交换。常见用途包括:
与电脑串口助手通信
与其他 MCU 或传感器模块通信
串口调试输出(如 print 信息)
使用步骤概览
1. 硬件连接
使用 USB 转 TTL 模块(如 CH340)连接 K230 与电脑
K230 的 TX 接电脑的 RX,RX 接电脑的 TX,确保 共地
推荐使用 PH2.0 4Pin 转杜邦线连接串口引脚
2. MicroPython 串口代码示例
python
from ybUtils.YbUart import YbUart
# 初始化串口,波特率 115200
uart = YbUart(baudrate=115200)
# 发送数据
uart.send("Hello from K230!\n")
# 接收数据(最多读取128字节)
data = uart.read(128, decode=True)
if data:
print("接收到数据:", data)
# 关闭串口(可选)
uart.deinit()
3. 串口助手设置(电脑端)
打开串口工具(如 UartAssist.exe 或 Putty)
设置串口号(如 COM3)、波特率(115200)、数据位(8)、停止位(1)、无校验
点击“打开串口”,即可与 K230 通信
YbUart 常用方法
注意事项
串口通信必须确保波特率一致,否则会乱码或丢包
串口调试时避免同时运行 REPL 和用户程序,可能会冲突
如果串口被占用,可尝试按 Ctrl+C 中断当前程序
【花雕动手做】CanMV K230 AI视觉模块之实现串口通信
快速开始打开串口助手
在配套资料的【0.开发板资料】中,双击运行 UartAssist.exe 串口助手
打开之后,我们在①处选择USB转TTL模块在电脑中显示的串口号
一般情况下这个串口号会以CH340结尾
最快速的判断方法是通过拔出USB转TTL和插上之后进行对比,拔出后消失的串口号就是USB转TTL的串口
运行代码
我们打开 CanMV IDE,将 K230 连接至电脑。
按 Ctrl + N 键新建一份代码,并删除所有自动生成的代码内容
#【花雕动手做】CanMV K230 AI 视觉识别模块之实现串口通信
# 导入亚博智能串口通信库
# (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 K230 AI 视觉识别模块之实现串口通信
这段代码是一个完整的示例程序,用于在 CanMV K230 AI视觉识别模块 上实现串口通信功能。它展示了如何使用 Yahboom 提供的 YbUart 类,通过 UART 接口与外部设备(如电脑、其他 MCU)进行数据发送和接收。解读如下:程序目标
初始化串口通信
向外部设备发送一条字符串消息
持续监听串口接收数据并打印到控制台
python
#【花雕动手做】CanMV K230 AI 视觉识别模块之实现串口通信
程序标题注释,说明这是“花雕动手做”系列教程的一部分,主题是使用 K230 模块进行串口通信。
python
# 导入亚博智能串口通信库
from ybUtils.YbUart import YbUart
引入 YbUart 类,这是 Yahboom 提供的串口通信库,封装了 UART 的初始化、发送和接收方法。
python
# 创建串口实例,设置波特率为115200
uart = YbUart(baudrate=115200)
创建一个串口对象,并设置波特率为 115200,这是常用的高速通信速率,确保与外部设备一致。
python
# 发送数据到连接的设备
uart.send("Hello Yahboom\n")
使用 send() 方法发送字符串 "Hello Yahboom",并附加换行符 \n,方便串口助手或接收端识别为一条完整消息。
python
# 无限循环,持续监听串口数据
while True:
启动一个无限循环,用于持续监听串口接收数据。
python
# 读取串口接收到的数据
data = uart.read()
使用 read() 方法尝试读取串口接收到的数据。默认读取长度为 128 字节以内,返回字符串或 None。
python
# 检查是否接收到数据
if data:
# 将接收到的数据打印到控制台
print(data)
如果成功接收到数据,则打印到控制台,便于调试或进一步处理。
python
# 注意:由于上面的无限循环,这段代码实际上永远不会执行
# 关闭串口,释放资源
uart.deinit()
这行代码用于关闭串口并释放资源,但由于前面是无限循环,程序不会自动执行到这里,除非手动中断(如 Ctrl+C)。
程序流程图
[初始化串口] → [发送欢迎消息] → [进入监听循环] → [接收数据并打印] → [(理论上)关闭串口]
【花雕动手做】CanMV K230 AI 视觉识别模块之实现串口通信
点击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字节,超出缓冲区大小的就会作为新的一次接收
◦ 缓冲区大小可以修改
(4)为什么 K230 和 电脑通信需要USB转TTL模块?
a. 接口差异:K230的通信几口使用TTL(晶体管-晶体管逻辑)串口通信,而现代电脑通常只有USB接口,不直接提供TTL串口。
b. 电平转换:TTL串口使用的是0V和3.3V/5V的电平标准,而USB使用不同的电平标准。USB转TTL模块可以安全地转换这些电平,防止硬件损坏。
c. 驱动支持:USB转TTL模块内置了必要的电路和芯片(如CH340、CP2102、FTDI等),能够让电脑将USB连接识别为虚拟串口(COM端口)。
这个模块本质上是一个"翻译器",让使用不同通信标准的设备能够顺利交换数据。
页:
[1]