machine-与硬件相关功能

Pin类

machine.Pin(id,mode=None,pull=None,value)

Pin对象构造函数

  • id:GPIO编号,对于Pico为0-29
  • mode:模式,可选None,Pin.IN(0),Pin.OUT(1),Pin.OPEN_DRAIN(2)
  • pull:使用内部上下拉电阻,仅在输入模式下有效,可选None,Pin.PULL_UP(1),Pin.DOWN(2)
  • value:输出或开漏模式下端口值,0为低电位,1为高电位

    Pin.init(mode=None,pull=None)

    重新初始化GPIO口

    Pin.value([x])

  • 不填参数时返回GPIO端口数值
  • 填参数0、1时将参数写入GPIO端口

    Pin.toggle()

    输出或开漏模式下将端口设置翻转
    eg.LED闪烁

    from machine import Pin
    import time
    led=Pin(25,Pin.OUT)
    while True :
      led.toggle()
      time.sleep(1)#每秒反转一次灯亮/暗

    Pin.irq(handler=None,trigger=(Pin.IRQ_FALLING|PIN.IRQ_RISING))

    外部中断函数

  • handler:中断触发回调函数
  • trigger:中断触发条件(边缘触发/电平触发)

    others

    以下函数适用于输出/开漏模式:

  • Pin.low(),Pin.off()将端口设置为低电压。
  • Pin.high(),Pin.on()将端口设置为高电压。

eg. 点灯

from machine import Pin
import utime
#将按钮接入GPIO15,设置为输入模式,内部上拉
button_num=15
button=Pin(button_num,Pin.IN,Pin.PULL_UP)
#GP25为板载LED,外设LED接入GP16
led1_num=25
led2_num=16
led1=Pin(led1_num,Pin.OUT)
led2=Pin(led2_num,Pin.OUT)

while True :
    led2.off()#开始关外设LED
    if(button.value()==0):#判断按钮是否按下,按下为0
        utime.sleep(0.01)
        if(button.value()==0):#软件消抖
            led1.toggle()#板载LED翻转
            led2.on()#外设LED亮(GP16高电平)
            print("The button is pressed.")
            while (button.value()==0):
            #按钮处于按下状态则等待变化(外设LED仍亮)
                utime.sleep(0.01)

PWM类

machine.PWM(pin)

指定GPIO重新初始化为PWM输出。
pin为Pin类对象

PWM.deinit()

PWM反初始化,停止PWM输出。

PWM.freq([value])

设置PWM频率(单位$Hz$),自动计算分频器参数与TOP寄存器参数。

`PWM.duty_u16([value])

设置占空比。
value占空比比例在[0,65536],据此计算出对应数值赋给CC寄存器。

PWM.duty_ns([value])

设置一个周期高电平时长,单位为ns。

eg. 呼吸灯

from machine import Pin,PWM
import time

led=PWM(Pin(25))#初始化板载LED为PWM对象
led.freq(1000)#设置频率
led_duty=0#初始值
led_direction=1#步长

while True:
    led_duty+=led_direction#增大/减小占空比比值
    if led_duty>=100:#满
        led_duty=100
        led_direction=-1
    elif led_duty<=0:#归零
        led_duty=0
        led_direction=1

    led.duty_u16(int(led_duty*655.36))#占空比数值转换

    if led_duty%5==0:
        print(led_duty)#便于绘图观察

    time.sleep(0.01)
    #周期2S

ADC类

machine.ADC(id)

初始化为ADC对象,id可为GPIO或ADC通道。使用Pin对象时GPIO需要支持ADC。
0-3为Pico GPIO通道26-29,4为片内温度传感器通道。

ADC.read_u16()

读取对应通道ADC返回读取值[0,65525]。

Last modification:February 15, 2024
我很可爱,请给我钱。