OpenMV串口通讯详解

2023-10-27

官方教程:串口通讯上串口通讯下OpenMV的Uart类函数介绍

目录

材料准备

官方示例代码解析

UART()函数介绍 

usart.write()函数介绍 

time.sleep_ms(x)函数介绍 

自己写的代码加深理解

usart.any()介绍

 uart.read()介绍

总结


材料准备

需要准备材料,四根杜邦线,一个USB转TTL模块(冤大头可以买官方串口调试模块),一根安卓数据线(注意:是数据线,不是充电线,有些充电线不能进行数据传输)。

上面是我买的Usb转TLL模块,VCC接VIN,GND接GND,TXD接P5,RXD接P4。

官方示例代码解析

之后就是代码介绍。

import time
from pyb import UART

# Always pass UART 3 for the UART number for your OpenMV Cam.
# The second argument is the UART baud rate. For a more advanced UART control
# example see the BLE-Shield driver.
uart = UART (3, 19200)

while(True):
    uart.write("Hello World!\r")
    time.sleep_ms(1000)

UART()函数介绍 

上面是OpenMV IDE中的官方示例,用于OpenMV发送数据。因为OpenMV只引出来串口3,所以必须是UART(3,x)。x 是波特率,可更改。

usart.write()函数介绍 

usart.write():发送一个字节出去。可以理解为stm32串口重映射的时候,用printf发送数据。

time.sleep_ms(x)函数介绍 

time.sleep_ms(x):x为延时的时间,单位为毫秒。此处延时1000毫秒,也就是1秒。

自己写的代码加深理解

我在此写了一个函数,意思是只有上位机发送字符‘0’的时候,OpenMV才可以向上位机发送一次数据。

import time
from pyb import UART


uart = UART(3, 9600)  #初始化串口3,波特率为9600(注意:上位机记得也配置成9600)

while(True):
    if uart.any():                          #判断是否接收到数据
        a = uart.read(1).decode()           #uart.read()为一个字节串,加.decode() 变成字符串
        print(a)                            #在OpenMV的串行终端中打印
        if a == '0':                        #如果接收达字符0
            b = 1
            print('OK')                     #在串行终端中显示OK
        elif b==1:     
            uart.write("Hello World!\r")    #向上位机发送数据
            uart.write(a)
            b=0

usart.any()介绍

首先,我们分析函数usart.any()。作用就是,判断OpenMV是否接收到了数据。如果接收到了数据,那么接收到几个数据,就返回几(比如接收到2个字符,返回2。接收到一个字符,返回1)。没有接收到数据返回0。与stm32的USART_GetITStatus()函数类似。不过这里不需要传入参数。

这个时候有人会有疑惑了。感觉这个usart.any()作用也不大呀。但是,起始这样可以加快其他程序的运行效率。比如说,如果我们除了串口收发程序,还需要进行人脸识别。如果没有usart.any(),那么每次程序都需要浪费时间多进行一下操作。这些没有意义的操作,会影响程序运行。

        a = uart.read(1).decode()  #uart.read()为一个字节串,加.decode() 变成字符串
        print(a)
        if a == '0':
            b = 1
            print('OK')
        elif b==1:
            uart.write("Hello World!\r")
            uart.write(a)
            b=0

 uart.read()介绍

uart.read([nbytes])可以接收字符,如果我们直接使用uart.read,那么他就会将所有接收到的字符全部读取。如果设置了nbytes,他就可以设置接收到的字节数量。

但是,我们直接写 a = uart.read(1),是不可行的。如果这么写会出现你上位机明明发送了一个字符‘0’,之后你再发送除‘0’以外的其他字符,会发现上位机并没有Hello World!。这是为什么呢?因为uart.read(1)返回的是一根字节串。那么程序 if a == '0':也就一直不成立,b永远无法等于1,导致上位机不可能接收到数据。所以我们需要写成a = uart.read(1).decode()即可

import time
from pyb import UART

uart = UART(3, 9600)
b=0
while(True):
    if uart.any():
        a = uart.read(1) #uart.read()为一个字节串,加.decode() 变成字符串
        print(a)
        if a == '0':
            b = 1
            print('OK')
        elif b==1:
            uart.write("Hello World!\r")
            uart.write(a)
            b=0

总结

这个时候,你会说我还几个函数没有啊。其实那几个都差不多,我们只需要掌握uart = UART(3, 9600)进行初始化;uart.any()判断是否有数据接收;uart.read()接收数据;uart.write()发送数据,这四个函数即可。

只要掌握了这四个函数,我们就能利用OpenMV很好的与单片机进行交互。

最后,说明一下,我使用的是野火的串口助手。遇到了一个问题,uart.readline()是读取一行数据。我尝试下面代码,用野火的串口助手发送”123“,发现串行终端的数据是

1

2

3

说明野火的串行助手发送的123,OpenMV并没有识别成一行数据。所以我建议少用uart.readline()  。建议使用a = uart.read(1).decode(),这样防止出现异议。反正我们与OpenMV进行交互,一个字符控制就行。比如像我上面写的,0表示单片机开始发送有用数据。

a=uart.readline()  
print(a)

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

OpenMV串口通讯详解 的相关文章

  • 永恒话题,编程语言的选择

    当编程初学者要选择编程语言时 可以像选择一家餐厅一样 下面是一些建议 像选择美食一样选择编程语言 想象你是个美食家 编程语言就是菜单上的各种美食 先思考你的目标和口味偏好 是想开发网页 那就选择前端语言如HTML CSS和JavaScrip
  • 哈希(Hash)和哈希树(Merkle tree)

    哈希函数 英语 Hash function 又称散列函数 是一种从任何一种数据中创建小的数字 指纹 的方法 散列函数把消息或数据压缩成摘要 使得数据量变小 将数据的格式固定下来 该函数将数据打乱混合 重新创建一个叫做散列值 哈希值 hash
  • 白菜板裸机程序转换成智龙板PMON引导程序

    裸机程序转换成PMON引导程序 根据勤为本 gitee 上的龙芯1C 裸机程序 应用于白菜板 修改 Makefile 和 ld script 和 start s 使之应用于智龙开发板 1 替换修改文件 1 1 make与ld script

随机推荐

  • python 编码规范 Style Guide for Python Code

    目录 python 编码规范简述 编码规范的好处 PEP Python Enhancement Proposals 简介 规范基本内容 代码的整体布局 缩进与空格 制表符 隐式换行 悬挂缩进 行最大长度 运算符与换行 代码之间的空行 导入的
  • vue、uniapp调试工具【vueDevTools】

    点击下载
  • 【GD32篇】CAN总线入门教程——实现数据收发

    本文主要介绍CAN总线的软件配置 1 简介 CAN 总线协议已经成为汽车计算机控制系统和嵌入式工业控制局域网的标准总线 并且拥有以 CAN 为底层协议专为大型货车和重工机械车辆设计的 J1939 协议 近年来 它具有的高可靠性和良好的错误检
  • 算法与数据结构可视化网站

    今天画B 树用到了 算法与数据结构可视化网站 https www cs usfca edu galles visualization Algorithms html
  • iOS自定义转场动画

    如果你在开发中遇到需求 需要实现各种各样的转场动画 那么你可以看看这篇文章 当然 本文并没有实现各种各样的花式转场动画 而是实现了一种思路 抛砖引玉 希望你在看了本文之后能举一反三 随心所欲的定制自己喜欢的转场动画 注意这里讲的实现仅仅支持
  • Python基础学习04--字符串

    注释 单行注释 gt 以井号 开头 可以单独行 也可以在某行代码后边 多行注释 块注释 gt 多行代码或者内容 以三个连续单引号或双引号开始和结束 中间任何内容都忽略 我写了这么多 会不会打印出来 print 第1个 Hello World
  • ctfshow RCE极限挑战 wp

    这五题都做出来 真的不容易呀 最终终于是在比赛结束以前全部做完了 拿到了十几块钱 是一个星期的早餐了 嘿嘿嘿嘿 哎 不过对于 自增的理解可以说是提升很多很多 这里主要讲的自增 主要详细讲解他是怎么用的 目录 基本 题目详解 RCE挑战1 R
  • python第五章课后答案加注释_Python自然语言处理第五章分类标注词汇_关于自然语言处理的问题...

    optioninfo dynamic ture static true simplifiedDisplay newEdition newCard ifIcon img link https img alicdn com tfs TB1XY8
  • 比较两个二叉树是否相同

    也许你看过书 也许你背过代码 都不重要 重要的是 你能将你看过的变成自己的想法 然后实现它 不在其他代码的阴影下活着 让你的代码舞动起来 也许代码可能看起来有点不简洁 思想 可以按照递归的思路进行 左子树是否相等 右子树是否相等进行遍历 b
  • Eth-Trunk链路聚合

    一 链路聚合原理 1 1 原理简述 链路聚合能够提高链路带宽 增强网络可用性 支持负载分担 链路聚合是把两台设备之间的多条物理链路聚合在一起 当做一条逻辑链路来使用 这两台设备可以是一对路由器 一对交换机 或者是一台路由器和一台交换机 一条
  • Stm32 简单实现软件调用bootloader

    最近做了个密封的设备 由于只有一个接口 该接口连接usb otg 没有串口芯片进行复位操作导致烧录相当麻烦 如果自己做IAP又会挤占那可怜的ram空间 受IAP原理触发 想到可以通过跳转的方式进入系统储存器 通过查阅手册可以发现BootLo
  • 数据库inset update返回值正常,但是数据却没有更新

    今天碰到了这件怪事 我找了好久没发现问题 从数据库用户权限到源码都看了 也没发现问题 愁了一天555 后来发现是加了事务没提交 心态崩了
  • @RabbitListener详解

    RabbitListener 是用于在 Spring AMQP 中消息监听的注解 它允许在 Spring 应用程序中声明消息监听器 在使用 RabbitListener 注解的方法上 可以接收来自 RabbitMQ 队列的消息 这些方法可以
  • 螺杆真空泵安装流程图_无油干式真空泵的选型

    无油干式真空泵有着空前的节能与环保优势 更代表未来泵业发展的一种趋势 而众多的干式无油真空泵有着不同真空参数和不同的功能区别 如何根据自身工艺特点选择那种干式无油真空泵的型号 就首先了解各种不同类型干式无油真空泵的选型知识 这样做出的选择才
  • 如何在群晖NAS中使用cpolar内网穿透

    如何在群晖nas中使用cpolar内网穿透 文章目录 如何在群晖nas中使用cpolar内网穿透 今天 我们来为大家介绍 如何在群晖系统中 使用图形化界面的cpolar cpolar经过图形化改造后 使用方法已经简便了很多 基本与其他应用软
  • vue3浏览器报错解决Uncaught runtime errors

    我们只需要在项目 vue config js 加上如下配置即可 module exports defineConfig devServer client overlay false
  • linux 内核启动参数

    Linux 内核引导选项简介 作者 金步国 版权声明 本文作者是一位开源理念的坚定支持者 所以本文虽然不是软件 但是遵照开源的精神发布 无担保 本文作者不保证作品内容准确无误 亦不承担任何由于使用此文档所导致的损失 自由使用 任何人都可以自
  • linux 读写锁应用实例

    使用读写锁实现四个线程读写一段程序的实例 共创建了四个新的线程 其中两个线程用来读取数据 另外两个线程用来写入数据 在任意时刻 如果有一个线程在写数据 将阻塞所有其他线程的任何操作 include
  • 服务器系统一键功能安装,一键安装服务器系统

    一键安装服务器系统 内容精选 换一换 公有云平台提供了一键式重置密码功能 弹性云服务器的密码丢失或过期时 如果您的弹性云服务器提前安装了一键式重置密码插件 则可以应用一键式重置密码功能 给弹性云服务器设置新密码 该方法方便 有效 建议您成功
  • OpenMV串口通讯详解

    官方教程 串口通讯上 串口通讯下 OpenMV的Uart类函数介绍 目录 材料准备 官方示例代码解析 UART 函数介绍 usart write 函数介绍 time sleep ms x 函数介绍 自己写的代码加深理解 usart any