openmv4系列6----外设功能
一、LED
from pyb import LED #从pyb模块引入LED类
red = LED(1) # 红led
green = LED(2) # 绿led
blue = LED(3) # 蓝led
red.toggle() #翻转
green.on() #亮
blue.off() #灭
red = LED(1)语句创建了LED(1)的对象,red.toggle()调用了对象的方法。
LED(1) -> 红LED LED(2) -> 绿LED LED(3) -> 蓝LED LED(4) -> 红外LED(两个)
构造函数
class pyb.LED(id)
- 创建一个与给定LED相关联的LED对象:
id 是LED的编号,取值1-4。
方法
LED.off()
- 关闭LED。
LED.on()
- 打开LED,达到最大强度。
LED.toggle()
- 切换LED的开(最大强度)关。若LED在非零强度下,则会被认为已打开,随之被切换为关。
二、IO
Pin类 – 控制I/O 引脚
from pyb import Pin #从pyb模块引入Pin类
p_out = Pin('P7', Pin.OUT_PP) #设置p_out为输出引脚
p_out.high() #设置p_out引脚为高
p_out.low() #设置p_out引脚为低
p_in = Pin('P7', Pin.IN, Pin.PULL_UP)#设置p_in为输入引脚,并开启上拉电阻
value = p_in.value() #读入p_in引脚的值
p_out = Pin(‘P7’, Pin.OUT_PP)即设置P7为输出引脚,p_in = Pin(‘P7’, Pin.IN, Pin.PULL_UP)即设置p_in为输入引脚,并开启上拉电阻,p_out与p_in均为P7引脚的对象,操作P7引脚时只需要操作p_out或者p_in即可。
当引脚启用了 Pin.PULL_UP 或 Pin.PULL_DOWN模式,该引脚有一个有效的40k欧姆的电阻把它牵引至3V3或GND(引脚Y5除外,该引脚电阻为11k欧姆)。
构造函数
class pyb.Pin(id, ...)
- 创建一个与id关联的新的注脚对象。若给定其他参数,则用来初始化引脚。详见 pin.init() 。
class methods
classmethod Pin.debug([state])
- 获取或设置调试状态( True 与 False 分别对应开和关)。
classmethod Pin.dict([dict])
- 获取或设置注脚映射库。
classmethod Pin.mapper([fun])
- 获取或设置注脚映射器函数。
方法
Pin.init(mode, pull=Pin.PULL_NONE, af=-1)
- 初始化注脚:
- mode 可为下列之一:
-
Pin.IN
- 将引脚设置为输入;
-
Pin.OUT_PP
- 将引脚设置为推挽输出;
-
Pin.OUT_OD
- 将引脚设置为开漏输出;
-
Pin.AF_PP
- 将引脚设置为复用推挽;
-
Pin.AF_OD
- 将引脚设置为复用开漏;
-
Pin.ANALOG
- 将引脚设置为模拟量。
- pull 可为下列之一:
-
Pin.PULL_NONE
- 无上拉或下拉电阻;
-
Pin.PULL_UP
- 启用上拉电阻;
-
Pin.PULL_DOWN
- 启用下拉电阻。
- 当模式为 Pin.AF_PP 或 Pin.AF_OD ,AF可为与引脚相关联的一个替代函数的索引或名称。
- 返回值: None.
Pin.value([value])
- 获取或设置引脚的数字逻辑级别:
若无参数,返回0或1取决于引脚的逻辑级别。
给定 value ,设置引脚的逻辑级别。 value 可为任何可转换成布尔值的值。若转换为 True ,引脚设置为高;否则设置为低。
Pin.__str__()
- 返回一个描述引脚对象的字符串。
Pin.af()
- 返回引脚当前配置的替代函数。返回的整数将与用于初始化函数的AF参数的允许常量之一相匹配。
Pin.af_list()
- 返回可用于此pin的替代函数数组。
Pin.gpio()
- 返回与这一引脚相关联的GPIO数据块的基地址。
Pin.mode()
- 返回引脚的当前配置模式。返回的整数将与将与用于初始化函数的模式参数的允许常量之一相匹配。
Pin.name()
- 获取引脚名称。
Pin.names()
- 返回用于该引脚的CPU和插件名称。
Pin.pin()
- 获取引脚数量。
Pin.port()
- 获取引脚端口。
Pin.pull()
- 返回引脚当前配置的pull。返回的整数将与将与用于初始化函数的pull参数的允许常量之一相匹配。
常量
Pin.AF_OD
- 使用开漏驱动来将引脚初始化为复用功能模式。
Pin.AF_PP
- 使用推挽式驱动将引脚初始化为复用功能模式
Pin.ANALOG
- 将引脚初始化为模拟。
Pin.IN
- 将引脚初始化为输入模式。
Pin.OUT_OD
- 使用开漏驱动将引脚初始化为输出模式。
Pin.OUT_PP
- 使用推挽驱动将引脚初始化为输出模式。
Pin.PULL_DOWN
- 在引脚上启用下拉电阻。
Pin.PULL_NONE
- 请勿在引脚上启用任何上拉或下拉电阻。
Pin.PULL_UP
- 在引脚上启用上拉电阻。
三、Servo
from pyb import Servo
s1 = Servo(1) # servo on position 1 (P7)
s1.angle(45) # 转到45°的位置
s1.angle(-60, 1500) # 在1500ms转到-60°
s1.speed(50) # 用于连续旋转的伺服电机/舵机
Servo(1) -> P7 (PD12)
Servo(2) -> P8 (PD13)
OpenMV3 M7 / OpenMV4 H7上增加:Servo(3) -> P9 (PD14) 注意:OpenMV4 H7 Plus P9不能使用PWM
四、IO中断
from pyb import Pin, ExtInt #从pyb模块引入Pin、ExtInt类
callback = lambda e: print("intr")
ext = ExtInt(Pin('P7'), ExtInt.IRQ_RISING, Pin.PULL_NONE, callback)# ExtInt的参数列表:1、Pin('P7')[Pin对象];2、ExtInt.IRQ_RISING[上升沿触发];3、Pin.PULL_NONE[不设置上拉或者下拉];4callback[待补充,目前没看懂]
留待补充
五、定时器
from pyb import Timer #从pyb模块引入Timer类
tim = Timer(4, freq=1000) #定时器4,频率1000Hz
tim.counter() #获取当前的计数值
tim.freq(0.5) #设置频率为0.5Hz
tim.callback(lambda t: pyb.LED(1).toggle())#定时器中断
- Timer 1 Channel 3 Negative -> P0
- Timer 1 Channel 2 Negative -> P1
- Timer 1 Channel 1 Negative -> P2
- Timer 2 Channel 3 Positive -> P4
- Timer 2 Channel 4 Positive -> P5
- Timer 2 Channel 1 Positive -> P6
- Timer 4 Channel 1 Negative -> P7
- Timer 4 Channel 2 Negative -> P8
OpenMV M7上增加: Timer 4 Channel 3 Positive -> P9
六、PWM
from pyb import Pin, Timer # 从pyb模块引入Timer、Pin类
p = Pin('P7') # P7是TIM4的CH1
tim = Timer(4, freq=1000)
ch = tim.channel(1, Timer.PWM, pin=p) # 不用多说,看参数就懂
ch.pulse_width_percent(50) # 设置占空比
七、ADC
from pyb import Pin, ADC # 从pyb模块引入ADC、Pin类
adc = ADC('P6') # 设置P6引脚功能
adc.read() # 读值, 12位的精度,取值范围位0--4095
八、DAC
from pyb import Pin, DAC # 从pyb模块引入DAC、Pin类
dac = DAC('P6')
dac.write(120) # 0到255之间的输出
九、UART
from pyb import UART # 从pyb模块引入UART类
uart = UART(3, 9600) # 串口3,波特率9600
uart.write('hello') # 串口输出
uart.read(5) # 最多读取5个字节
- UART 3 RX -> P5 (PB11)
- UART 3 TX -> P4 (PB10)
OpenMV3 M7 / OpenMV4 H7/ OpenMV4 H7 Plus上增加:
- UART 1 RX -> P0 (PB15)
- UART 1 TX -> P1 (PB14)
十、SPI
from pyb import SPI # 从pyb模块引入UART类
spi = SPI(2, SPI.MASTER, baudrate=200000, polarity=1, phase=0)
spi.send('hello')
spi.recv(5) # receive 5 bytes on the bus
spi.send_recv('hello') # send a receive 5 bytes
十一、I2C
from machine import I2C, Pin # 从machine模块引入I2C、Pin类
i2c = I2C(sda=Pin('P5'),scl=Pin('P4'))
i2c.scan()
i2c.writeto(0x42, b'123') # 向从机写入3个字节以7位地址0xs42
i2c.readfrom(0x42, 4) # 用7位地址0x42向从机读取4个字节
i2c.readfrom_mem(0x42, 8, 3) # 向地址为Ox42的从机的内存中读取3个字节,
# 从从机的内存地址8开始
i2c.writeto_mem(0x42, 2, b'\x10') # 将1字节写入从机0X42的内存
# 从从机的地址2开始