学习OpenMV(二)I/O教程 您所在的位置:网站首页 什么是p5管材 学习OpenMV(二)I/O教程

学习OpenMV(二)I/O教程

2024-03-10 18:43| 来源: 网络整理| 查看: 265

在这里,要学习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 pyb red_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 2022 import sensor, image, time, pyb sensor.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) #延时150ms red_led.off() green_led.on() time.sleep_ms(150) #延时150ms green_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 pyb p = 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 pyb p = 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 pyb adc = pyb.ADC(pyb.Pin('P6')) while(True): pyb.delay(10) # wait 10 ms print("%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, math dac = pyb.DAC(pyb.Pin('P6')) counter = 0 while(True): pyb.delay(10) # wait 10 ms dac.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 pyb uart = 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 ustruct uart.write(ustruct.pack("


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有