OpenMV数据打包发送以及STM32对数据的解析(串口方式)

2023-05-16

    今天尝试了使用Openmv用串口发送数据,32接收,遇到了一些坑,但是最后还是实现了,难住我的地方并不是关于传输的代码,而是那个板子串口3不知道因为什么原因接收到的数据是错误的,这个原因正在寻找,找到了再记录。

    Python提供了便捷的将数据打包的方法。我使用的方法就是将数据以二进制的方式打包然后通过串口逐字节发送。

    struct模块的pack(fmt, v1, v2, ...)  函数提供了按照给定的格式(fmt),把数据封装成字符串(实际上是类似于c结构体的字节流)的功能,关与格式,有一个表定义了所有支持的字符及数据格式,如下:

Format

C Type

Python

字节数

x

pad byte

no value

1

c

char

string of length 1

1

b

signed char

integer

1

B

unsigned char

integer

1

?

_Bool

bool

1

h

short

integer

2

H

unsigned short

integer

2

i

int

integer

4

I

unsigned int

integer or long

4

l

long

integer

4

L

unsigned long

long

4

q

long long

long

8

Q

unsigned long long

long

8

f

float

float

4

d

double

float

8

s

char[]

string

1

p

char[]

string

1

P

void *

long

    microPython的串口使用方法也是很简单的,代码如下

uart = pyb.UART(3, 115200)  #串口3,波特率115200
uart.init(115200, bits=8, parity=None, stop=1)  #8位数据位,无校验位,1位停止位

    所以我在openmv的代码中定义了一个函数,来将传入的俩个参数打包然后通过串口发送,代码如下

def send_data_packet(x, y):
    temp = struct.pack("<bbii",                #格式为俩个字符俩个整型
                   0xAA,                       #帧头1
                   0xAE,                       #帧头2
                   int(x), # up sample by 4    #数据1
                   int(y)) # up sample by 4    #数据2
    uart.write(temp)                           #串口发送

    为什么不直接通过串口发送字符串然后使用sscanf来解析呢:串口发送字符串(ASCAII编码)的方式比较简单, 用C语言的sscanf()语句解析从语法上是完全可以的, 但是在实际工程上测试,解析不是很稳定,易丢数据。 ASCAII编码易出错,缺乏纠错功能。所以我采用二进制传输的,整数直接发送,浮点数放大去除小数位,然后以C语言的int,short,char的拆分逐8位形式逐位发送。 接收以后先计算校验累加,再重组。这种方式长期使用稳定可靠。

    这样发出来的数据(int,short型)都是低位的字节在前,比如发送整型数9,得到的数据为(0x09 0x00 0x00 0x00)

    所以32端的解析函数为

void Optical_Flow_Receive_Prepare(u8 data)
{
    /* 局部静态变量:接收缓存 */
    static u8 RxBuffer[10];
    /* 数据长度 *//* 数据数组下标 */
    static u8  _data_cnt = 0;
    /* 接收状态 */
    static u8 state = 0;

    /* 帧头1 */
    if(state==0&&data==TITLE1)
    {
        state=1;
    }
    /* 帧头2 */
    else if(state==1&&data==TITLE2)
    {
        state=2;
        _data_cnt = 0;
    }
    /* 接收数据租 */
    else if(state==2)
    {
        RxBuffer[++_data_cnt]=data;
        if(_data_cnt>=8)
        {
            state = 0;
            Data_Processing(RxBuffer,_data_cnt);
        }
    }
    /* 若有错误重新等待接收帧头 */
    else
        state = 0;
}


void Data_Processing(u8 *data_buf,u8 num)
{
	int theta_org,rho_org;
    /* 读取偏移角度原始数据  */
    theta_org = (int)(*(data_buf+1)<<0) | (int)(*(data_buf+2)<<8) | (int)(*(data_buf+3)<<16) | (int)(*(data_buf+4)<<24) ;
    theta_err = theta_org;

    /* 读取偏移尺寸原始数据 */
    rho_org = (int)(*(data_buf+5)<<0) | (int)(*(data_buf+6)<<8) | (int)(*(data_buf+7)<<16) | (int)(*(data_buf+8)<<24) ;
    rho_err = rho_org;
}

    通过这样的方式就能将Openmv计算的数据通过串口发送给32,过段时间我会做一个基于openmv+32的寻线小车,单双轨的寻线算法已经弄好了,做完以后我会发博客记录。

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

OpenMV数据打包发送以及STM32对数据的解析(串口方式) 的相关文章

  • Pixhawk-PX4固件之hellosky

    一 第一个应用程序 环境 xff1a ubuntu14 04LTS 来源 xff1a Firmware src example px4 simple app 两个文件 CMakeLists txt和px4 simple app CMakeL
  • pixhawk-px4之通过串口添加传感器应用

    前言 xff1a 看到有博客通过串口添加自定义传感器 xff0c 按照步骤做了一遍 博客 xff1a http blog csdn net msq19895070 article details 52012190 一 串口选择 Pixhaw
  • python开源项目目录结构参考

    下面列出python开源项目的通常目录结构及说明 xff1a tx 如果你使用Transifex进行国际化的翻译工作 xff0c 创建此目录 config Transifex的配置文件 PROJ NAME 按照你实际的项目名称创建目录 如果
  • 安卓开发环境搭建

    系统 xff1a windows 64位 安卓开发环境是在java jdk的基础上配合android studio 集成开发环境或者eclipse 43 Android SDK 43 ADT的形式 一 JDK安装 JDK的全称是Java S
  • Helloworld应用程序结构分析

    一 新建HelloWorld工程 1 打开 Eclipse xff0c 点击 File gt 34 New 34 gt 34 Project 34 Android Application Project 34 34 在弹出的 New And
  • Ubuntu软件包apt-get无法更新解决办法

    Ubuntu软件更新的时候报错 Reading package lists Building dependency tree Reading state information You might want to run 39 apt ge
  • 游戏开发人员需要看的书籍

    编码习惯及设计基础 程序员修炼之道 http product dangdang com 9053091 html 这本书讲解的一些设计原理很实用 对设计感兴趣的同学可以一看 推荐指数 5星 图形渲染 客户端 3D绘图程序设计 http pr
  • 【MySql】杂记

    1 mysqldump常用于MySQL数据库逻辑备份 二进制日志文件 中提供了执行mysqldump之后对数据库的更改进行复制所需要的信息 2 要显示存储过程传出的值 xff0c 需要使用show关键字 3 MySQL数据类型 decima
  • 智能车调速部分

    下载本文 xff1a http pan baidu com s 1qWAW49m 杂谈 本文是自己在整理智能车项目相关心得时所作 xff0c 与大家分享 如需转载请注明出处 xff0c 谢谢 xff01 1 1 智能车简单调速 测速 要实现
  • Linux网络编程——UDP通信 代码实现

    UDP通信 1 UDP 代码实现流程如下所示 UDP通信过程 span class token comment 服务器端 span span class token number 1 span span class token functi
  • 为什么要防止头文件多重包含

    网上有大量文章说如何防止头文件多重包含 xff0c 却从来不去说为什么要去防止头文件多重包含 xff1f 还有极少数文章讲到了头文件多重包含的危害 xff0c 但是只提到了其中一点 先把题目的结论抛出来 xff0c 防止头文件多重包含的真正
  • rtthread ulog 日志组件

    ulog 简介 日志的定义 xff1a 日志是将软件运行的状态 过程等信息 xff0c 输出到不同的介质中 xff08 例如 xff1a 文件 控制台 显示屏等 xff09 xff0c 并进行显示和保存 为软件调试 维护过程中的问题追溯 性
  • UDS_19服务学习笔记

    1 19 01 ReportNumberOfDTCBByStatusMask 服务的目的 xff1a 通过上位机定义的DTCStatus 来获取服务端与状态掩码匹配的个数 Request 19 01 43 Status Response x
  • FreeRTOS-Systick笔记

    1 在Cortem M内核中 xff0c 继承了systick的定时器 xff0c 属于NVIC的一部分 xff0c 异常类型为 15 systick是一个24位的向下计数器 2 Systick寄存器 3 如何使用该定时器 1 xff09
  • FreeRTOS-任务调度

    1 系统配置完成systick模块后 xff0c 通常下每当产生一个systick中断就会运行SysTick Handler 2 分析void xPortSysTickHandler void a 通过操作寄存器basepri关闭一些中端
  • FreeRTOS-延迟分析vTaskDelay

    void vTaskDelay const TickType t xTicksToDelay 这个函数比较简单 xff0c 主要分析prvAddCurrentTaskToDelayedList这个函数 xff1a 将该任务挂到延迟列表里面
  • 华为荣耀刷机失败,不断重启的解决办法

    如果你因为用第三方的recovery刷了官方的rom xff0c 那么就会出现不断重启的情况 xff01 解决办法就是先刷回华为官方的recovery xff0c 再通过三键强刷一开始的华为官方rom xff0c 即可成功救砖 xff01
  • FreeRTOS笔记---列表和列表项

    1 列表结构体 xff1a typedef struct xLIST listFIRST LIST INTEGRITY CHECK VALUE 用来检查数据的完整性 configLIST VOLATILE UBaseType t uxNum
  • FreeRTOS学习笔记-----队列

    1 创建队列 define xQueueCreate uxQueueLength uxItemSize xQueueGenericCreate uxQueueLength uxItemSize
  • Autosar CAN通讯——CANSM

    关于CANSM参考 xff1a https zhuanlan zhihu com p 126073070

随机推荐

  • UDS一些时间参数

    最近在做 xff21 xff55 xff54 xff4f xff53 xff41 xff52 诊断 xff0c 发现在诊断中有一些时间参数需要配置 xff08 其实这个时间参数 xff21 xff55 xff52 xff4f xff53 x
  • sql server 数据库开发 知识点

    sql server 数据库开发 1 含义 xff1a 数据库设计实际上就是规划和结构化数据库中的数据对象以及这些数据对象之间关系的过程 E R图组成包括 xff1a 矩形表示实体集 椭圆表示属性 菱形表示关系 直线用来连接实体集与属性 x
  • Activiti学习笔记一 工作流基本概念

    最近刚接触流程引擎这一概念 xff0c 对Activiti进行学习 xff0c 感觉正在入门中 xff0c 整理下自己的学习笔记把 xff01 1 xff1a 工作流的概念 工作流 Workflow xff0c 就是 业务过程的部分或整体在
  • Activiti学习笔记六 流程实例 任务 执行对象控制流程执行

    上一篇我们看了流程定义 xff0c 我们接下来看一下流程实例 xff0c 任务 xff0c 和执行对象 流程实例 任务的执行 1 流程图 2 部署流程定义 private final ProcessEngine processEngine
  • datetimepicker 控件验证问题

    34 baseStudents activistTime 34 trigger 39 blur 39 validators notEmpty message 39 确定积极分子时间不能为空 39 span class hljs tag lt
  • eclipse中SVN分支合并到主干

    在项目开发中 xff0c 需要添加一些新的功能 xff0c 但是又不想影响到其他开发人员的项目进度 xff0c 所以决定使用SVN分支进行开发 xff0c 分支开发完毕后再合并到主干 本文介绍如何在eclipse中合并分支到主干 要想将分支
  • 阿里云服务器

    一年多之前 xff0c 也就11年5月份的样子 xff0c 阿里云云服务器产品线终于上线了 但那时候 xff0c 国内完全没有能称得上云服务器的 xff0c 很多小公司就是搞个VPS就叫云服务器了 以至于阿里云云服务器刚出来的时候 xff0
  • 双控机制信息化系统管理平台建设的趋势和必要性

    什么是安全双控体系 xff1f 双控体系即风险分级管控和隐患排查治理双重预防机制 xff0c 目的是对生产经营单位内的所有安全隐患进行系统性的全面排查 xff0c 结合相关安全隐患的危险程度 发生的可能性以及带来的严重后果进行分级别的管控
  • mac 下 使用 iterm2 配置及快键键使用

    mac 下 使用 iterm2 配置及快键键使用 标签 xff08 空格分隔 xff09 xff1a mac 之前介绍过一篇关于mac 下使用和配置 iterm2的blog 今天这篇稍微详细一点介绍 并且搭配 zsh zsh 会单独开一篇博
  • 登录报错后,状态码是401并弹出登录框

    前后端分离的项目 xff0c 登录失败后会弹出一个非前端页面登录框 这是因为登录失败 xff0c 返回的响应表头里添加了WWW Authenticate属性 WWW Authenticate Basic realm 61 34 oauth2
  • 解决secureCRT账号密码正确,无法连接服务器,那大概因为不支持新的密钥交换算法

    连接比较新版本的linux类服务器 xff0c 是否出现下面这些问题 xff1f 或者是openstack新建centos7镜像的时候 xff0c 无法连接新创建的centos7系统 我百度或者谷歌好像都没有找到答案啊 xff0c 所以才写
  • 树莓派SSH连接-SSH服务安装与开机自动启动

    1 SSH连接 SSH连接比Telnet远程桌面连接使用更为安全 xff0c 已经成为行业标准 使用SSH连接树莓派 xff0c 可以对树莓派进行远程控制与编程开发 xff0c 在没有桌面环境的条件下使用SSH连接是非常合适的选择 第2节和
  • 【VSCode Git】stage和stash的区别

    VSCode Git stage和stash的区别 问题来源 用vscode提交变更的文件时 xff0c 会发现2个相似的选项 Stage Changes 和 Stash Changes xff0c 乍一看不知道用哪个 xff0c 它们有什
  • canal文档

    简介 github地址 canal k n l xff0c 译意为水道 管道 沟渠 xff0c 主要用途是基于 MySQL 数据库增量日志解析 xff0c 提供增量数据订阅和消费 canal 工作原理 canal 模拟 MySQL slav
  • 自然拼读与词根词缀简版

    词根词缀 词根词缀重点 1 ab abs 表示远离 或否定 2 ac acr 表示尖 xff0c 酸 xff1b 3 aer aero 表示空气 xff0c 天空 4 am 表示爱 5 ambi ambul 表示周围 xff1b 6 ani
  • MySQL递归查询上下级菜单

    正文 在传统的后台管理系统里面经常会需要展示多级菜单关系 xff0c 今天我们来学一下如何使用一条SQL语句展示多级菜单 现在我们有一张corpinfo单位表 xff0c 里面有一个belong字段指向上级单位 xff0c 首先来看一下现在
  • 基于ESP32双无刷FOC电机的瓦力平衡机器人(2)

    恍恍惚惚中 xff0c 感觉瓦力已经慢慢悠悠的向我走来 xff0c 看了他的孤独 xff0c 感觉自己的也就不算什么了 断断续续搞了差不多两周的时间 xff0c 总算是把这些底层模块都调通了 xff08 虽然还完全看不出任何瓦力的影子 xf
  • 嵌入式 职位描述 职位要求

    来于智联招聘 前程无忧 xff0c 有关工作经验 xff0c 管理经验 xff0c 学历一并删掉 xff0c 只剩职位描述 职位要求 看看自己还缺些什么 嵌入式软件工程师 关专业 xff0c 本科或以上学历 xff1b 2 基础扎实 xff
  • 信道脉冲响应CIR

    博客写作技巧 xff1a 遇到的问题 如何解决问题 需要那种帮助 信道脉冲响应 xff1a CIR 问题 xff1a 场强测量系统需要获取场强和信道信息 xff0c 那么CIR是什么 xff1f 如何利用CIR反映信道特性 xff1f 解决
  • OpenMV数据打包发送以及STM32对数据的解析(串口方式)

    今天尝试了使用Openmv用串口发送数据 xff0c 32接收 xff0c 遇到了一些坑 xff0c 但是最后还是实现了 xff0c 难住我的地方并不是关于传输的代码 xff0c 而是那个板子串口3不知道因为什么原因接收到的数据是错误的 x