pyboard是MicroPython官方支持的开发板,具有很好的兼容性和易用性,下面的内容是pyboard开发过程中最常用的一些参考。
下图为PYBv1.1开发板的引脚示意图:
下面是pyboard的快速参考
#使用pyb模块
import pyb
pyb.repl_uart(pyb.UART(1, 9600)) # 在UART(1)上复制REPL
pyb.wfi() # 暂停CPU, 等待中断
pyb.freq() # 获取CPU和总线频率
pyb.freq(60000000) # 设置CPU频率为60MHz
pyb.stop() # 停止CPU,等待外部中断
使用time
模块:
time.sleep(1) # 休眠1秒
time.sleep_ms(500) # 休眠500毫秒
time.sleep_us(10) # 休眠10微秒
start = time.ticks_ms() # 获取毫秒计时器
delta = time.ticks_diff(time.ticks_ms(), start) # 计算时间差
使用pyb.LED
from pyb import LED
led = LED(1) # 1=红, 2=绿, 3=黄, 4=蓝
led.toggle()
led.on()
led.off()
# LED3和4支持PWM亮度(0-255)
LED(4).intensity() #获取亮度
LED(4).intensity(128) #设置亮度为一半
使用pyb.Pin
from pyb import Pin
p_out = Pin('X1', Pin.OUT_PP) #设置为输出
p_out.high() #输出高电平
p_out.low() #输出低电平
p_in = Pin('X2', Pin.IN, Pin.PULL_UP) #设置为输入
p_in.value() # 获取值, 0 or 1
使用 pyb.Servo
from pyb import Servo
s1 = Servo(1) # 初始化舵机(X1, VIN, GND)
s1.angle(45) # 旋转到45度
s1.angle(-60, 1500) # 在1500ms内旋转-60度
s1.speed(50) # 用于连续旋转的舵机
使用 pyb.ExtInt
from pyb import Pin, ExtInt
callback = lambda e: print("intr") #中断回调函数
ext = ExtInt(Pin('Y1'), ExtInt.IRQ_RISING, Pin.PULL_NONE, callback) #在Y1引脚设置外部中断
使用pyb.Timer
from pyb import Timer
tim = Timer(1, freq=1000)
tim.counter() # 获取计数值
tim.freq(0.5) # 频率为0.5 Hz
tim.callback(lambda t: pyb.LED(1).toggle())
使用pyb.RTC
from pyb import RTC
rtc = RTC()
rtc.datetime((2024, 1, 20, 1, 13, 46, 0, 0)) # 设置日期和时间
rtc.datetime() # 获取日期和时间
使用pyb.Pin
和pyb.Timer
from pyb import Pin, Timer
p = Pin('X1') # X1有TIM2, CH1
tim = Timer(2, freq=1000) #初始化定时器
ch = tim.channel(1, Timer.PWM, pin=p) #通道1的PWM
ch.pulse_width_percent(50) #设置占空比
使用pyb.Pin
和pyb.ADC
from pyb import Pin, ADC
adc = ADC(Pin('X19'))
adc.read() # 读取值, 0-4095
使用pyb.Pin
和pyb.DAC
from pyb import Pin, DAC
dac = DAC(Pin('X5'))
dac.write(120) # 输出0到255
使用pyb.UART
from pyb import UART
uart = UART(1, 9600)
uart.write('hello')
uart.read(5) # 最多读取5个字节
使用 pyb.SPI
from pyb import SPI
spi = SPI(1, SPI.CONTROLLER, baudrate=200000, polarity=1, phase=0)
spi.send('hello')
spi.recv(5) # 从总线接收5个字节的数据
spi.send_recv('hello') # 发送并接收5个字节
I2C硬件可以通过pyboard开发板的X和Y半边使用如:I2C('X')
和I2C('Y')
,或者传递外设的整数标识符来使用,如:I2C(1)
。I2C软总线可以通过指定scl
和sda
管脚来代替总线名称来使用。
使用machine.I2S
from machine import I2S, Pin
i2s = I2S(2, sck=Pin('Y6'), ws=Pin('Y5'), sd=Pin('Y8'), mode=I2S.TX, bits=16, format=I2S.STEREO, rate=44100, ibuf=40000) # 创建I2S对象
i2s.write(buf) # 把音频样本缓冲区数据写入I2S设备
i2s = I2S(1, sck=Pin('X5'), ws=Pin('X6'), sd=Pin('Y4'), mode=I2S.RX, bits=16, format=I2S.MONO, rate=22050, ibuf=40000) # 创建I2S设备
i2s.readinto(buf) # 将I2S设备音频样本填充到缓冲区
I2S类目前只在技术预览版提供,在预览期间鼓励用户反馈信息,基于用户的反馈I2S类API和实现可能会有变化。
PYBv1.0/v1.1有一个I2S总线,id为2。PYBD-SFxW有两个I2S总线,分别为id=1和id=2。I2S和SPI是共享的。
使用pyb.CAN
from pyb import CAN
can = CAN(1, CAN.LOOPBACK)
can.setfilter(0, CAN.LIST16, 0, (123, 124, 125, 126))
can.send('message!', 123) # 给id为123的设备发送消息
can.recv(0) # 从FIFO(先进先出,队列) 0接收消息
使用pyb.Accel
from pyb import Accel
accel = Accel()
print(accel.x(), accel.y(), accel.z(), accel.tilt())