openmv与其他单片双向串口通信

2023-05-16

Openmv与其他单片双向串口通信


目的

为了让openmv进行阈值切换或者只运行某一部分代码,因此需要openmv与其他单片建立双向通信进行更改内部参数。

起因

openmv自带接收函数uart.read() 进行接收,但接收回来的数据类型为字符串不能用于数值的比较,需要将字符串打散转化为字符类型,因此我采用强制转换的方法,代码如下

def recive_data():
    global tmp_data
    if uart.any():        #等待接收
      t = uart.read();	  #读入数据
      tmp_data=int(t)     #强制转换为整型变量
      print(tmp_data)

注意:因为将字符串强制转换为整型,此代码只能接收以数字所建立的标志位。其他标志会引起代码报错,这也是代码的一个大bug,希望大家多多指教。


以下收发颜色捕捉的完整代码

import json
import ustruct
import sensor, image, time
from pyb import UART
thresholds = [(30, 50, 40, 90, 35, 80), # red_thresholds
              (30, 60, -80, -20, 0,40), # green_thresholds
              (10, 40, 0, 40, -80, -20)] # blue_thresholds

clock = time.clock()
uart = UART(3,115200)
uart.init(115200, bits=8, parity=None, stop=1)
def sending_data(cx,cy):
    global uart;
    #frame=[0x2C,18,cx%0xff,int(cx/0xff),cy%0xff,int(cy/0xff),0x5B];
    #data = bytearray(frame)
    data = ustruct.pack("<bbhhhhb",              #格式为俩个字符俩个短整型(2字节)
                       0x2C,                       #帧头1
                       0x12,                       #帧头2
                       int(cx), # up sample by 4    #数据1
                       int(cy), # up sample by 4    #数据2
                       int(c),                      #
                       int(R),
                       0x5B)
    uart.write(data);   #必须要传入一个字节数组
    print(cx)
    print(cy)
    print(c)
    print(R)
def sending_data1(q):
    global uart;
    #frame=[0x2C,18,cx%0xff,int(cx/0xff),cy%0xff,int(cy/0xff),0x5B];
    #data = bytearray(frame)
    data = ustruct.pack("<bbhhhhb",              #格式为俩个字符俩个短整型(2字节)
                       0x2C,                       #帧头1
                       0x12,                       #帧头2
                       int(cx), # up sample by 4    #数据1
                       int(cy), # up sample by 4    #数据2
                       int(q),                      #
                       int(40),
                       0x5B)
    uart.write(data);   #必须要传入一个字节数组

def recive_data():
    global tmp_data
    if uart.any():
      t = uart.read();
      tmp_data=int(t)
      print(tmp_data)
def compare(shu1,shu2):
   if (shu1 >= shu2):
        return shu1
   else:
        return shu2
def find_max(blobs):    #定义寻找色块面积最大的函数
   max_size=0
   for blob in blobs:
    if blob.pixels() > max_size:
        max_blob=blob
        max_size = blob.pixels()
        return max_blob
c=0
tmp_data=0
while(1):
    if(tmp_data==1):
            sensor.reset()
            sensor.set_pixformat(sensor.RGB565)
            sensor.set_framesize(sensor.QVGA)
            sensor.skip_frames(time = 2000)
            sensor.set_auto_gain(False) # must be turned off for color tracking
            sensor.set_auto_whitebal(False) # must be turned off for color tracking
            sensor.set_vflip(False)
            sensor.set_hmirror(False)
            while(1):
                img = sensor.snapshot().lens_corr(1.8)
                for blob in img.find_blobs(thresholds, pixels_threshold=300, area_threshold=300):
                    blobs=img.find_blobs(thresholds, pixels_threshold=300, area_threshold=300)
                    if blobs:#如果找到了目标颜色
                        max_b = find_max(blobs)
                        img.draw_rectangle(max_b.rect())
                        img.draw_cross(max_b.cx(), max_b.cy())
                        x = max_b.density()
                        if(x<0.6 and x>0.4):
                          c=1
                        elif(x>0.7 and x<0.8):
                          c=2
                        elif(x>0.8):
                          c=3
                        cx = max_b.cx()
                        cy = max_b.cy()
                        R  = max_b.w()
                        sending_data(cx,cy)
                recive_data()
    elif(tmp_data==2):
        sensor.reset()
        sensor.set_pixformat(sensor.RGB565)
        sensor.set_framesize(sensor.QQVGA)
        sensor.skip_frames(time = 2000)
        sensor.set_auto_gain(False) # must be turned off for color tracking
        sensor.set_auto_whitebal(False) # must be turned off for color tracking
        sensor.set_vflip(False)
        sensor.set_hmirror(False)
        while(1):
            img = sensor.snapshot()
            max_size = 0
            for c in img.find_circles(threshold = 4000, x_margin = 10, y_margin = 10, r_margin = 10,r_min = 2, r_max = 100, r_step = 2):
                    area = (c.x()-c.r(), c.y()-c.r(), 2*c.r(), 2*c.r())
                    cx=c.x()
                    cy=c.y()
                    #area为识别到的圆的区域,即圆的外接矩形框
                    statistics = img.get_statistics(roi=area)#像素颜色统计
                    print(statistics)
                    #(0,100,0,120,0,120)是红色的阈值,所以当区域内的众数(也就是最多的颜色),范围在这个阈值内,就说明是红色的圆。
                    #l_mode(),a_mode(),b_mode()是L通道,A通道,B通道的众数。
                    if 5<statistics.l_mode()<20 and 0<statistics.a_mode()<40 and 0<statistics.b_mode()<40:#if the circle is red
                       img.draw_rectangle(area, color = (255, 0, 255))
                       #sending_data(c.x(),c.y())
                       c=1
                       R=0

                       sending_data(cx,cy)
                    elif 20<statistics.l_mode()<40 and -40<statistics.a_mode()<0 and -40<statistics.b_mode()<0:
                        img.draw_rectangle(area, color = (255, 255, 0))
                        c=2
                        R=0

                        sending_data(cx,cy)
                    elif 40<statistics.l_mode()<60 and -20<statistics.a_mode()<40 and -40<statistics.b_mode()<50:
                        img.draw_rectangle(area, color = (255, 255, 0))
                        c=3
                        R=0

                        sending_data(cx,cy)
            recive_data()
    else :
            recive_data()

后续

其他单片机的接收函数只需要配置串口中断,然后在相应串口中断服务函数里面写好相应的解析函数即可,具体不在详解。发送函数只需发送0-9数字即可。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

openmv与其他单片双向串口通信 的相关文章

  • OpenMV巡线

    你向别人介绍openmv就说哦这是一个嵌入式的机器视觉模块 一个摄像头模块带有主控 xff0c 可以用Python编程 用openMV巡线 借助的是线性回归 xff0c 线性回归的意思就是找出一条直线嘛 xff0c 用最小二乘法 xff0c
  • openmv是双串口

    openmv是双串口
  • openmv与其他单片双向串口通信

    Openmv与其他单片双向串口通信 目的 为了让openmv进行阈值切换或者只运行某一部分代码 xff0c 因此需要openmv与其他单片建立双向通信进行更改内部参数 起因 openmv自带接收函数uart read 进行接收 xff0c
  • Openmv+STM32F103C8T6视觉巡线小车

    Openmv巡线 机器视觉巡线处理是参考openmv官方代码 Openmv官网源代码 xff1a book openmv cc project follow lines html 根据官网视频及教程将源码注入openmv中 小车巡的是黑线
  • openmv中模块解析

    模块解析 1 sensor摄像头模块 xff1a 包含了感光芯片与图像预处理的各项操作 sensor reset 重置并初始化OpenMV sensor set pixformat sensor RGB565 选择颜色空间与像素格式RGB5
  • 2021电赛F题之openmv巡线(附代码)

    效果展示 xff1a 出错解决方法 openmv数字识别源代码 gitee 通过使用不同阈值的方法可以得到当前区域中什么区域有红线 xff0c 对于电控而言作用类似于红外对管 xff0c 之后电控通过逻辑判断如何运动 xff0c 这就是我们
  • OPENMV配置记录(一)

    文章目录 1 刷写固件2 开始配置openmv3 图像获取与显示4 修改图像 xff0c 获取像素 xff0c 添加元素5 使用图像进行基本操作 颜色追踪6 xff0c 识别码7 模版匹配8 通过比例的方法来求解距离9 组合使用 正好回家带
  • openmv的串口传输

    import sensor image time from pid import PID from pyb import Servo from pyb import UART uartCP 61 UART 1 115200 用于电脑与OPe
  • 【DIY】基于OpenMV的STM32追球小车

    目录 xff1a 总体设计1 基础硬件DIY设计1 xff09 整体原理图2 xff09 PCB电路 2 OpenMV简单识别程序设计 与 STM32控制程序设计1 xff09 OpenMV简单识别程序设计 microPython 2 xf
  • 2019电赛--无人机题目OpenMV总结

    此文章在我的博客链接 xff1a https sublimerui top archives d508d500 html NOTES xff1a 上一篇相关博文 xff0c 准备阶段OpenMV学习笔记链接 xff1a https blog
  • openmv 自学笔记(APRILTAG标记追踪)

    由图可知 id 为5 旋转角度 为11 0 左边旋转 角度增加 正式时候调度接近0 右边旋转 角度减少 由360度 向右减少 Tx 在左边的时候 为负数 右边为正值 Ty 在上边的时候为正数 左边为负值 Tz 从远处 到近处 由负数到向正数
  • OpenMV——色块识别

    OpenMV有很多示例代码 xff0c 下面是我学习过程中有关知识的总结 目录 前言 一 阈值选择 二 代码 前言 函数RGB 255 0 0 表示的是红色 RGB 255 0 0 含义 xff1a 红色值 Red 61 255 xff1b
  • 使用OPENMV控制云台自动追踪Apriltag,测出与Apriltag距离并且通过串口发送给单片机。

    使用openmv控制云台自动跟踪Apriltag xff0c 并且将openmv与Apriltag距离通过串口发送到单片机 如果有openmv的同学直接将main py和pid py复制到flash中就可以了 注意 xff01 Aprilt
  • openmv探索_4_AprilTag标记追踪

    原理及代码 AprilTag标记追踪 空间坐标系的建立 以镜头中心为坐标系原点 xff0c 建立空间坐标系 图2 1 空间坐标系 旋转角度 xff08 参考系是上图中的坐标系 xff09 1 初始状态 图3 1 物体摆放的初始位置 上图的
  • OpenMV:21控制多个舵机(需要模块PCA9685)

    文章目录 连接代码控制单个舵机的旋转pc8596 pyservo pymain py利用两个舵机拓展板控制16个舵机 今天我们来学习下 OpenMV的舵机拓展板来控制多个舵机同时使用 如果我们想控制三个以上的舵机 xff0c 就需要用到舵机
  • OpenMV色块寻找

    OpenMV入门 xff0c 从入门到入坟 gt lt 此文章大部分内容取自OpenMV官方中文参考文档 详情看OpenMV官方中文参考文档 文章目录 一 sensor snapshot 拍一张照片二 image find blogs 查找
  • 通过Python调用OpenMV识别小球获取坐标

    OPenMV介绍 OpenMV是基于Python的嵌入式机器视觉模块 xff0c 目标是成为机器视觉界的 Arduino 它成本低易拓展 xff0c 开发环境友好 xff0c 除了用于图像处理外 xff0c 还可以用Python调用其硬件资
  • OpenMv测距(Apriltag)

    利用OpenMv测离Apriltag的距离 xff08 其他色块啥的算法都差不多 xff0c 主要是Apriltag精确一些 xff09 span class token comment 本次利用OpenMv单目测距Apriltag离摄像头
  • 毕业设计 单片机与OpenMV机器视觉目标跟踪系统

    文章目录 0 前言 课题简介 设计框架 3 openMV实现舵机定位色块STM32 3 硬件设计 4 软件设计 4 1 硬件连接 4 2 软件代码 OpenMV端 4 3 软件代码 STM32端 4 4 利用PC端测试数据数据是否发送接收正
  • 2021全国电设(F题)openmv的图像识别之数字识别

    基于openmv的图像识别 通过参加全国电子设计大赛F题总结出openmv4的数字识别 其它版本暂时没试过 欢迎交流 openmv简介 OpenMV是一个开源 低成本 功能强大的机器视觉模块 以STM32F427CPU为核心 集成了OV77

随机推荐

  • 解决mac安装完torch_geometric,import的时候报错的问题。

    问题描述 使用torch geometric官方的命令安装好了torch geometric xff0c 安装的过程非常丝滑流畅 xff0c 但是安装好了import的时候就报错OSerror 注意事项 不要用他生成的命令安装 xff1a
  • CXF内容总结

    CXF 61 XFire webservice框架 43 Celtrix ESB框架 http cxf apache org 内置jettyweb服务器 服务器端 xff1a 1 开发webservice接口 xff0c 要用 64 web
  • Could NOT find UV (missing: UV_LIBRARY UV_INCLUDE_DIR)

    cd var tmp git clone https github com libuv libuv git cd libuv autogen sh configure make make install 注 xff1a 下不来直接去网页下载
  • 【STM32】HAL库开发教程(四)—串口FIFO使用

    前言 不必害怕未知 xff0c 无需恐惧犯错 xff0c 做一个Creator xff01 本文主要介绍STM32 HAL库开发中串口 FIFO的使用 一 开发步骤 1 Cubemx配置 在左侧引脚配置栏选择目标串口号在串口模式处配置串口模
  • 【STM32】串口数据帧接收与分析处理算法

    基于对串口FIFO的通信数据帧进行接收和分析处理 xff08 关于串口FIFO使用可以参见作者另一篇博文 xff09 算法流程 xff1a 串口中断函数接收数据到FIFO 根据通信协议GetInterUARTMessage 函数对数据帧进行
  • 【STM32】HAL库开发教程(三)—定时器使用

    前言 不必害怕未知 xff0c 无需恐惧犯错 xff0c 做一个Creator xff01 本文主要介绍STM32 HAL库开发中定时器的使用 一 开发步骤 1 STM32CubeMX配置 在左侧引脚配置处勾选TIM2进行配置在TIM2模式
  • 直立车想节能——2020全国大学生智能车车竞赛经验记录之我想要直立(平衡小车串级pid调参经验)

    平衡车我相信很多电赛测控的入门的玩家都也玩过 xff0c 很多朋友们也都听说过平衡小车之家这家淘宝店铺 而串级PID也是一个经典且牛批的方案而广为人知 xff0c 所以在这样的比赛结束之后作为俩套方案都试过的我 xff0c 谈一谈平衡小车之
  • 慎用apt autoremove

    1 remove 卸载软件包 2 autoremove 卸载所有自动安装且不再使用的软件包 3 purge 卸载并清除软件包的配置 平时经常会卸载或删除一些东西 xff0c 系统也会友好提示你进行自动删除一些相关的文件 xff0c 但是有可
  • 推送镜像到DockerHub报无访问权限

    推送镜像到DockerHub 我们推送镜像到DockerHub时会遇到没有访问资源权限的问题 requested access to the resource is deni ed 这是因为dockerhub不知道是谁推送的镜像 xff0c
  • mysql5主从配置教程

    mysql5主从配置 同学们会有mysql主从配置的需求吗 xff1f 这里我给大家讲一下mysql5 7的主从配置教程 我们通过docker来安装mysql 这样会方便很多 拉取镜像 docker pull docker pull mys
  • 解决ubuntu下kazam录制视频无法在windows播放问题

    记录贴 Kazam是ubuntu下一个功能性截屏软件 xff0c 但是在使用的过程中 xff0c 发现Kazam录屏的视频能够在QQ发送 xff0c 但是只能播放 xff0c 不能下载 xff0c window下也不能播放 查找了一些资料发
  • 深入理解以太网PHY自协商及调试心得

    最近调某个phy芯片 xff0c 心态爆炸 xff0c 不过好歹最后有个好结果 自协商基本原理 自动协商模式是端口根据另一端设备的连接速度和双工模式 xff0c 自动把它的速度调节到最高的公共水平 xff0c 即线路两端能具有的最快速度和双
  • 平衡小车的资料

    根据网上平衡小车之家的资料引脚需要用 xff1a LED PA12 Key PA15 OLED RST Clr PC13 RS Clr PB4 SCLK Clr PC15 SDIN Clr PC14 ADC PA4 TIM3 PB0 PB1
  • 注解

    好处 把问题暴露在编译时期 xff1b 增强程序健壮性 xff1b 可以让JVM检查除了语法错误以外的其他的自定义检查 xff1b 位置 可以加到包 xff0c 类 xff0c 方法 xff0c 字段 xff0c 局部变量等位置 xff1b
  • 【知识图谱】课程笔记1---知识图谱简介

    1 知识图谱 知识图谱是一种基于图的数据结构 由节点 point 和边 Edge 组成 每个节点表示一个 实体 每条边为实体与实体之间的 关系 知识图谱本质上是语义网络 通过这种先验的知识网络 xff0c 让机器像人类一样可以联想 推理 它
  • 特征检测+SIFT点匹配+PNP位姿确定

    SIFT特征检测 43 FLANN点匹配 43 PNP位姿确定 软件环境 windows 10 vs2013 opencv3 1 0 43 opencv3 1 0 contrib 基本原理 1 SIFT 特征点检测 43 匹配 2 PNP位
  • STM32CUBEIDE(MX续)学习笔记(七)——FREERTOS+DMA+队列+循环数组方式进行串口收发

    一 收发主要逻辑 1 接收 xff1a 利用DMA和空闲中断一次接收一帧的不定长数据 xff0c 接收到数据后 暂停 xff08 之后分析为何要暂停而不是停止 xff09 DMA xff0c 快速利用结构体存储接收到数据的地址和长度 xff
  • C语言 malloc() + 结构体指针定义结构体变量

    之前在学习链表的过程中 xff0c 笔者认为新节点必须如下定义 xff1a struct Node p struct Node int val p pNext int main Node Node1 Node Node2 Node Node
  • Windows JDK8 安装

    Windows JDK8 安装 准备步骤安装完成 准备 准备jdk8 官网下载 xff1a https www oracle com java technologies javase javase jdk8 downloads html 根
  • openmv与其他单片双向串口通信

    Openmv与其他单片双向串口通信 目的 为了让openmv进行阈值切换或者只运行某一部分代码 xff0c 因此需要openmv与其他单片建立双向通信进行更改内部参数 起因 openmv自带接收函数uart read 进行接收 xff0c