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

何時一樽酒,重與細論文。