openmv入门(四):pyb外设使用

一 文件系统

在代码中,可以使用os库,来进行新建目录,新建文件之类的操作。

os.listdir([dir])
#如果没有参数,列出当前目录。如果给了参数,就列出参数所代表的目录。

os.chdir(path)
#改变当前目录

os.getcwd()
#获得当前目录

os.mkdir(path)
#新建一个新的目录

os.remove(path)
#删除文件

os.rmdir(path)
#删除目录

os.rename(old_path, new_path)
#重命名文件.

os.stat(path)
#获得文件或者路径的状态

二 点灯小天使

from machine import LED
import time

led_red=LED("LED_RED")
led_green=LED('LED_GREEN')
led_blue=LED('LED_BLUE')
led_blue.off()
led_green.off()
led_red.off()

def light(led):
    led.on()
    time.sleep_ms(10)
    led.off()

while(True):
    light(led_blue)
    light(led_green)
    light(led_red)

micopython的代码的抽象性很容易让人get到点

三 GPIO使用

from machine import Pin

p_out=Pin('P7',Pin.OUT)#设置P7为输出引脚
p_out.high()
p_out.low()

p_in=Pin('P8',Pin.IN,Pin.PULL_UP)
value=p_in.value()#得到的是0/1

GPIO是控制引脚的输入和输出

四 IO中断

from pyb import Pin,ExtInt

callback=lambda e:print('intr')
'''
lambda是一个匿名函数,等价于
def e:
    print('intr')
注意lambda只用在一行的代码下

'''
ext=ExtInt(Pin('P7'),ExtInt.IRQ_RISING,Pin.PULL_NONE,callback)

#使用machine:
from machine import Pin
import time

pin0=Pin('P0',Pin.IN,Pin.PULL_UP)
pin0.irq(callback,Pin.IRQ_FALLING)
#检测到下降沿就中断

while True:
    time.sleep_ms(1)

中断就是我正在打着游戏,这个时候我妈叫我出去洗个碗,我就只能先洗碗完之后继续打游戏

五 控制舵机

from pyb import Servo

s1=Servo(1)#绑定哪一台舵机
s1.angle(45)# 旋转45°
s1.angle(-60,1200)#在1.2ms内旋转-60°
s1.speed(50)

'''
Servo(1) -> P7 (PD12)
Servo(2) -> P8 (PD13)
'''

#使用machine的版本:
from machine import PWN#PWN是通过占空比这一个类似快速开关来控制诸如灯闪烁快慢,舵机转速等等
import time

#设置引脚,我们只考虑舵机1和2
p7=PWN('P7',freq=50,duty_ns=(1000*1000))#50Hz是舵机的标准信号
p8=PWN('P8',freq=50,duty_ns=(1000*1000))

while True:
    for i in range(1000,2000,100):
        p7.duty_ns(i*1000)
        p8.duty_ns(i*1000)
        time.sleep_ms(1000)

控制舵机的作用可以说就是学习控制车的轮子

六 ADC

from pyb import ADC

adc=ADC('P6')
adc.read()

from machine import ADC

adc=ADC('P6')
adc.read_u16()#16位读取

ADC的作用是将模拟信号转变成数字信号,常用于读取传感器的数据,测量电压

七 DAC

from pyb import DAC

dac=DAC('P6')
dac.write(120)#0-255

DAC则是将数字信号转变成模拟信号,可用于音频输出,电机控制

八 PWN

from pyb import Pin,Timer

p=Pin('P7')#同时有TIM4 CH1
tim=Timer(4,freq=1000)
ch=tim.channel(1,Timer.PWN,pin=p)
ch.pulse_width_percent(50)#占空比

#使用machine:
from machine import PWN
import time

p7=PWN('P7',freq=100,duty_u16=32768)#表示占空比50%

while True:
    for i in range(0,65536,256):
        p7.duty_u16(65535-i)
        time.sleep_ms(10)
    p7.duty_u16(32768)

PWN可以起到快速开关的作用,通过占空比实现调节电机控制,灯的闪烁频率等

九 SPI

from pyb import SPI

spi=SPI(2,SPI.MASTER,baudrate=100000,polatiry=1,phase=0)
spi.send(b'hello')#用b(比特流)的方式传递
spi.recv(5)#接受5个字节
spi.send_recv(b'hello')

#machine版本:
from machine import SPI

spi = SPI(1, baudrate=int(1000000000 / 66), polarity=0, phase=0)
#baudrate表示波特率,polarity=1:时钟极性(CPOL)为 1(空闲时时钟线为高电平)
#phase=0:时钟相位(CPHA)为 0(数据在时钟的第一个边沿采样)
spi.write(b'hello')
spi.read(5) # receive 5 bytes on the bus

txdata = b"12345678"#发送
rxdata = bytearray(len(txdata))#读取的消息,转为二进制读取
spi.write_readinto(txdata, rxdata)  # Simultaneously write and read bytes.

SPI表示主从机通信,可以和温度传感器通信获取温度,和OLED来显示字符等

十 I2C

from machine import I2C, Pin
i2c = I2C(sda=Pin('P5'),scl=Pin('P4'))

i2c.scan()#扫描总线上所有从设备地址,返回一个列表(如 [0x42, 0x68]),确保从设备都在线
i2c.writeto(0x42, b'123')         # write 3 bytes to slave with 7-bit address 42
i2c.readfrom(0x42, 4)             # read 4 bytes from slave with 7-bit address 42

i2c.readfrom_mem(0x42, 8, 3)      #从从设备的指定寄存器地址(memaddr)读取 n 字节。

                                # starting at memory-address 8 in the slave
i2c.writeto_mem(0x42, 2, b'\x10') # write 1 byte to memory of slave 42
                                # starting at address 2 in the slave

I2C和SPI有的时候挺像的,但是SPI可以控制的从机跟过,I2C只能两个互相通信

十一 UART

from pyb import UART

uart=UART(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)
'''

十二 json

import json

obj = [[12,0],[10,12],[22,10],[99,11]]
print(json.dumps(obj))

obj = {
    "number":10,
    "color" :[255,0,0],
    "rate" :0.65
}
print(json.dumps(obj))

json的格式分外美好,可以简洁的写很多信息,并用在单片机读取上!

下课!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值