学习OpenMV(二)I/O教程
在這里,要學(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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android好用的工具-监测,性能,网
- 下一篇: JAVA生成企业组织机构代码、营业执照代