日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

学习OpenMV(二)I/O教程

發(fā)布時間:2023/12/31 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 学习OpenMV(二)I/O教程 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在這里,要學(xué)習(xí)OpenMV上的引腳控制,了解各個引腳的作用。

不??同的I / O引腳有不同的特殊功能。例如,P0-P3是OpenMV Cam的SPI總線引腳,可以用來控制SPI設(shè)備。 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?來訪問它。一旦導(dǎo)入, 您就可以訪問ADC,CAN,DAC,I2C,Pin,Servo,SPI和UART類,同時可以控制電路板的功耗。

1.LED

????????OpenMV上有一個RGB LED和兩個紅外LED。可以分別控制RGB LED的紅色,綠色和藍色部分以及兩個IR LED。 要控制LED,首先導(dǎo)入pyb模塊。然后為要控制的特定LED創(chuàng)建一個LED類對象:

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

?每個LED可以調(diào)用三種方法,?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調(diào)光LED。我們重新使用了用于LED調(diào)光的定時器,以產(chǎn)生時鐘源來為相機芯片供電。

????????最后,在腳本中使用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()?構(gòu)造函數(shù)創(chuàng)建一個pin對象,您將用它來控制你的OpenMV的I / O引腳。 你傳遞給OpenMV凸輪該字符串應(yīng)該是?P?,然后OpenMV M4為?0-8?和 OpenMV M7為?0-9?。

????????一旦你創(chuàng)建了GPIO引腳,使用該?pyb.Pin.value()?方法來獲得IO引腳的狀態(tài)。

????????最后,如果需要上拉或下拉IO引腳, 傳遞?pyb.Pin.PULL_UP?或?pyb.Pin.PULL_DOWN?作為?pyb.Pin()?構(gòu)造函數(shù)的附加參數(shù):

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)

設(shè)置開漏輸出:

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

現(xiàn)在?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容限。

????????接下來,要產(chǎn)生模擬輸出電壓,您可以將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引腳上產(chǎn)生一個正弦波,從0到255變?yōu)?到3.3伏。再一次請注意,當引腳處于DAC模式時,它不再是5V的容限。

?4.UART控制:

????????OpenMV Cam在引腳P4(TX)和P5(RX)上有一個主UART,可以用于串行通信。要創(chuàng)建一個UART對象,請執(zhí)行以下操作:

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

????????第一個參數(shù)是UART總線。這是OpenMV Cam上的UART總線的索引。 必須用這個值調(diào)用UART構(gòu)造函數(shù),因為我們正在利用MicroPython的pyboard的?pyb?模塊。 第二個值是波特率,它可以是任何你喜歡的標準波特率值。最后,第三個參數(shù)告訴驅(qū)動程序如果UART繁忙, 在發(fā)送字符之間等待最多1秒。如果您的代碼必須阻止等待UART緩沖區(qū)中的空間(通常情況下不需要),則?timeout_char?默認值為0會導(dǎo)致驅(qū)動程序不發(fā)送字符。

????????發(fā)送數(shù)據(jù):

uart.write("Hello World\n")

????????但是,如果想要發(fā)送二進制數(shù)據(jù),請使用該?ustruct?模塊。該?ustruct?模塊將讓你輕松地序列化數(shù)據(jù)。這是一個例子:

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

????????上面的第一個字符串告訴我們?nèi)绾螌?shù)據(jù)打包到字節(jié)流中。“<”表示數(shù)據(jù)將以小端格式打包。 “l(fā)”表示打包長字節(jié),“h”表示打包短字節(jié),“b”表示打包一個字節(jié)。

????????如果想接收數(shù)據(jù),只需要使用?UART.any()?方法和?UART.read()?方法。請注意,需要編寫某種狀態(tài)機來可靠的接收數(shù)據(jù)。

總結(jié)

以上是生活随笔為你收集整理的学习OpenMV(二)I/O教程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。