1.GPIO
將電路板連接到外部世界並控制其他組件的方法是通過 GPIO 引腳。並非所有引腳都可以使用,在大多數情況下,只能使用引腳 0、2、4、5、12、13、14、15 和 16。分別對應的是開發板上引腳的GPIO0、GPIO2、...GPIO15和GPIO16。
圖1-1 NodeMCU開發板引腳示意圖
針腳在機器模塊中可用,因此請確保首先導入該引腳。然后,您可以使用:
>>> pin = machine.Pin(0)
此處,"0"是您要訪問的引腳。通常,您希望將引腳配置為輸入或輸出,並在構造引腳時執行此操作。要使用輸入引腳:
>>> pin = machine.Pin(0, machine.Pin.IN, machine.Pin.PULL_UP)
對於輸入拉取模式,可以使用PULL_UP或無。如果未指定,則默認為"無",即無拉電阻。GPIO16 沒有上拉模式。您可以使用以下功能讀取引腳上的值:
>>> pin.value()
0
板上的引腳可能會在此處返回 0 或 1,具體取決於其連接的內容。要使用輸出引腳:
>>> pin = machine.Pin(0, machine.Pin.OUT)
然后使用:
>>> pin.value(0)
>>> pin.value(1)
或:
>>> pin.off()
>>> pin.on()
2.外部中斷
除數字 16 外,所有引腳都可以配置為在輸入發生變化時觸發硬中斷。您可以設置要在觸發器上執行的代碼(回調函數)。
讓我們首先定義一個回調函數,該函數必須采用單個參數,即觸發該函數的引腳。我們將使函數只打印引腳:
>>> def callback(p): ... print('pin change', p)
接下來,我們將創建兩個引腳並將其配置為輸入:
>>> from machine import Pin >>> p0 = Pin(0, Pin.IN) >>> p2 = Pin(2, Pin.IN)
最后,我們需要告訴引腳何時觸發,以及當它們檢測到事件時調用的函數:
>>> p0.irq(trigger=Pin.IRQ_FALLING, handler=callback)
>>> p2.irq(trigger=Pin.IRQ_RISING | Pin.IRQ_FALLING, handler=callback)
我們將引腳 0 設置為僅在輸入的下降沿(當它從高到低)上觸發,並將引腳 2 設置為在上升和下降邊緣觸發。輸入此代碼后,您可以將高電壓和低電壓應用於引腳 0 和 2 以查看正在執行的中斷。
一旦事件發生,硬中斷將觸發,並將中斷任何正在運行的代碼,包括 Python 代碼。因此,回調函數在它們能做什么(例如,它們不能分配內存)方面受到限制,並且應該盡可能短和簡單。