OpenMV串口通讯详解
官方教程:串口通讯上;串口通讯下;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 UARTuart = 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': #如果接收达字符0b = 1print('OK') #在串行终端中显示OKelif b==1: uart.write("Hello World!\r") #向上位机发送数据uart.write(a)b=0
usart.any()介绍
首先,我们分析函数usart.any()。作用就是,判断OpenMV是否接收到了数据。如果接收到了数据,返回1,没有接收到数据返回0。与stm32的USART_GetITStatus()函数类似。不过这里不需要传入参数。
这个时候有人会有疑惑了。感觉这个usart.any()作用也不大呀。但是,起始这样可以加快其他程序的运行效率。比如说,如果我们除了串口收发程序,还需要进行人脸识别。如果没有usart.any(),那么每次程序都需要浪费时间多进行一下操作。这些没有意义的操作,会影响程序运行。
a = uart.read(1).decode() #uart.read()为一个字节串,加.decode() 变成字符串print(a)if a == '0':b = 1print('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 UARTuart = UART(3, 9600)
b=0
while(True):if uart.any():a = uart.read(1) #uart.read()为一个字节串,加.decode() 变成字符串print(a)if a == '0':b = 1print('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)
OpenMV串口通讯详解相关推荐
- delphi 串口通信发送_STM32第五章串口通讯详解
点击上方"果果小师弟",选择"置顶/星标公众号"干货福利,第一时间送达! 串口通信是串行通信里面的异步方式.串行通信是相对于并行通信来说的.串口是一个事实存在的 ...
- STM32—串口通讯详解
串口通讯目录 物理层 协议层 USART简介 开发板与上位机的连接 代码讲解: 一.初始化结构体 二.NVIC配置中断优先级 三.USART配置函数讲解 四.传输数据的函数: 1.发送一个字节 2.发 ...
- STM32_USART 串口通讯详解
对51单片机有了解的都知道51单片机的串口通讯工作原理,我们单片机使用的电平TTL电平,为了使我们的的单片机与PC进行通信,就需要一个电平转换芯片,把TTL电平转换为USB电平(使用的USB接口,如果 ...
- c#串口通讯详解(附源码)
串口通讯 串口通讯是计算机传输数据的一种通讯方式,只不过是以比特位来传输数据的 串口通讯的相关参数 波特率: 波特率的大小代表每秒钟可以传输多少个二进制位,如波特率是9600,能每秒传输9600二进制 ...
- 51单片机串口通讯详解
串口,作为单片机程序开发中最常用.最方便,也是应用最广泛的程序调试方法:无论是作为调试工具,打印出调试信息,还是对功能模块进行通信,串口是每个单片机开发人员最常用的单片机外设. 由于大部分51单片机不 ...
- Java串口通信详解(转)
Java串口通信详解(转) 作者:denimcc 日期:2007-05-11 序言 说到开源,恐怕很少有人不挑大指称赞.学生通过开源代码学到了知识,程序员通过开源类库获得了别人的成功经验及能够 ...
- 友善之臂comtest.c串口编译程序详解 希望对大家有帮助
友善comtest.c串口编译程序详解 希望对大家有帮助 说明:armcomtest 是友善之臂为了方便测试而开发的linux 下的简易实用串口终端程 序,它使用标准的系统调用,和硬件无关.一般Li ...
- STM32串口通信详解以及通信异常或者卡死常见问题分析
STM32串口通信详解以及通信异常或者卡死常见问题分析 目录 STM32串口通信详解以及通信异常或者卡死常见问题分析 一.常见的异常问题 二.STM32的串口简介 1.串口的通讯方式 ①按数据传输方向 ...
- 串口参数详解:波特率,数据位,停止位,奇偶校验位
转载自:https://blog.csdn.net/sinat_35705952/article/details/89034455 串口参数详解:波特率,数据位,停止位,奇偶校验位 Winter_Q ...
最新文章
- XGBoost类库使用小结
- leetcode-139-单词拆分
- MySQL千万级数据JDBC插入
- SAP Spartacus routing parameter mapping介绍
- Hadoop入门(十)Mapreduce高级shuffle之Sort和Group
- 系统服务管理与控制程序(Init System/初始化系统)-- Systemd 的 Unit 配置文件详解
- 陇东学院c语言程序设计,C语言程序设计
- cns/clns搭建给clnc(udp转发)
- 2018电影票房分析-谁才是票房之王
- html插入图片在古诗右侧,古诗词配插图
- 实验五|Python 企业获利能力分析
- 高薪职位不少,这个行业为什么如此缺人才?
- sfu计算机硕士,别告诉我你了解菲莎国际学院
- Java多线程篇--基本概念
- android 状态栏显示 耳机图标显示,Android4.0-4.4 加入支持状态栏显示耳机图标方法(支持带不带MIC的两种耳机自己主动识别)...
- Java小程序:个人所得税计算(与标准个税有差距)
- 图纸打印什么时候用蓝图_cad图如何打印成施工蓝图
- Android监听电池电量
- 心跳异常检测--使用Keras,K折交叉训练CNN一维卷积
- Ubuntu下使用ROS moveit 连接ABB机器人