使用MicroPython開發ESP32(03):GPIO口使用說明

目的

GPIO口操作是微處理器上最常用的功能,這裏就對相關使用做個說明。

GPIO口基礎說明

MicroPython for ESP32 GPIO主要說明如下:

  • 可以用的IO爲 0-19, 21-23, 25-27, 32-39
  • 13 分別爲UART0的TX和RX,即燒寫和默認調試用的端口;
  • 6~11 不推薦使用,因爲這幾個口接了燒錄程序用的flash;
  • 34~39 只能設置爲輸入模式,並且沒有內部上拉電阻;

這個地方說明其實和官方文檔有點出入,原因是使用的ESP32芯片具體型號差生的差異。這裏列出的信息適用於型號爲 ESP32-D0WD 的芯片。更詳細的信息可以參考樂鑫官方《ESP32 技術規格書》。

題外話:請注意ESP32的IO12,這個IO口上上電時的電平會決定外部flash(存放程序的那顆)的工作電壓,上電時該腳爲高則認爲flash工作於1.8V,爲低則認爲flash工作於3.3V。常用的像是Wroom-32系列模塊該腳內部已下拉,即flash是工作於3.3V的,若外部電路接強上拉則可能導致模塊工作異常。

函數說明

MicroPython中使用GPIO口主要是用到了 machine 模塊中的 Pin 類,具體函數說明如下:

  • class machine.Pin(id, mode=-1, pull=-1, *, value)
    構造函數,用於聲明與初始化GPIO口對象:
    id:GPIO編號,如使用GPIO13則此處填寫13;
    mode:模式,可選 Pin.INPin.OUTPin.OPEN_DRAIN
    pull:使用內部上下拉電阻,可選 NonePin.PULL_UPPin.PULL_DOWN ,部分IO口可以設置爲 PULL_HOLD 模式,可以在深度睡眠時保持其狀態;
    value:輸出或開漏模式下端口值,0爲低(off)、1爲高(on);
  • Pin.init(mode=-1, pull=-1, *, value, drive, alt)
    重新初始化GPIO口;
  • Pin.value([x])
    不填寫參數使用時返回端口的值,參數填寫0(False)、1(True)改變端口值;
  • Pin.on()
    輸出或開漏模式下將端口設置爲高;
  • Pin.off()
    輸出或開漏模式下將端口設置爲低;
  • Pin.irq(handler=None, trigger=(Pin.IRQ_FALLING | Pin.IRQ_RISING), *,wake=None)
    用於設置外部中斷:
    handler:中斷觸發回調函數;
    trigger:中高端觸發源可選下降沿上升沿或是一起使用;
    wake:使能外部中斷喚醒睡眠,可設置爲 WAKE_LOWWAKE_LOWWAKE_HIGH

在這裏插入圖片描述

使用演示

使用下面代碼進行測試:

# 將GPIO22和GPIO23用導線相連
from machine import Pin # 導入Pin模塊
import time # 導入Time模塊

p22 = Pin(22, Pin.OUT, value=0) # 初始化GPIO22
print('p22 value:%d'%p22.value()) # 打印GPIO22端口值

p23 = Pin(23, Pin.IN, Pin.PULL_DOWN) # 初始化GPIO23
print('p23 value:%d'%p23.value()) # 打印GPIO23端口值

def p23icb(self): # 中斷回調函數
    print('irq - p23 value:%d'%p23.value()) # 打印GPIO23端口值
    
p23.irq(p23icb, Pin.IRQ_RISING) # GPIO23設置上升沿觸發中斷

while True:
    time.sleep(1)
    print('p22 turn off')
    p22.off()
    time.sleep(1)
    print('p22 turn on')
    p22.on() # 該動作會在GPIO23上產生上升沿,觸發中斷

在這裏插入圖片描述

總結

GPIO口的使用主要就這些,更多內容可以參考下面鏈接:
http://docs.micropython.org/en/latest/esp32/quickref.html#pins-and-gpio
http://docs.micropython.org/en/latest/library/machine.Pin.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章