ESP32芯片配有48個(gè)具有多種功能的引腳。并非所有的引腳都暴露在所有的ESP32開(kāi)發(fā)板中,有些引腳不能使用。
關(guān)于如何使用ESP32 GPIO有很多問(wèn)題。你應(yīng)該用什么pin?在項(xiàng)目中應(yīng)該避免使用哪些pin?本文旨在成為一個(gè)為ESP32的GPIO提供一個(gè)簡(jiǎn)單易懂的參考指南。
下圖顯示了ESP-WROOM-32引腳。如果使用ESP32裸芯片構(gòu)建自定義板,可以將其用作參考:
注意:并非所有的GPIO都可以在所有的開(kāi)發(fā)板中訪(fǎng)問(wèn),但是每個(gè)特定的GPIO都以相同的方式工作,而不管您使用的是什么開(kāi)發(fā)板。
ESP32外圍設(shè)備
ESP32外圍設(shè)備包括:
18個(gè)模數(shù)轉(zhuǎn)換器(ADC)通道
3個(gè)SPI接口
3個(gè)UART接口
2個(gè)I2C接口
16個(gè)脈沖寬度調(diào)制輸出通道
2個(gè)數(shù)模轉(zhuǎn)換器(DAC)
2個(gè)I2S接口
10個(gè)電容傳感GPIO
ADC(模數(shù)轉(zhuǎn)換器)和DAC(數(shù)模轉(zhuǎn)換器)功能分配給特定的靜態(tài)引腳。但是,您可以決定哪些管腳是UART、I2C、SPI、PWM等,您只需要在代碼中分配它們。這是可能的,因?yàn)镋SP32芯片的多路復(fù)用功能。
盡管您可以在軟件上定義管腳屬性,但默認(rèn)情況下會(huì)分配管腳,如下圖所示(這是帶有36個(gè)管腳的ESP32 DEVKIT V1 DOIT板的示例-管腳位置可能會(huì)根據(jù)制造商而更改)。
此外,還有具有特定功能的管腳,使它們適合或不適合特定項(xiàng)目。下表顯示了哪些管腳最適合用作輸入和輸出,哪些管腳需要小心。
綠色突出顯示的管腳可以使用。黃色突出顯示的可以使用,但您需要注意,因?yàn)樗鼈兛赡茉趩?dòng)時(shí)有意外行為。不建議將紅色突出顯示的管腳用作輸入或輸出。
僅輸入的管腳
GPIO34到39是GPIs–僅輸入的管腳。這些引腳沒(méi)有內(nèi)部上拉或下拉電阻。它們不能用作輸出,因此只能將這些管腳用作輸入:
GPIO 34
GPIO 35
GPIO 36
GPIO 39
集成在ESP-WROOM-32上的SPI閃存
GPIO 6到GPIO 11在一些ESP32開(kāi)發(fā)板中是公開(kāi)的。但是,這些引腳連接到ESP-WROOM-32芯片上的集成SPI閃存,不建議用于其他用途。所以,不要在項(xiàng)目中使用這些管腳:
GPIO 6(SCK/CLK)
GPIO 7(SDO/SD0)
GPIO 8(SDI/SD1)
GPIO 9(SHD/SD2)
GPIO 10(SWP/SD3)
GPIO 11(CSC/CMD)
電容式觸摸GPIO
ESP32有10個(gè)內(nèi)部電容式觸摸傳感器。它們能感應(yīng)到任何帶電物質(zhì)的變化,比如人類(lèi)皮膚。因此,他們可以檢測(cè)到當(dāng)用手指觸摸gpio時(shí)引起的變化。這些引腳可以很容易地集成到電容墊,并取代機(jī)械按鈕。電容式觸針也可以用來(lái)喚醒ESP32的深度睡眠。
這些內(nèi)部觸摸傳感器連接到這些GPIO:
T0 (GPIO 4)
T1 (GPIO 0)
T2 (GPIO 2)
T3 (GPIO 15)
T4 (GPIO 13)
T5 (GPIO 12)
T6 (GPIO 14)
T7 (GPIO 27)
T8 (GPIO 33)
T9 (GPIO 32)
模數(shù)轉(zhuǎn)換器(ADC)
ESP32有18 x 12位ADC輸入通道(而ESP8266只有1 x 10位ADC)。這些是可用作ADC和相應(yīng)通道的GPIO:
ADC1_CH0 (GPIO 36)
ADC1_CH1 (GPIO 37)
ADC1_CH2 (GPIO 38)
ADC1_CH3 (GPIO 39)
ADC1_CH4 (GPIO 32)
ADC1_CH5 (GPIO 33)
ADC1_CH6 (GPIO 34)
ADC1_CH7 (GPIO 35)
ADC2_CH0 (GPIO 4)
ADC2_CH1 (GPIO 0)
ADC2_CH2 (GPIO 2)
ADC2_CH3 (GPIO 15)
ADC2_CH4 (GPIO 13)
ADC2_CH5 (GPIO 12)
ADC2_CH6 (GPIO 14)
ADC2_CH7 (GPIO 27)
ADC2_CH8 (GPIO 25)
ADC2_CH9 (GPIO 26)
注意:使用Wi-Fi時(shí)不能使用ADC2管腳。因此,如果您使用Wi-Fi,并且無(wú)法從ADC2 GPIO獲取值,則可以考慮改用ADC1 GPIO,這應(yīng)該可以解決您的問(wèn)題。
ADC輸入通道具有12位分辨率。這意味著您可以獲得0到4095之間的模擬讀數(shù),其中0對(duì)應(yīng)于0V,4095對(duì)應(yīng)于3.3V。您還可以在代碼上設(shè)置通道的分辨率以及ADC范圍。
ESP32 ADC引腳沒(méi)有線(xiàn)性行為。您可能無(wú)法區(qū)分0和0.1V,或3.2和3.3V。在使用ADC引腳時(shí),您需要記住這一點(diǎn)。您將得到類(lèi)似于下圖所示的行為。
數(shù)模轉(zhuǎn)換器(DAC)
ESP32上有2 x 8位DAC通道,用于將數(shù)字信號(hào)轉(zhuǎn)換為模擬電壓信號(hào)輸出。這些是DAC通道:
DAC1 (GPIO25)
DAC2 (GPIO26)
RTC GPIOs
ESP32支持RTC GPIO。當(dāng)ESP32處于深度睡眠狀態(tài)時(shí),可以使用路由到RTC低功耗子系統(tǒng)的GPIO。這些RTC gpio可用于在超低功耗(ULP)協(xié)處理器運(yùn)行時(shí)將ESP32從深度睡眠中喚醒。以下GPIO可以用作外部喚醒源。
RTC_GPIO0 (GPIO36)
RTC_GPIO3 (GPIO39)
RTC_GPIO4 (GPIO34)
RTC_GPIO5 (GPIO35)
RTC_GPIO6 (GPIO25)
RTC_GPIO7 (GPIO26)
RTC_GPIO8 (GPIO33)
RTC_GPIO9 (GPIO32)
RTC_GPIO10 (GPIO4)
RTC_GPIO11 (GPIO0)
RTC_GPIO12 (GPIO2)
RTC_GPIO13 (GPIO15)
RTC_GPIO14 (GPIO13)
RTC_GPIO15 (GPIO12)
RTC_GPIO16 (GPIO14)
RTC_GPIO17 (GPIO27)
脈沖寬度調(diào)制
ESP32 LED PWM控制器有16個(gè)獨(dú)立通道,可以配置為生成具有不同特性的PWM信號(hào)。所有可以作為輸出的管腳都可以用作PWM管腳(GPIOs 34到39不能產(chǎn)生PWM)。
要設(shè)置脈沖寬度調(diào)制信號(hào),需要在代碼中定義這些參數(shù):
信號(hào)頻率;
占空比;
脈寬調(diào)制通道;
要輸出信號(hào)的GPIO。
I2C
ESP32有兩個(gè)I2C通道,任何管腳都可以設(shè)置為SDA或SCL。將ESP32與Arduino IDE一起使用時(shí),默認(rèn)I2C引腳為:
GPIO 21(SDA)
GPIO 22(SCL)
如果要使用其他管腳,在使用導(dǎo)線(xiàn)庫(kù)時(shí),只需調(diào)用:
Wire.begin(SDA, SCL);
SPI
默認(rèn)情況下,SPI的pin映射為:
中斷
所有GPIO都可以配置為中斷。
Strapping pins
ESP32芯片具有以下Strapping pins:
GPIO 0
GPIO 2
GPIO 4
GPIO 5(啟動(dòng)期間必須為高)
GPIO 12(啟動(dòng)期間必須低)
GPIO 15(啟動(dòng)期間必須為高)
這些用于將ESP32置于引導(dǎo)加載程序或燒錄模式。在大多數(shù)內(nèi)置USB/Serial的開(kāi)發(fā)板上,您不需要擔(dān)心這些管腳的狀態(tài)。電路板使引腳處于正確的燒錄或啟動(dòng)模式。有關(guān)ESP32引導(dǎo)模式選擇的更多信息,請(qǐng)參見(jiàn)此處。
但是,如果你有外設(shè)連接到這些引腳,你可能會(huì)有困難,試圖上傳新的代碼,用新固件燒錄ESP32或重置板。如果您有一些外設(shè)連接到Strapping pins,并且您在上載代碼或燒錄ESP32時(shí)遇到問(wèn)題,可能是因?yàn)檫@些外設(shè)阻止ESP32進(jìn)入正確的模式。請(qǐng)閱讀引導(dǎo)模式選擇文檔以指導(dǎo)您朝正確的方向前進(jìn)。復(fù)位、燒錄或啟動(dòng)后,這些引腳按預(yù)期工作。
Pins HIGH at Boot
一些GPIO在啟動(dòng)或重置時(shí)將其狀態(tài)更改為高或輸出PWM信號(hào)。這意味著,如果輸出連接到這些gpio,則在ESP32重置或引導(dǎo)時(shí)可能會(huì)得到意外的結(jié)果。
GPIO 1
GPIO 3
GPIO 5
GPIO 6 to GPIO 11 (connected to the ESP32 integrated SPI flash memory – not recommended to use).
GPIO 14
GPIO 15
啟用(EN)
啟用(EN)是3.3V調(diào)節(jié)器的啟用引腳。它被拉起來(lái)了,所以接地使3.3V調(diào)節(jié)器失效。例如,這意味著您可以使用連接到按鈕的該管腳來(lái)重新啟動(dòng)ESP32。
GPIO電流消耗
根據(jù)ESP32數(shù)據(jù)表中的“推薦操作條件”部分,每個(gè)GPIO的絕對(duì)最大電流為40毫安。
ESP32內(nèi)置霍爾效應(yīng)傳感器
ESP32還具有內(nèi)置霍爾效應(yīng)傳感器,可檢測(cè)周?chē)艌?chǎng)的變化。
聯(lián)系客服