K210+串口通信(实测有用)

前段时间我学习了如何使用K210训练模型做目标检测,单纯的学会训练模型并没有什么用处,要把K210应用到实际中去,也就是和单片机和各类模块结合使用,你必须会使用串口通信。这篇文章将教你如何使用K210进行串口通信。


前言

学会了训练模型,就要将它应用到实际中,这就需要我们结合51单片机、32单片机等待模块一起使用,最重要的一项便是串口通信。接下来我们进入正文

一、准备

1.硬件准备

1.K210开发板
2.usb转ttl

2.软件准备

Maixpy
XCOM串口通信软件

二、串口通信

1.Maixpy

看过上一篇博客后就可以直接进入正题了,打开Maixpy,接下来我们开始写串口通信部分,这里我先和电脑通信。

2.GPIO简单介绍

先对K210的GPIO做个简单的介绍:

K210 支持每个外设随意映射到任意引脚,K210上有高速 GPIO(GPIOHS) 和通用 GPIO
在 K210 上, GPIO 有一下特征:

高速 GPIO:

高速 GPIO 为 GPIOHS,共 32 个。具有如下特点:

可配置输入输出信号
每个 IO 具有独立中断源
中断支持边沿触发和电平触发
每个 IO 可以分配到 FPIOA 上 48 个管脚之一
可配置上下拉,或者高阻

通用 GPIO:

通用 GPIO 共 8 个,具有如下特点:

8 个 IO 使用一个中断源
可配置输入输出信号
可配置触发 IO 总中断,边沿触发和电平触发
每个 IO 可以分配到 FPIOA 上 48 个管脚之一
下 GPIOHS 默认已经被使用, 程序中如非必要尽量不要使用:
在这里插入图片描述

构造函数

class GPIO(ID, MODE, PULL, VALUE)

参数
ID: 使用的 GPIO 引脚(一定要使用 GPIO 里带的常量来指定)

MODE: GPIO模式

• GPIO.IN就是输入模式

• GPIO.OUT就是输出模式

PULL: GPIO上下拉模式

• GPIO.PULL_UP 上拉

​• GPIO.PULL_DOWN 下拉

​• GPIO.PULL_NONE 即不上拉也不下拉
value
修改/读取 GPIO 引脚状态

GPIO.value([value])

[value]: 可选参数,如果此参数不为空,则返回当前 GPIO 引脚状态
如果 [value] 参数不为空,则返回当前 GPIO 引脚状态
接下来直接讲串口通信.

3.串口通信方法

头文件

from machine import UART    #导入UART模块

设置串口通信引脚(这里我设置10为TX,11为RX)

fm.register(10, fm.fpioa.UART1_TX, force=True) #10为tx接rx
fm.register(11, fm.fpioa.UART1_RX, force=True) #11为rx接tx

设置串口的波特率,数据位,停止位,奇偶校验位

uart_A = UART(UART.UART1, 115200, 8, 1, 0, timeout=1000, read_buf_len=4096)

串口发送数据(这里我发送的识别物体名称)

 uart_A.write(classes[i.classid()]+'\r\n')

将以上代码加入到你的代码里,就可以实现串口通信了

4.代码

这里放入完整代码

import sensor,image,lcd,time  #导入sensor、image、lcd、time模块
import KPU as kpu
from machine import UART
from fpioa_manager import fm

lcd.init(freq=15000000) #初始化LCD

sensor.reset()   #初始化单目摄像头
sensor.set_pixformat(sensor.RGB565) #设置帧格式
sensor.set_framesize(sensor.QVGA)   #设置帧大小
sensor.set_hmirror(0)
sensor.run(1)
task = kpu.load("/sd/yolov2.kmodel")
f=open("anchors.txt","r")
anchor_txt=f.read()
L=[]
for i in anchor_txt.split(","):
    L.append(float(i))
anchor=tuple(L)
f.close()
f=open("classes.txt","r")
lable_txt=f.read()
lable = lable_txt.split(",")
f.close()
fm.register(10, fm.fpioa.UART1_TX, force=True)
fm.register(11, fm.fpioa.UART1_RX, force=True)

uart_A = UART(UART.UART1, 115200, 8, 1, 0, timeout=1000, read_buf_len=4096)

anchor = (0.32,0.68,0.7,0.73,0.75,0.75,0.8,0.96,1.1,1.63)

sensor.set_windowing((224, 224))
#初始化yolo2网络
a = kpu.init_yolo2(task, 0.5, 0.3, 5, anchor)
classes=["apple","banana","oranges" ] #标签名称要和你训练时的标签名称顺序相同

while(True):

     img = sensor.snapshot()    #使用摄像头拍摄一张照片
     #lcd.display(img) #在液晶屏上显示一张 image

     code = kpu.run_yolo2(task, img)  #task为 kpu_load 返回的 kpu_net 对象
                                      #img为从sensor 采集到的图像
                                      #run_yolo2返回的值为kpu_yolo2_find 的列表

     if code:
         for i in code:
             a=img.draw_rectangle(i.rect()) #在图像上绘制一个矩形。此处为作为元组传递回坐标框出矩形
                                            #传回的是检测到的图像的四个坐标
             a = lcd.display(img) #在液晶屏上显示被框框框起来的image

             for i in code:
                 lcd.draw_string(i.x(), i.y(), classes[i.classid()], lcd.RED, lcd.WHITE)

                 lcd.draw_string(i.x(), i.y()+12, '%f'%i.value(), lcd.RED, lcd.WHITE)

                 lcd.draw_string(50, 200,str(b), lcd.RED, lcd.WHITE)

                 lcd.draw_string(110, 200,str(c), lcd.RED, lcd.WHITE)

                 uart_A.write(classes[i.classid()]+'\r\n')

     else:
         a = lcd.display(img) #如果没有识别出物体,则继续呈现图像
uart_A.deinit()
del uart_A
a = kpu.deinit(task) #反初始化。kpu_load 返回 kpu_net 对象

运行以上代码选择正确的com接口你会看到
请添加图片描述
当然这段代码你直接拿去可能不能用,因为SD卡里的文件名称,模型名称不一样,修改一下就可以使用,如果你需要坐标等等,直接做对应修改即可。

总结

通过这篇文章相信大家已经掌握了K210的串口通信,然后你可以用K210去做一些小的项目,我用K210做了两个小项目,一个是基于K210的yolov2的口罩检测系统、一个是基于K210的垃圾分类,这两个小的项目我会在写一篇博客将他们分享出来。

版权声明:本文为CSDN博主「我与nano」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_51963216/article/details/121104436

生成海报
点赞 0

我与nano

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

基于8051单片机实现电子时钟+数字秒表设计

概述 电子时钟是一种利用数字电路来显示秒、分、时的计时装置,与传统的机械钟相比,它具有走时准确、显 示直观、无机械传动装置等优点,因而得到广泛应用。随着人们生活环境的不断改善和美化,在许

【电子系统综合实践】--2021电赛F题智能送药小车

主要内容     设计并制作智能送药小车,模拟完成在医院药房与病房间药品的送取作业。院区结构示意如图1所示。院区走廊两侧的墙体由黑实线表示。走廊地面上画有居中的红实线,并放置标识病房号的黑色数字可移动纸张。药房和近端