史上最详细!K210 入门手把手教程:从环境搭建到基础实验(小白也能懂,报错全解决)
这篇K210入门教程提供了从硬件验证到开发环境搭建的完整流程。首先需确认SD卡能正常使用(FAT32格式),并整理必备官方资料链接。接着详细讲解CanMV开发环境的安装步骤及常见连接问题解决方法。教程包含多个基础实验:摄像头初始化、RGB灯控制、按键检测、定时器使用、触摸屏交互和SD卡文件操作,每个实验都附完整代码和报错解决方案。关键技巧包括先确保硬件正常、从小改进入手、学会解读报错信息。适合零基
作为刚接触 K210 的小白,我踩了不少坑,也整理了一套超实用的入门流程。这篇教程会从最基础的硬件验证开始,一步步教你搭环境、跑代码,遇到的报错也会帮你提前解决,跟着做就能上手!
一、先做硬件验证:确认 SD 卡能正常使用
刚拿到 K210 模块,第一步先确认 SD 卡能用,避免后续实验卡壳。操作特别简单:把 SD 卡插进模块的卡槽里,通电后如果模块能识别到 SD 卡(比如在后续代码中能读取 / 保存文件,或设备管理器里有对应提示),就说明 SD 卡没问题。如果识别不到,先排查这 3 点:
- SD 卡是否插紧了?拔下来重新插一次,确保卡完全卡进卡槽。
- SD 卡格式对不对?K210 只支持 FAT32 格式,用电脑右键格式化,选择 FAT32 再试。
- SD 卡本身是不是坏的?换一张已知能用的 SD 卡测试,排除卡的问题。

二、必备资源:K210 学习必看的官网 & 资料(直接戳链接)
新手不用到处找资料,我整理了最常用的官方资源,存好这些链接就够了:
- 勘智官方(K210 设计方):K210 是嘉楠科技(Canaan)出的 RISC-V 架构 AI 芯片,适合边缘计算、物联网和嵌入式 AI 项目,官网能看芯片参数和最新文档,链接:https://www.kendryte.com/zh/products
- CanMV 官方库文档:后面写代码要用到的 Micropython 库,函数用法都在这,链接:https://www.kendryte.com/canmv/main/canmv/library/micropython/spec/index.html
- K210 视觉识别模块资料( Yahboom ):带详细教程和例程,提取码:kaih,链接:https://www.yahboom.com/study/K210-AI-Camera
- K230 资料(如果用到 Lushan-Pi 开发板):适合进阶学习,链接:https://wiki.lckfb.com/zh-hans/lushan-pi-k230/
- 引脚图(接线必看):不知道哪个引脚接什么?看这个接线指南,链接:https://www.yahboom.com/build.html?id=6113&cid=580
- 调用自定义 Python 库教程:想自己写库复用代码?这个教程一步一步教,链接:https://www.yahboom.com/build.html?id=6120&cid=580
三、开发环境搭建:5 分钟装好 CanMV(小白也能搞定)
K210 常用 CanMV 作为开发环境,操作很简单,跟着步骤来:
- 先下载 CanMV 软件:去勘智官网(前面给的链接)找到「CanMV IDE」,根据自己的系统(Windows/macOS)下载对应版本。
- 安装软件:Windows 双击安装包,一路点「下一步」;macOS 拖到应用程序文件夹即可,不用复杂设置。
- 连接硬件:用 USB 线把 K210 模块连到电脑,电脑会自动安装驱动(如果没装,去官网下载对应驱动)。
- 测试连接:打开 CanMV,点击左上角「连接」按钮(像插头一样的图标),如果提示「连接成功」,就说明环境搭好了;如果连不上,看下面报错解决。

常见报错解决:
- 报错「找不到设备」:先检查 USB 线是不是坏的(换一根能传数据的线,别用只能充电的),再看设备管理器里有没有「串口设备」,没有的话重新装驱动。
- 报错「端口被占用」:关闭其他可能占用串口的软件(比如 Arduino、串口助手),再重新连接。
四、基础实验例程:每段代码都能直接跑,报错提前解决
下面每个实验都附完整代码,复制到 CanMV 里就能用,遇到过的报错也会标注解决方法,放心跟着做!
1.0 基础实验:打开摄像头,让画面显示在 LCD 上
这个实验是入门必备,先让摄像头跑起来,感受一下 K210 的视觉功能。
import sensor, image, time,lcd
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time = 2000)
clock = time.clock()
while(True):
clock.tick()
img = sensor.snapshot()
print(clock.fps())
lcd.display(img)
运行步骤:
- 把代码复制到 CanMV 的编辑区,保存为「camera_init.py」。
- 点击「下载」按钮(箭头图标),把代码传到 K210 里。
- 通电后,LCD 屏会显示摄像头画面,串口监视器会打印帧率。



常见报错解决:
- 报错「No module named 'lcd'」:检查是不是没接 LCD 屏?或者 LCD 屏的接线错了,对照前面的引脚图重新接线。
- 画面一直糊:把
sensor.skip_frames(time = 2000)里的 2000 改成 5000(让摄像头多等几秒稳定),或者调整摄像头的焦距(有些模块的摄像头可以旋转调焦)。
特别提醒:K210 没有自带 USB 通讯模块,用的是 USB 转串口芯片,传摄像头画面时容易占资源,导致帧率低或串口断开。解决方法:在 CanMV 里关掉「摄像头预览」(右上角预览窗口关掉),或者把代码保存为「main.py」下载到芯片里(这样不用连电脑,通电就能跑)。
1.1 基础实验:点亮 RGB 灯,实现颜色循环
RGB 灯是入门常用的外设,这个实验教你控制灯的颜色,理解引脚控制逻辑。
from modules import ybrgb
import time
# 创建 RGB 控制对象
RGB = ybrgb()
# 循环切换颜色(红、绿、蓝、白、熄灭)
while True:
RGB.set(1, 0, 0) # 红色
time.sleep(0.5)
RGB.set(0, 1, 0) # 绿色
time.sleep(0.5)
RGB.set(0, 0, 1) # 蓝色
time.sleep(0.5)
RGB.set(1, 1, 1) # 白色(全亮)
time.sleep(0.5)
RGB.set(0, 0, 0) # 熄灭
time.sleep(0.5)


运行步骤:
- 先确认 RGB 灯模块接好了(对照引脚图,VCC 接 3.3V,GND 接 GND,控制引脚接对应口)。
- 复制代码到 CanMV,下载后通电,RGB 灯会按顺序变色。
常见报错解决:
- 报错「No module named 'modules'」:没导入自定义库!去前面给的「调用自定义 Python 库教程」,把 ybrgb 库传到 K210 的「modules」文件夹里。
- 灯不亮:先检查接线是不是松了,再确认 RGB 灯的电压对不对(别接 5V,会烧灯),如果还是不亮,换个 RGB 灯模块试试。
1.2 基础实验:读取按键状态,实现按键检测
按键是常用的输入设备,这个实验教你读取按键的「按下 / 松开」状态,后面可以用来做控制(比如按一下拍照)。
from modules import ybkey
import time
# 创建按键检测对象
KEY = ybkey()
# 循环检测按键状态(每100ms)
while True:
state = KEY.is_press() # 读取按键状态(0=释放,1=按下)
print("key press:", state)
time.sleep_ms(100)

运行步骤:
- 接好按键模块(VCC 接 3.3V,GND 接 GND,信号脚接对应引脚)。
- 复制代码下载到 K210,打开串口监视器,按按键时会看到打印「key press: 1」,松开是「0」。
常见报错解决:
- 不管按不按,都显示「1」:按键模块可能接反了,或者引脚接错了,重新对照引脚图接线。
- 没反应:检查按键是不是坏的(用万用表测一下按下时有没有通),或者库没导入对(确认 ybkey 库在 modules 文件夹里)。
1.3 基础实验:用定时器实现定时触发
定时器可以让程序在指定时间自动执行任务(比如每隔 100ms 打印一句话),这个实验会教你正确配置定时器,避开常见的参数报错。
from machine import Timer
import time
# 定时器回调函数(中断中执行,避免耗时操作)
def on_timer(timer):
print("This is on_timer callback")
## 配置定时器参数
# 报错提示少两个参数
#timer = Timer(
#id=Timer.TIMER0, # 定时器ID [TIMER0~TIMER2]
#channel=Timer.CHANNEL0, # 通道 [CHANNEL0~CHANNEL3]
#mode=Timer.MODE_PERIODIC, # 模式:周期性(MODE_PERIODIC/MODE_ONE_SHOT/MODE_PWM)
#period=100, # 周期100ms
#unit=Timer.UNIT_MS, # 时间单位:毫秒(可选NS/US/MS/S)
#callback=on_timer, # 回调函数
#arg=None, # 传递给回调函数的参数
#start=True, # 立即启动定时器
#priority=1, # 中断优先级 [1~7],值越小优先级越高
#div=0 # 分频系数 [0~255]
#)
#下面的正确 能跑
timer = Timer(Timer.TIMER0, Timer.CHANNEL0,mode=Timer.MODE_PERIODIC, period=100,unit=Timer.UNIT_MS, callback=on_timer, arg=None)
# 主循环(每200ms打印一次)
last_time = time.ticks_ms()
try:
while True:
if time.ticks_ms() - last_time >= 200:
last_time = time.ticks_ms()
print("This is main loop")
except:
timer.deinit() # 程序退出时关闭定时器
del timer

运行步骤:
- 不用接额外外设,直接复制代码下载到 K210。
- 打开串口监视器,会看到每隔 100ms 打印「This is on_timer callback」,每隔 200ms 打印「This is main loop」。
常见报错解决:
- 之前报错「少两个参数」:是因为定时器参数格式错了!原来的代码把参数写在括号里分行,容易漏参数,现在改成「参数名 = 值」的格式,不会错。
- 定时器没反应:检查定时器 ID 和通道是不是对的(K210 支持 TIMER0~TIMER2,CHANNEL0~CHANNEL3),换个 ID 试试。
1.6 基础实验:读取触摸板坐标,实现触摸轨迹绘制
如果你的 K210 模块带触摸屏,这个实验教你读取触摸坐标,还能在屏上画触摸轨迹,很直观。
import touchscreen as ts
import lcd
import image
import time
# 初始化LCD和触摸板
lcd.init()
ts.init()
# 创建空白图像并添加提示文字
img = image.Image()
img.draw_string(100, 0, "Please touch the screen",
color=(0, 0, 255), # 蓝色文字
scale=2, # 字体放大
mono_space=False) # 非等宽字体
# 显示初始图像
lcd.display(img)
# 触摸状态跟踪变量
status_last = ts.STATUS_IDLE
x_last, y_last = 0, 0
def process_touch():
global status_last, x_last, y_last
while True:
# 读取触摸状态和坐标
status, x, y = ts.read()
# 状态变化时打印信息
if status_last != status:
#print(f"状态: {status}, X: {x}, Y: {y}")
print("状态: {}, X: {}, Y: {}".format(status, x, y))
status_last = status
# 绘制触摸轨迹
if status == ts.STATUS_MOVE:
img.draw_line(x_last, y_last, x, y,
color=(255, 255, 255), # 白色轨迹
thickness=3) # 线宽
elif status == ts.STATUS_PRESS:
img.draw_line(x, y, x, y, # 单点绘制
color=(255, 0, 0), # 红色起始点
thickness=5)
# 更新显示和坐标记录
lcd.display(img)
x_last, y_last = x, y
time.sleep(0.01) # 降低CPU占用
if __name__ == "__main__":
try:
process_touch()
except KeyboardInterrupt:
print("触摸实验结束")

运行步骤:
- 确认触摸屏接好(对照引脚图,别接错线),通电后下载代码。
- 用手指触摸屏幕,会看到红色的起点和白色的轨迹,串口监视器会打印触摸状态和坐标。
常见报错解决:
- 触摸没反应:先检查触摸屏接线是不是松了,再确认
ts.init()有没有写(没初始化读不到触摸),如果还是没反应,换个触摸屏试试。 - 轨迹画不出来:检查
img是不是全局变量(没加global会画在局部图像上,显示不出来),或者 LCD 初始化错了(重新写lcd.init())。
1.7 基础实验:摄像头显示 + 帧率打印(优化版)
这个实验在「打开摄像头」的基础上,增加了帧率显示(直接画在 LCD 屏上),还优化了稳定性,不容易断开。
import sensor
import lcd
import time
# 初始化LCD显示屏
lcd.init()
# 初始化摄像头
sensor.reset() # 重置摄像头
sensor.set_pixformat(sensor.RGB565) # 设置像素格式为RGB565
sensor.set_framesize(sensor.QVGA) # 设置分辨率为QVGA(320x240)
sensor.run(1) # 启动摄像头
sensor.skip_frames(10) # 跳过前10帧等待图像稳定
# 创建帧率计算时钟
clock = time.clock()
def camera_display():
try:
while True:
clock.tick() # 开始计时
img = sensor.snapshot() # 捕获图像
# 计算并显示帧率
fps = clock.fps()
#img.draw_string(0, 0, f"FPS: {fps:.1f}",
img.draw_string(0, 0, "FPS: {:.1f}".format(fps),
color=(255, 0, 0), # 红色文字
scale=2) # 放大字体
lcd.display(img) # 显示图像
#print(f"当前帧率: {fps:.1f}") # 串口输出帧率
print("当前帧率: {:.1f}".format(fps)) # 串口输出帧率
except KeyboardInterrupt:
print("摄像头显示终止")
if __name__ == "__main__":
camera_display()

运行步骤:
- 接好 LCD 屏和摄像头,下载代码后通电。
- LCD 屏左上角会显示当前帧率(比如 25.0 FPS),串口也会同步打印,能直观看到画面流畅度。
常见报错解决:
- 帧率很低(低于 10 FPS):关掉 CanMV 的摄像头预览(前面提过,占资源),或者把分辨率改成
sensor.QQVGA(160x120),帧率会变高。 - 画面有雪花:摄像头没对焦好,旋转摄像头镜头调焦,直到画面清晰;或者环境光太暗,加个补光灯。
由于K210芯片自身没有带USB通讯模块,而是使用USB转串口芯片,在传输摄像头画面时占用一定资源,导致帧率下降,并且容易丢数据,造成串口断开,所以建议禁用IDE的摄像头预览功能,或者直接下载main.py程序文件到芯片内部使用。

1.8 基础实验:SD 卡读写文件,实现图像保存和读取
这个实验教你用 SD 卡保存摄像头拍的照片,还能读取 SD 卡里的照片显示在 LCD 上,是后续做项目(比如拍照存档)的基础。
import sensor
import lcd
import image
import time
# 初始化硬件
def hardware_init():
lcd.init() # 初始化LCD
sensor.reset() # 重置摄像头
sensor.set_pixformat(sensor.RGB565) # 设置像素格式
sensor.set_framesize(sensor.QVGA) # 设置分辨率
sensor.run(1) # 启动摄像头
sensor.skip_frames(10) # 跳过初始帧
print("硬件初始化完成")
# SD卡文件操作
def sdcard_operation():
img_path = "/sd/image-1.jpg" # SD卡文件路径
try:
# 捕获并保存图像
img = sensor.snapshot()
print("正在保存图像...")
img.save(img_path) # 保存到SD卡
print("图像已保存到: {}".format(img_path))
# 读取并显示图像
print("正在读取图像...")
img_read = image.Image(img_path)
lcd.display(img_read)
print("图像显示完成")
except Exception as e:
print("操作失败: {}".format(e))
print("请检查:")
print("1. SD卡是否正确插入")
print("2. SD卡格式是否为FAT32")
print("3. SD卡是否可用")
if __name__ == "__main__":
hardware_init()
sdcard_operation()
# 保持显示5秒
time.sleep(5)
lcd.clear()
print("实验结束")

运行步骤:
- 把 SD 卡插进 K210 卡槽,接好摄像头和 LCD 屏。
- 下载代码后通电,串口会打印「硬件初始化完成」,然后自动保存图像、读取图像,LCD 会显示保存的照片。
- 实验结束后,把 SD 卡拔下来插电脑上,能看到里面多了一张「image-1.jpg」,就是刚才拍的照片。
常见报错解决:
- 报错「No such file or directory」:要么没插 SD 卡,要么路径写错了(必须是 /sd/xxx.jpg),检查路径和 SD 卡。
- 报错「Permission denied」:SD 卡是只读模式,把 SD 卡上的「写保护开关」关掉(有些 SD 卡侧面有开关,拨到另一边)。
- 保存的图像是黑的:摄像头没初始化好,把
sensor.skip_frames(10)里的 10 改成 20,让摄像头多等一会儿稳定。
五、总结:小白入门 K210 的关键技巧
- 先确认硬件没问题:SD 卡、接线、外设(RGB 灯、按键)都先测好,避免代码没错但硬件不行。
- 代码先复制跑通,再改参数:比如想让 RGB 灯亮久一点,把
time.sleep(0.5)改成time.sleep(1),慢慢熟悉函数用法。 - 遇到报错别慌:先看报错信息里的关键词(比如「No module」就是缺库,「No such file」就是路径错),对照教程里的解决方法试。
后面可以基于这些基础实验做进阶项目,比如用按键控制拍照、用触摸屏选择功能,慢慢积累就能上手复杂的 AI 项目啦!
遇到有问题可以在评论区提问哦!!!
更多推荐



所有评论(0)