|
9| 4
|
[项目] 【花雕动手做】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 倍。 ![]() |
|
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 3. 串口助手设置(电脑端) 打开串口工具(如 UartAssist.exe 或 Putty) 设置串口号(如 COM3)、波特率(115200)、数据位(8)、停止位(1)、无校验 点击“打开串口”,即可与 K230 通信 YbUart 常用方法 ![]() 注意事项 串口通信必须确保波特率一致,否则会乱码或丢包 串口调试时避免同时运行 REPL 和用户程序,可能会冲突 如果串口被占用,可尝试按 Ctrl+C 中断当前程序 ![]() |
|
快速开始 打开串口助手 在配套资料的【0.开发板资料】中,双击运行 UartAssist.exe 串口助手 ![]() 打开之后,我们在①处选择USB转TTL模块在电脑中显示的串口号 一般情况下这个串口号会以CH340结尾 ![]() 最快速的判断方法是通过拔出USB转TTL和插上之后进行对比,拔出后消失的串口号就是USB转TTL的串口 ![]() ![]() 运行代码 我们打开 CanMV IDE,将 K230 连接至电脑。 按 Ctrl + N 键新建一份代码,并删除所有自动生成的代码内容 |
|
这段代码是一个完整的示例程序,用于在 CanMV K230 AI视觉识别模块 上实现串口通信功能。它展示了如何使用 Yahboom 提供的 YbUart 类,通过 UART 接口与外部设备(如电脑、其他 MCU)进行数据发送和接收。解读如下: 程序目标 初始化串口通信 向外部设备发送一条字符串消息 持续监听串口接收数据并打印到控制台 python 程序标题注释,说明这是“花雕动手做”系列教程的一部分,主题是使用 K230 模块进行串口通信。 python 引入 YbUart 类,这是 Yahboom 提供的串口通信库,封装了 UART 的初始化、发送和接收方法。 python 创建一个串口对象,并设置波特率为 115200,这是常用的高速通信速率,确保与外部设备一致。 python 使用 send() 方法发送字符串 "Hello Yahboom",并附加换行符 \n,方便串口助手或接收端识别为一条完整消息。 python 启动一个无限循环,用于持续监听串口接收数据。 python 使用 read() 方法尝试读取串口接收到的数据。默认读取长度为 128 字节以内,返回字符串或 None。 python 如果成功接收到数据,则打印到控制台,便于调试或进一步处理。 python 这行代码用于关闭串口并释放资源,但由于前面是无限循环,程序不会自动执行到这里,除非手动中断(如 Ctrl+C)。 程序流程图 [初始化串口] → [发送欢迎消息] → [进入监听循环] → [接收数据并打印] → [(理论上)关闭串口] |
|
点击CanMV IDE左下角的绿色的运行按钮 可以观察到,串口助手中接受到了K230发送的消息 ![]() 对应代码中的 然后我们尝试用串口助手向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端口)。 这个模块本质上是一个"翻译器",让使用不同通信标准的设备能够顺利交换数据。 |
沪公网安备31011502402448© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed