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]。