8浏览
查看: 8|回复: 4

[项目] 【花雕动手做】CanMV K230 AI 视觉识别模块之实现串口通信

[复制链接]
【花雕动手做】CanMV K230 AI 视觉识别模块之实现串口通信图1

什么是 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 视觉识别模块之实现串口通信图2

驴友花雕  中级技神
 楼主|

发表于 3 小时前

【花雕动手做】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
  1. from ybUtils.YbUart import YbUart
  2. # 初始化串口,波特率 115200
  3. uart = YbUart(baudrate=115200)
  4. # 发送数据
  5. uart.send("Hello from K230!\n")
  6. # 接收数据(最多读取128字节)
  7. data = uart.read(128, decode=True)
  8. if data:
  9.     print("接收到数据:", data)
  10. # 关闭串口(可选)
  11. uart.deinit()
复制代码

3. 串口助手设置(电脑端)
打开串口工具(如 UartAssist.exe 或 Putty)
设置串口号(如 COM3)、波特率(115200)、数据位(8)、停止位(1)、无校验
点击“打开串口”,即可与 K230 通信

YbUart 常用方法

【花雕动手做】CanMV K230 AI 视觉识别模块之实现串口通信图2

注意事项
串口通信必须确保波特率一致,否则会乱码或丢包
串口调试时避免同时运行 REPL 和用户程序,可能会冲突
如果串口被占用,可尝试按 Ctrl+C 中断当前程序

【花雕动手做】CanMV K230 AI 视觉识别模块之实现串口通信图1

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 3 小时前

【花雕动手做】CanMV K230 AI视觉模块之实现串口通信

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

【花雕动手做】CanMV K230 AI 视觉识别模块之实现串口通信图1

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

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

【花雕动手做】CanMV K230 AI 视觉识别模块之实现串口通信图2


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

【花雕动手做】CanMV K230 AI 视觉识别模块之实现串口通信图3

【花雕动手做】CanMV K230 AI 视觉识别模块之实现串口通信图4

运行代码
我们打开 CanMV IDE,将 K230 连接至电脑。

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

  1. #【花雕动手做】CanMV K230 AI 视觉识别模块之实现串口通信
  2. # 导入亚博智能串口通信库
  3. # (Import Yahboom UART communication library)
  4. from ybUtils.YbUart import YbUart
  5. # 创建串口实例,设置波特率为115200
  6. # (Create UART instance with baud rate set to 115200)
  7. # 波特率是指每秒传输的比特数,115200是常用的高速通信速率
  8. # (Baud rate refers to bits per second, 115200 is a commonly used high-speed communication rate)
  9. uart = YbUart(baudrate=115200)
  10. # 发送数据到连接的设备
  11. # (Send data to the connected device)
  12. # 发送字符串"Hello Yahboom"并附加换行符
  13. # (Send the string "Hello Yahboom" with a newline character)
  14. uart.send("Hello Yahboom\n")
  15. # 无限循环,持续监听串口数据
  16. # (Infinite loop to continuously monitor serial port data)
  17. while True:
  18.     # 读取串口接收到的数据
  19.     # (Read data received from the serial port)
  20.     # 如果没有数据,将返回None或空字符串
  21.     # (If no data is available, it will return None or an empty string)
  22.     data = uart.read()
  23.     # 检查是否接收到数据
  24.     # (Check if data was received)
  25.     if data:
  26.         # 将接收到的数据打印到控制台
  27.         # (Print the received data to the console)
  28.         print(data)
  29. # 注意:由于上面的无限循环,这段代码实际上永远不会执行
  30. # (Note: Due to the infinite loop above, this code will never execute)
  31. # 关闭串口,释放资源
  32. # (Close the UART and release resources)
  33. uart.deinit()
复制代码



回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 3 小时前

【花雕动手做】CanMV K230 AI 视觉识别模块之实现串口通信

这段代码是一个完整的示例程序,用于在 CanMV K230 AI视觉识别模块 上实现串口通信功能。它展示了如何使用 Yahboom 提供的 YbUart 类,通过 UART 接口与外部设备(如电脑、其他 MCU)进行数据发送和接收。解读如下:

程序目标
初始化串口通信
向外部设备发送一条字符串消息
持续监听串口接收数据并打印到控制台

python
  1. #【花雕动手做】CanMV K230 AI 视觉识别模块之实现串口通信
复制代码

程序标题注释,说明这是“花雕动手做”系列教程的一部分,主题是使用 K230 模块进行串口通信。

python
  1. # 导入亚博智能串口通信库
  2. from ybUtils.YbUart import YbUart
复制代码

引入 YbUart 类,这是 Yahboom 提供的串口通信库,封装了 UART 的初始化、发送和接收方法。

python
  1. # 创建串口实例,设置波特率为115200
  2. uart = YbUart(baudrate=115200)
复制代码

创建一个串口对象,并设置波特率为 115200,这是常用的高速通信速率,确保与外部设备一致。

python
  1. # 发送数据到连接的设备
  2. uart.send("Hello Yahboom\n")
复制代码

使用 send() 方法发送字符串 "Hello Yahboom",并附加换行符 \n,方便串口助手或接收端识别为一条完整消息。

python
  1. # 无限循环,持续监听串口数据
  2. while True:
复制代码

启动一个无限循环,用于持续监听串口接收数据。

python
  1.     # 读取串口接收到的数据
  2.     data = uart.read()
复制代码

使用 read() 方法尝试读取串口接收到的数据。默认读取长度为 128 字节以内,返回字符串或 None。

python
  1.     # 检查是否接收到数据
  2.     if data:
  3.         # 将接收到的数据打印到控制台
  4.         print(data)
复制代码

如果成功接收到数据,则打印到控制台,便于调试或进一步处理。

python
  1. # 注意:由于上面的无限循环,这段代码实际上永远不会执行
  2. # 关闭串口,释放资源
  3. uart.deinit()
复制代码

这行代码用于关闭串口并释放资源,但由于前面是无限循环,程序不会自动执行到这里,除非手动中断(如 Ctrl+C)。

程序流程图
[初始化串口] → [发送欢迎消息] → [进入监听循环] → [接收数据并打印] → [(理论上)关闭串口]


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 3 小时前

【花雕动手做】CanMV K230 AI 视觉识别模块之实现串口通信

点击CanMV IDE左下角的绿色的运行按钮
可以观察到,串口助手中接受到了K230发送的消息

【花雕动手做】CanMV K230 AI 视觉识别模块之实现串口通信图1


对应代码中的

  1. uart.send("Hello Yahboom\n")
复制代码

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

【花雕动手做】CanMV K230 AI 视觉识别模块之实现串口通信图3

观察到CanMV IDE的串行终端中有如下输出

【花雕动手做】CanMV K230 AI 视觉识别模块之实现串口通信图2

这里有几个常见的问题:
(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端口)。
这个模块本质上是一个"翻译器",让使用不同通信标准的设备能够顺利交换数据。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail