ESP8266——GPIO和外部中斷


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 代碼。因此,回調函數在它們能做什么(例如,它們不能分配內存)方面受到限制,並且應該盡可能短和簡單。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM