学习K210可以查看官方文档 MaixPy 文档简介 - Sipeed Wiki,
官网中包含了各种应用的下载地址,以及相关程序,打开后在左侧有目录,点开入门必看指南在左侧目录可以找到软件固件的下载链接,点开库函数 API 手册在左侧目录点开Maix会找到GPIO的配置方法,点开media 有摄像头屏幕以及视觉的配置方法,之后会用到比如识别数字是需要训练模型则需要MaixHub该网站来训练此文后面会有介绍
也可以选择看【K210】K210学习笔记(总)_k210与匿名飞控_欠羽的博客-CSDN博客
也可以看这个,比较简洁Maix Bit、K210超详细资料【保姆级教程】【学习与上手Maix Bit这一篇文章就够啦】_动态比特的博客-CSDN博客
也可以借鉴OPENMV的相关程序,本人感觉OPENMV的程序初学者可能更能看懂 ,以下是官网例程
也可以根据此文来准备环境,以及会有相关程序
一、硬件
1、 安装
可以点击链接看视频
[maixbit] K210 产品开箱及预览功能_哔哩哔哩_bilibili
也可以看图
maix bit打开后
然后在另一边安装LCD就可以了,LCD也可以不安装,LCD是为了在脱机运行时能显示相关内容
以下是安装完成时的样子
上电后是这样
图中两个圆圈处会有两个按键
一个是rest,一个是boot
首先按一下rst 然后一直按着boot就能把摄像头看到的显示在LCD上了
以后写程序时boot可以当作一个普通按键来使用
2、引脚
0-3号引脚上是JTAG;
4、5号引脚为默认串口;
12-14号是RGB灯;
16号引脚是BOOT键,接了10kΩ的上拉电阻;
18-20号引脚接的是麦克风;
26-28号引脚是用SPI协议实现的的读写TF card功能。
IO引脚都是3.3V,Reset引脚电压为1.8V。
二、软件
1、驱动安装
到下面这个链接选择你的板子型号来下载驱动
2、软件安装
目前我只使用到了两个软件
①是kflash_gui 这个是用来下载固件的
Releases · sipeed/kflash_gui · GitHub这个是下载链接打开之后一般选择最新版本,我现在这个是v1.8.1,选择系统对应的应用下载,我的电脑是windows系统,因此我选的是以下名称的,也可以直接点下面的链接下载,解压到一个文件夹,双击 kflash_gui.exe
(/kflsh_gui
) 即可运行
②是MaixPy IDE 这个是用来运行程序的
点开链接后直接下载.exe结尾的应该就可以,时间久了当时下的很乱有点忘了
3、固件下载
到下面这个链接可以来选择固件下载 ,点开的界面应该是版本号的选择,一般点最上面那个就可以,点开之后就可以选择固件下载了,固件为 .bin
结尾或者 .kfpkg
的文件,其中.kfpkg其实就是多个.bin文件的打包版本, 可以使用kflash_gui打包
下载站 - Sipeed此链接是用来下载固件的即上面所说的链接
更新 MaixPy 固件 - Sipeed Wiki此链接包含对固件内容的简介,打开后需往下翻查找
4、软件和MaixHub网站使用
1、MaixPy IDE
①连接K210开发板
先选择开发板
再点击 左下角的绿色的链接似的东西
连接成功后会变成以下样子
注意以下界面并不会长时间显示,如果长时间显示,那么有可能开发板没有选对
②运行程序后
可以点击此处,会弹出你所想打印的东西
点击左侧红圈处可以看到摄像头,点击右侧红圈可以放大缩小屏幕上的摄像头画面
2、kflash
打开后
第一个圈可以选择下载或者擦除,下次下载前必须要擦除之前下载在该位置的文件,或者选择擦除所有
第二个圈是选择下载的位置0x000000一般是最基础的固件储存的位置,这个数一般也不需要改,因为之后要往里面存东西一般是需要SD卡(内存卡)的
第三个圈是选择端口,要选择括号内带USB的才能下载成功
3、MaixHub
打开后是以下界面,点击开始训练就可以开始训练你的模型,点击模型库的查看可以查看别人训练好的模型,择需下载
再打开新建训练
选择图像检测
点击数据集
点击创建数据集也可以选择之前创建的数据集
创建后点击查看,然后点击上传图片
最后点击标注数据,不用对数据分组,网站会自动分的,照片的数量越多越准确
标注完所有数据后后点击最上面的模型训练,选择刚刚创建的训练任务,然后点击创建任务,选择刚刚的数据集,按照图中所示配置即可创建任务开始训练了。
最后点击部署,手动部署就可以了
5、程序
1、与stm32串口通信
K210可以使用uart1.write("a"+str(b.cx())+"b")来传输,但是传输的为字符串,所以stm32端接收到的为字符串,需要用到atoi()函数来转换
stm32接收部分具体可以看https://mp.csdn.net/mp_blog/creation/editor/130442179里程序中的串口那一部分
以下是寻找色块并发送"a色块的横坐标b"的例子
# 色块监测 例子
# 这个例子展示了如何通过find_blobs()函数来查找图像中的色块
import sensor, image, time,lcd
from fpioa_manager import fm # 从 fpioa_manager 模块中导入 引脚注册模块 fm
from machine import Timer, PWM, UART # 从 machine 模块中导入 定时器模块 Timer 脉宽调制模块 PWM 双向串行通信模块 UART
# 颜色追踪的例子,一定要控制环境的光,保持光线是稳定的。
green_threshold = (0, 10, -128, 39, -11, 122)#电赛黑色胶带
#_________________________________________________________________
# 串口的使用
# 串口1 设置 P9 RX P6 TX
fm.register(9, fm.fpioa.UART1_RX, force = True) # 配置 9 脚为 UART1_RX 强制注册
fm.register(6, fm.fpioa.UART1_TX, force = True) # 配置 6 脚为 UART1_TX 强制注册
uart1 = UART(UART.UART1, 921600, 8, 0, 1) # 设置 uart1 为 串口1 波特率 921600 数据位 8位 校验位 0位 停止位 1位
#__________________________________________________________________
lcd.init() # lcd初始化
#__________________________________________________________________
sensor.reset() # 初始化摄像头
sensor.set_pixformat(sensor.RGB565) # 格式为 RGB565.
sensor.set_framesize(sensor.QQVGA) # 使用 QQVGA 速度快一些
sensor.skip_frames(time = 2000) # 跳过2000s,使新设置生效,并自动调节白平衡
sensor.set_auto_gain(False) # 关闭自动自动增益。默认开启的,在颜色识别中,一定要关闭白平衡。
sensor.set_auto_whitebal(False) #关闭白平衡。白平衡是默认开启的,在颜色识别中,一定要关闭白平衡。
clock = time.clock() # 追踪帧率
#__________________________________________________________________
while(True):
clock.tick() # Track elapsed milliseconds between snapshots().
img = sensor.snapshot() # 从感光芯片获得一张图像
blobs = img.find_blobs([green_threshold], invert=False,left_roi = [0,0,160,240] ,area_threshold=100,merge=True)
#find_blobs(thresholds, invert=False, roi=Auto),thresholds为颜色阈值,
#是一个元组,需要用括号[ ]括起来。invert=1,反转颜色阈值,invert=False默认
#不反转。roi设置颜色识别的视野区域,roi是一个元组, roi = (x, y, w, h),代表
#从左上顶点(x,y)开始的宽为w高为h的矩形区域,roi不设置的话默认为整个图像视野。
#这个函数返回一个列表,[0]代表识别到的目标颜色区域左上顶点的x坐标,[1]代表
#左上顶点y坐标,[2]代表目标区域的宽,[3]代表目标区域的高,[4]代表目标
#区域像素点的个数,[5]代表目标区域的中心点x坐标,[6]代表目标区域中心点y坐标,
#[7]代表目标颜色区域的旋转角度(是弧度值,浮点型,列表其他元素是整型),
#[8]代表与此目标区域交叉的目标个数,[9]代表颜色的编号(它可以用来分辨这个
#区域是用哪个颜色阈值threshold识别出来的)。
if blobs:
#如果找到了目标颜色
for b in blobs:
#迭代找到的目标颜色区域
# Draw a rect around the blob.
img.draw_rectangle(b[0:4]) # rect
#用矩形标记出目标颜色区域
img.draw_cross(b[5], b[6]) # cx, cy
#在目标颜色区域的中心画十字形标记
print(b.cx())
uart1.write("a"+str(b.cx())+"b")#发送a 角度 b#注意与上面的uart1一致
lcd.display(img)#LCD显示
#print(clock.fps())
#如果断开电脑,帧率会增加