Skip to content

Pin API

onionys-TwoLab edited this page May 26, 2019 · 1 revision

class Pin

Micropython 使用 machine.Pin 類別提供 General Purpose Input/Output (GPIO) 功能; 意即使用者可設定指定號碼的針腳,讀取/輸出電壓值 HIGH/LOW、設定 外部中斷(External Interrupt)功能。

mt7697 board 上 machine.Pin 類別可控制的針腳號碼為

2 ~ 17

有提供外部中斷功能的腳位為

2, 3, 6 (USR-BTN)

Constructors

宣告 Pin 物件,需代入指定針腳號碼與輸出或輸入模式(Pin.IN or Pin.OUT)

Example:

匯入 Pin 類別並且宣告 p6 為 Pin 物件,指定 P6 針腳為輸入模式並不提供上上拉電阻。

from machine import Pin
p6 = Pin(6, Pin.IN, Pin.PULL_DISABLE)

# 讀取電壓 HIGH(1) / LOW(0) 值
print( p6.value() )
print( p6() )

宣告 p7 為 Pin 物件並設定為輸出模式,指定 P7 針腳為輸出模式

from machine import Pin
p7 = Pin(7, Pin.OUT)

# 電壓輸出 HIGH (1)
p7(1)

# 電壓輸出 LOW (1)
p7(0)

# 電壓輸出 HIGH/LOW 切換
p7.toggle()

Methods

init(mode=Pin.IN, pull=Pin.PULL_DISABLE)

重新設定輸出模式(OUTPUT)或是輸入模式(INPUT)、上下拉電阻。代入參數:

mode 代入類別常數 Pin.IN 設定為輸入模式(INPUT),Pin.OUT 設定 為輸出模式(OUTPUT)。預設為 Pin.IN

pull 代入類別常數 Pin.PULL_DISABLE 關閉上下拉電阻,Pin.PULL_UP 設定 上拉電阻,Pin.PULL_DOWN 設定下拉電阻。預設為關閉 Pin.PULL_DISABLE

上下拉電阻功能要在輸入模式(INPUT)下才會有作用。

value(v=None)

讀取電壓值或設定輸出電壓 HIGH/LOW。代入參數:

在輸出模式(OUTPUT)下: v 代入整數值 0 或 布林值 False,設定輸出電壓為 LOW。 代入布林值 True 或整數值 1 或其他非 0 整數值,設定輸出電壓為 HIGH。

v 不代入任何值會讀取電壓值並回傳整數值 1 (HIGH) 或 0 (LOW)。

toggle()

在輸出模式下,切換輸出電壓的 HIGH/LOW 。意即,當輸出為 HIGH 時呼叫 toggle() 後輸出電壓會變為 LOW,在輸出為 LOW 時呼叫 toggle() 後輸出會變為 HIGH 。

irq(handler, trigger=Pin.IRQ_RISING, debounce=0)

設定針腳的中斷功能。當該針腳的輸入電壓發生指定變化(RISING/FALLING)時,自動執行 指定的 handler function。代入參數:

RISING 指的是 "輸入電壓由 LOW 變為 HIGH",而 FALLING 指的是 "輸入電壓由 HIGH 變為 LOW"。

handler 代入一個 function,在電壓發生指定變化(RISING/FALLING) 時系統會去呼叫它。

trigger 指定觸發的電壓變化形式,由 HIGH 變為 LOW (Pin.IRQ_FALLING) 或是 由 LOW 變為 HIGH (Pin.IRQ_RISING)。

debounce 代入一個整數值,單位為 milli second (ms),表示用來消除機械彈跳的時間。 預設為 0

Example:

設定針腳 P6 當偵測到電壓由 LOW 變為 HIGH 的時候呼叫指定 function:

# 定義指定 function "f_cb(x)"
def f_cb(x):
	print('hello ')
	print(x)

p6 = Pin(6, Pin.IN)
p6.irq(f_cb, Pin.IRQ_RISING)

如果要 debounce time 設為 50 ms:

p6.irq(f_cb, Pin.IRQ_RISING, 50)

Constants

Pin.IN, Pin.OUT 使用在設定 Pinmode 為輸入或輸出模式用。

Pin.IRQ_HIGH, Pin.IRQ_LOW 使用在設定 Pin 的輸出電壓為 HIGH 或是 LOW。

Pin.PULL_UP, Pin.PULL_DOWN, Pin.PULL_DISABLE 使用在設定 Pinpull 為上拉電阻、下拉電阻或無上下拉電阻。

Pin.IRQ_RISING, Pin.IRQ_FALLING, Pin.IRQ_FALLING_AND_RISING 使用在設定 中斷功能的電壓變化觸發形式 trigger 為 LOW-to-HIGH、 HIGH-to-LOW 或是兩者都 會觸發。

Example Code

設定 P6 (USR-BTN) 為 INPUT

from machine import Pin
p6 = Pin(6, Pin.IN)

讀取 P6 的電壓值

lv = p6.value()
lv = p6()

設定 P7 (USR-LED) 為 OUTPUT

p7 = Pin(7, Pin.OUT)

P7 輸出電壓為 HIGH,此時 USR-LED 為亮。

p7(1)
p7.value(1)

P7 輸出電壓為 LOW,此時 USR-LED 為暗。

p7(0)
p7.value(0)

設定使用 USR-BTN 切換 USR-LED 的亮暗,並且用 50 ms 來消除按鈕的機械彈跳:

def f_cb(x):
	p7.toggle()

p6.irq(f_cb, Pin.IRQ_RISING, 50)

Clone this wiki locally