在这里,要学习OpenMV上的引脚控制,了解各个引脚的作用。

不​​同的I / O引脚有不同的特殊功能。例如,P0-P3是OpenMV Cam的SPI总线引脚,可以用来控制SPI设备。 P4-P5是OpenMV Cam的串行或I2C总线。P6是您的OpenMV Cam的ADC / DAC引脚,用于0V至3.3V的输入和输出。 P7-P8(或P7-P9)是OpenMV Cam的辅助I / O引脚。

PYB模块:

pyb``(Python) 模块提供所有的微控制器I/O功能。你只需要在你的脚本 ``import pyb 来访问它。一旦导入, 您就可以访问ADC,CAN,DAC,I2C,Pin,Servo,SPI和UART类,同时可以控制电路板的功耗。

1.LED

OpenMV上有一个RGB LED和两个红外LED。可以分别控制RGB LED的红色,绿色和蓝色部分以及两个IR LED。 要控制LED,首先导入pyb模块。然后为要控制的特定LED创建一个LED类对象:

import pybred_led = pyb.LED(1)
green_led = pyb.LED(2)
blue_led = pyb.LED(3)
ir_leds = pyb.LED(4)    #红外灯

每个LED可以调用三种方法, pyb.LED.off() , pyb.LED.on() 和 pyb.LED.toggle() 。

在这里,我尝试写了一个点灯的程序:让红灯和绿灯不断地闪烁

# Untitled - By: Jiang Yimin - 周三 3月 9 2022import sensor, image, time, pybsensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time = 2000)red_led = pyb.LED(1)
green_led = pyb.LED(2)
blue_led = pyb.LED(3)
ir_leds = pyb.LED(4)clock = time.clock()while(True):clock.tick()img = sensor.snapshot()print(clock.fps())red_led.on()time.sleep_ms(150)     #延时150msred_led.off()green_led.on()time.sleep_ms(150)     #延时150msgreen_led.off()

注意:与其他MicroPython主板不同,OpenMV Cam不支持 intensity() 方法允许PWM调光LED。我们重新使用了用于LED调光的定时器,以产生时钟源来为相机芯片供电。

最后,在脚本中使用RGB LED作为指示器。红外LED是用来夜视的。当您使用我们的红外镜头(这是一个没有红外滤镜的镜头)替换您的OpenMV的标配镜头时, 您可以打开红外灯,使您的OpenMV可以夜视。

2.GPIO控制:

OpenMV具有9个(OpenMV M4)到10个(OpenMV M7)板载通用I / O引脚。

2.1作为输入:

import pybp = pyb.Pin("P0", pyb.Pin.IN)
p.value() # Returns 0 or 1.

该 pyb.Pin() 构造函数创建一个pin对象,您将用它来控制你的OpenMV的I / O引脚。 你传递给OpenMV凸轮该字符串应该是 P ,然后OpenMV M4为 0-8 和 OpenMV M7为 0-9 。

一旦你创建了GPIO引脚,使用该 pyb.Pin.value() 方法来获得IO引脚的状态。

最后,如果需要上拉或下拉IO引脚, 传递 pyb.Pin.PULL_UP 或 pyb.Pin.PULL_DOWN 作为 pyb.Pin() 构造函数的附加参数:

p = pyb.Pin("P0", pyb.Pin.IN, pyb.Pin.PULL_UP)

2.2作为输出:

import pybp = pyb.Pin("P0", pyb.Pin.OUT_PP)
p.high() # or p.value(1) to make the pin high (3.3V)
p.low() # or p.value(0) to make the pin low (0V)

设置开漏输出:

p = pyb.Pin("P0", pyb.Pin.OUT_OD)

现在 pyb.Pin.high() 将引起引脚拉高,同时 pyb.Pin.low() 将引脚拉低。如果你需要一个引脚上的上拉电阻只需添加:

p = pyb.Pin("P0", pyb.Pin.OUT_OD, pyb.Pin.PULL_UP)

3.模拟I/O:

OpenMV有一个模拟I / O引脚(P6),可用作ADC输入或DAC输出。以下是如何使用它来读取0V和3.3V之间的电压值:

import pybadc = pyb.ADC(pyb.Pin('P6'))while(True):pyb.delay(10) # wait 10 msprint("%f volts" % (((adc.read() * 3.3) + 2047.5) / 4095)) # read value, 0-4095

ADC具有12位分辨率,所以它将输出0到4095之间0到3.3伏的值。最后,请注意,当引脚处于ADC模式时,它不再是5V容限。

接下来,要产生模拟输出电压,您可以将I / O引脚置于DAC模式:

import pyb, mathdac = pyb.DAC(pyb.Pin('P6'))counter = 0while(True):pyb.delay(10) # wait 10 msdac.write(int(math.sin(math.radians(counter % 360)) * 255))counter += 1

上面的代码在I / O引脚上产生一个正弦波,从0到255变为0到3.3伏。再一次请注意,当引脚处于DAC模式时,它不再是5V的容限。

4.UART控制:

OpenMV Cam在引脚P4(TX)和P5(RX)上有一个主UART,可以用于串行通信。要创建一个UART对象,请执行以下操作:

import pybuart = pyb.UART(3, 115200, timeout_char = 1000)

第一个参数是UART总线。这是OpenMV Cam上的UART总线的索引。 必须用这个值调用UART构造函数,因为我们正在利用MicroPython的pyboard的 pyb 模块。 第二个值是波特率,它可以是任何你喜欢的标准波特率值。最后,第三个参数告诉驱动程序如果UART繁忙, 在发送字符之间等待最多1秒。如果您的代码必须阻止等待UART缓冲区中的空间(通常情况下不需要),则 timeout_char 默认值为0会导致驱动程序不发送字符。

发送数据:

uart.write("Hello World\n")

但是,如果想要发送二进制数据,请使用该 ustruct 模块。该 ustruct 模块将让你轻松地序列化数据。这是一个例子:

import ustructuart.write(ustruct.pack("<lhb", a_32_bit_value, a_16_bit_value, a_8_bit_value))

上面的第一个字符串告诉我们如何将数据打包到字节流中。“<”表示数据将以小端格式打包。 “l”表示打包长字节,“h”表示打包短字节,“b”表示打包一个字节。

如果想接收数据,只需要使用 UART.any() 方法和 UART.read() 方法。请注意,需要编写某种状态机来可靠的接收数据。

学习OpenMV(二)I/O教程相关推荐

  1. Python学习笔记|二.Python安装教程

    Python 安装教程 Python是跨平台的,它可以运行在Windows.Mac和各种Linux/Unix系统上.在Windows上写Python程序,放到Linux上也是能够运行的. 安装Pyth ...

  2. Revit二次开发从入门到精通学习之路, (含Revit二次开发教程下载)

    Revit二次开发从入门到精通学习之路 Autodesk Joe Ye叶雄进 2. 18 2014    yexiongjin@hotmail.com Revit在国内的应用越来越广泛, Revit ...

  3. 【台大郭彦甫】Matlab入门教程超详细学习笔记二:基本操作与矩阵运算(附PPT链接)

    Matlab入门教程超详细学习笔记二:基本操作与矩阵运算 前言 一.基本操作 1.把matlab当作计算器使用 2.变量 3.控制格式输出 二.矩阵运算 1.矩阵 2.矩阵索引 3.使用:创建向量 4 ...

  4. 学习OpenMV(一)详细参数及简单介绍

    目录 一. Open MV 简介​ 1.OpenMV摄像头的特点: 2.OpenMV摄像头的应用: 3.规格: 二. 搭建环境,Open MV IDE安装 1.Windows系统 2.Linux系统 ...

  5. 语义分割:基于openCV和深度学习(二)

    语义分割:基于openCV和深度学习(二) Semantic segmentation in images with OpenCV 开始吧-打开segment.py归档并插入以下代码: Semanti ...

  6. 用MXnet实战深度学习之二:Neural art

    用MXnet实战深度学习之二:Neural art - 推酷 题注:本来这是第三集的内容,但是 Eric Xie 勤劳又机智的修复了mxnet和cuDNN的协作问题,我就把这篇当作一个卷积网络Conv ...

  7. Matlab学习一本通,matlab基础教程

    链接:https://pan.baidu.com/s/1uTCbiRfIxcrt6lmiy6_QlQ  提取码:f2dn  Matlab学习一本通,matlab基础教程 <MATLAB R201 ...

  8. shopify二次开发教程_详细教程:如何将Shopify的Storefront API与React和Redux结合使用...

    shopify二次开发教程 by Chris Frewin 克里斯·弗里温(Chris Frewin) 详细教程:如何将Shopify的Storefront API与React和Redux结合使用 ( ...

  9. 学习生信的系列教程 | 留言您是如何学习生信的免费获取北大出版《Python数据分析》书籍...

    生信的作用越来越大,想学的人越来越多,不管是为了以后发展,还是为了解决眼下的问题.但生信学习不是一朝一夕就可以完成的事情,也许你可以很短时间学会一个交互式软件的操作,却不能看完程序教学视频后就直接写程 ...

  10. ES6学习(二)—变量的解构赋值

    ES6学习(二)-变量的解构赋值 文章只列举了一部分 完整版请看阮一峰ES6入门教程 点我查看阮一峰ES6入门教程 一.数组的解构赋值 二.对象解构赋值 三.函数参数的解构赋值

最新文章

  1. 国内主流IT公司Field Sales销售薪资 来自著名猎头公司内部信息 给IT的朋友们知道个行情 - 天涯...
  2. 从喧闹与富有中搞懂搜索和拓扑
  3. 为什么C语言成了大学的必修课?
  4. 十二、程序返回、数据类型表示、代码注释
  5. 抖音一个老人和一个机器人歌曲_一个老人孤独去世,一个老人安然离世
  6. linux查找修改时间在三天前,ECS linux 中查找最近一次修改过的文件的具体操作
  7. Spring : 依赖注入(IoC)控制反转
  8. 员工收“老板”QQ消息转账98万 警方挽回被骗资金
  9. 一个前端小白的成长之路(序)
  10. 配置淘宝Maven镜像仓库
  11. Draco嵌入式AI开发板使用手册V0.1.1
  12. 多目标优化问题中常见分解方法的理解
  13. 高绩效团队-VUCA时代的五个管理策略《一》—全书回顾
  14. [艾兰岛]制作传送门之搭建系列——kura酱长期更新
  15. 七人成团即拼即赚七人拼团模式解析
  16. Redis一打开一闪而过,没有出现主界面的解决办法及原因
  17. 什么是Nginx?有什么用?
  18. 【kafka专栏】使用shell脚本快速安装kafka集群(含视频)
  19. 记录SEO寄生虫处理过程
  20. Excel LAMBDA入门教程之工作表函数体让Excel实现图灵完备

热门文章

  1. 用UltraISO制作CentOS的DVD光盘启动盘 安装系统
  2. c#元胞自动机_元胞自动机+生命游戏
  3. C#中制作启动窗体的方法和问题
  4. c语言与程序设计教材,C语言与程序设计(高等学校计算机专业规划教材)
  5. docker安装vim命令
  6. ie显示的html页面乱码,IE10、IE11页面中文乱码解决方案
  7. CSS 中文字体的英文名称 (simhei, simsun) 宋体 微软雅黑
  8. 简明 Python 教程
  9. 连接动态链接库时找不到链接库的解决办法
  10. HackerRank笔记 - SQL Server