- ESP32 將強大的 CPU、WiFi、藍牙和眾多週邊裝置整合到一個低成本的 SoC 中。
- 其高度重複使用的引腳排列最多可支援 34 個 GPIO,並具備 ADC、DAC、PWM、觸控和 RTC 功能。
- 有多個系列(WROOM、WROVER、S2、S3、C3、C6、CAM)適用於不同類型的專案。
- 它可以使用 Arduino、ESP-IDF 或 MicroPython 進行編程,涵蓋從簡單的原型到專業產品的所有內容。
如果你從事物聯網、家庭自動化或自動化系統的工作,遲早會接觸到ESP32。當你開始尋找相關資訊時,很容易比一開始更加困惑:引腳在這裡,型號在那裡,低功耗模式,WiFi,藍牙,攝像頭,PSRAM……看起來很混亂,但實際上,如果你冷靜地理解它,它是一個非常連貫的平台。
本文將為您提供一份全面且條理清晰的ESP32概述:它究竟是什麼,硬體層面的功能,引腳和特殊功能的組織方式,有哪些晶片系列,它們之間有何區別,哪些開發板最常用,每種開發板最適合您的需求,以及如何開始實際編程。本文旨在幫助您清楚了解ESP32生態系統,並知道如何選擇和使用合適的開發板,避免出錯。
ESP32是什麼?為什麼它如此受歡迎?
ESP32 是由樂鑫科技(Espressif Systems)開發的一款低成本、低功耗的 32 位元系統級晶片 (SoC)。它將強大的微處理器、Wi-Fi、藍牙(包括標準藍牙和低功耗藍牙)、記憶體、類比數位轉換器以及各種週邊整合到單一晶片上。這使其成為互聯計畫的「瑞士軍刀」。
經典款採用雙核心 Xtensa LX6 微處理器,通常運作頻率為 160 或 240 MHz,效能最高可達 600 DMIPS。較新的系列(例如 ESP32-C3 或 C6)採用低功耗 RISC-V 內核,而其他系列,例如 S2/S3,則在記憶體、功耗和輕量級 AI 功能方面有所改進。
ESP32 的關鍵特性之一是將WiFi 802.11 b/g/n 和藍牙(BR/EDR 和 BLE)整合在同一晶片上,共享無線電模組。這省去了外部連接模組,節省了電路板空間,並降低了成本。因此,它已成為家庭自動化專案、連網感測器、自動化系統和商業原型的實際標準。
除了處理器和無線電模組外,ESP32 還將520 KiB 的 SRAM和 ROM 直接整合到 SoC 中,並附帶用於透過 SPI 管理外部快閃記憶體的控制器。商用模組(例如 WROOM 或 WROVER)通常包含 4 到 16 MB 的整合式快閃記憶體,有些模組還添加了外部 PSRAM 以滿足對效能要求更高的應用(圖形、相機、人工智慧等)。
內部架構、記憶體和能源管理
ESP32 的內部架構結合了一個或兩個 Xtensa LX6/LX7 或 RISC-V 主核心和一個超低功耗 (ULP) 協處理器。此協處理器旨在以低功耗模式執行小型任務,例如在晶片其餘部分處於睡眠狀態以節省電池電量時定期讀取感測器資料。
記憶體分為多個區域:除了處理器使用的520 KiB 主 SRAM外,晶片還包含一個快速 RTC RAM 區域(約 8 kB)和一個慢速 RTC RAM 區域(約 8 kB)。快速 RTC RAM 允許在深度睡眠模式下保留數據,以便在喚醒後無需重新計算即可恢復設定或狀態。
在儲存方面,典型的設計是基於SPI連接的閃存,韌體和其他非揮發性資料儲存在其中。許多ESP32 WROOM模組配備4MB閃存,而更高級或面向相機的版本(例如帶有PSRAM的ESP32-WROVER、ESP32-S3等)則可配備8MB、16MB或更大的閃存。
電源管理是該平台的另一大優勢。該晶片整合了內部低壓差線性穩壓器 (LDO)、不同的電源域以及多種節能模式。在深度睡眠模式下,功耗可降至約 5 μA,可透過 GPIO、定時器、觸控感測器或 ADC 測量值喚醒,具體取決於 RTC 和 ULP 協處理器的配置方式。
在安全性方面,ESP32 支援所有標準的 IEEE 802.11 功能(最新版本支援 WPA、WPA2 和 WPA3,以及 WAPI),並提供安全啟動機制和快閃記憶體加密。它還整合了用於 AES、SHA-2、RSA、ECC 和隨機數產生器 (RNG) 的硬體加速器,以及一個 1024 位元 OTP 區域,用於儲存不可變的金鑰和參數。
ESP32引腳圖與功能重複使用
初次接觸 ESP32 DevKitC 或類似產品時,最引人注目的莫過於其引腳數量和多種功能。晶片上最多可配備 34 個 GPIO 引腳,但其中許多引腳與其他內部周邊復用,或專用於特定用途。
引腳復用是ESP32 的關鍵特性。透過配置晶片的引腳矩陣,大多數內部訊號(UART、I2C、SPI、PWM 等)都可以路由到幾乎任何 GPIO,而不會造成明顯的效能損失。電路板上顯示的引腳分配是預設的,但通常可以根據需要重新分配功能。
在設計專案時,務必注意某些引腳有特殊限制:有些引腳用於啟動(啟動引腳),有些連接到 SPI 閃存,還有一些與 JTAG 等調試介面相關。如果使用不當,系統可能無法啟動或變得不穩定。
ESP32 DevKitC 或 NodeMCU-32S 開發板透過兩排排針引出這些引腳。雖然不同廠商的佈局可能略有差異,但它們通常共享相同的 GPIO 編號和大部分功能,因此引腳圖和表格可以在不同開發板之間通用。
特殊引腳:連接引腳、僅輸入引腳、實時時鐘引腳和觸覺引腳
在GPIO引腳排列中,有一組啟動配置引腳,也稱為啟動配置引腳。這些引腳用於確定晶片的啟動方式、某些內部組件的電壓以及SPI快閃記憶體的一些參數。系統重設期間會讀取這些引腳,並將此時的邏輯電平鎖存,直到下次重設或斷電。
ESP32 上常用的接腳包括GPIO0、GPIO2、GPIO4、GPIO5、GPIO12 和 GPIO15。例如,GPIO0 必須為低電平才能進入下載模式;啟動期間不應強制將 GPIO2 置高;GPIO5 和 GPIO15 通常帶有上拉電阻以確保狀態正確;GPIO12 用於選擇某些記憶體的電壓。雖然這些引腳可以在電路中重複使用,但最好不要過載它們,也不要使用在開機期間改變其電平的電路。
還有一小部分引腳僅供數位和/或類比輸入,也就是說,它們不能用作輸出:GPIO34、GPIO35、GPIO36 和 GPIO39。此外,與其他 GPIO 引腳不同,這些引腳沒有內部上拉或下拉電阻,因此如果需要穩定它們的電平,則必須外部添加電阻。
一些 GPIO 連接到低功耗 RTC 子系統,被稱為RTC GPIO。它們包括以下組合:RTC_GPIO0-GPIO36、RTC_GPIO3-GPIO39、RTC_GPIO4-GPIO34、RTC_GPIO5-GPIO35、RTC_GPIO6-GPIO25、RTC_GPIO7-GPIO26、RTC_GPIO8-GPIO33、RTC_ PIO9-GPIO32、RTC_GPIO10-GPIO4、RTC_GPIO11-GPIO0、RTC_GPIO12-GPIO2、RTC_GPIO13-GPIO15、RTC_GPIO14-GPIO13、RTC_GPIO15-GPIO12、RGP_GPIO14-GPIO16-和 RTC_GPIO17-GPIO27。這些引腳可以實現的功能包括:使用 ULP 協處理器或低功耗中斷源將晶片從深度睡眠模式喚醒。
此外,ESP32 還整合了10 個電容式觸控感測器,分別對應特定的 GPIO 接腳:TOUCH0 (GPIO4)、TOUCH1 (GPIO0)、TOUCH2 (GPIO2)、TOUCH3 (GPIO15)、TOUCH4 (GPIO13)、TOTOUCH5 (GPIO12)、CTO149 (GPIO27)、TOUCH8 (GPIO33) 和 TOUCH9 (GPIO32)。當電容負載(例如手指)靠近這些引腳時,晶片會偵測到電容的變化,從而無需額外元件即可實現觸控按鈕、滑桿或接近感應功能。
最後,我們必須提到EN(使能)引腳,它控制模組內部的 3,3V 穩壓器。此引腳通常隨附一個 3.3V 上拉電阻,將其拉低即可禁用穩壓器,從而有效地重設或關閉 ESP32 的電源。許多應用將此引腳用作全域重設引腳。
GPIO、中斷與類比功能(ADC、DAC、PWM)
一般來說,ESP32 提供多達34 個 GPIO 引腳,可配置為數位輸入或輸出,並且大多數引腳都可以啟用內部上拉或下拉電阻。幾乎所有這些引腳都可以配置為中斷來源,這大大簡化了事件回應系統(按鈕、感測器、偵測器等)的設計。
類比部分功能相當全面:ESP32 整合了兩個 12 位元 SAR ADC,可提供多達 18 個輸入通道。這些通道分為 ADC1(8 個通道)和 ADC2(10 個通道)。典型的分配如下:ADC1_CH0-GPIO36、ADC1_CH1-GPIO37、ADC1_CH2-GPIO38、ADC1_CH3-GPIO39、ADC1_CH4-GPIO32、ADC1_CH5-GPIO33、ADC1_CH6-GPIO34、ADCIO32、ADC1_CH5-GPIO33、ADC1_CH6-GPIO34、ADC1_CH7-GPIO35; ADC2_CH0-GPIO4、ADC2_CH1-GPIO0、ADC2_CH2-GPIO2、ADC2_CH3-GPIO15、ADC2_CH4-GPIO13、ADC2_CH5-GPIO12、ADC2_CH6-GPIO14、ADC2_CH7-GPIO27、GPIO2_ADC2_CH6-GPIO14、ADC2_CH7-GPIO27、GP2_288-25698-26-9
如果您正在使用 Wi-Fi 或藍牙,請注意一個重要細節:當無線電模組在使用時,ADC2 將無法使用。在這種情況下,要進行類比讀數,您必須使用 ADC1 通道,使用 ADC1 通道不會影響連線。 12 位元解析度可提供 4096 個電平(0-4095),在典型的 0-3,3V 範圍內,這相當於約 0,8mV 的步長。
為了產生類比輸出訊號,ESP32 內建了兩個 8 位元 DAC,分別連接到 GPIO25 (DAC1) 和 GPIO26 (DAC2)。這些轉換器可以將 0 到 255 之間的數位值轉換為 0 到 3,3V 之間的類比電壓,無需外部晶片即可產生簡單的波形、電壓基準、基本音訊或訊號調製。
在PWM領域,此電路板配備16個可程式PWM通道,並由專用控制器進行管理。任何PWM通道都可以映射到不同的GPIO引腳,並且可以調節頻率和占空比。它非常適合控制LED(包括調光)、舵機、直流馬達以及任何需要可調PWM訊號的負載。
通訊介面:UART、I2C、SPI 等
ESP32 的另一個亮點在於其豐富的整合介面。在串列層面,它擁有三個硬體 UART:UART0、UART1 和 UART2,能夠以高達 5 Mbps 的速度在非同步模式(例如 RS232 和 RS485)甚至 IrDA 模式下運作。在大多數開發板上,UART0 引腳連接到 USB 轉串口轉換器,用於編程和調試,因此除非您非常熟悉相關流程,否則最好不要在最終專案中重複使用這些引腳。
UART1 通常預留給整合的 SPI 快閃記憶體,尤其是在 ESP32-S3 等模組或具有更複雜外部快閃記憶體的版本中。因此,許多指南建議,當需要連接其他 UART 設備(例如 GPS 模組、其他微控制器等)時,請務必使用 UART2 作為使用者串列埠。
就 I2C 匯流排而言,ESP32 整合了一個或兩個 I2C 控制器(取決於型號),預設情況下,它支援標準的 I2C 匯流排,SDA 引腳連接到 GPIO21,SCL 引腳連接到 GPIO22。但是,與其他週邊設備一樣,您可以使用軟體將 SDA 和 SCL 重新對應到其他 GPIO,例如,在 Arduino 中使用 `wire.begin(SDA, SCL)` 函數。只要位址匹配,您就可以將數十個感測器和裝置連接到單一 I2C 總線上。
關於SPI,該晶片提供三種SPI匯流排:SPI、HSPI和VSPI。基本匯流排通常用於內部板載閃存,因此對於您的專案而言,您主要需要關注的是HSPI和VSPI。許多標準庫預設使用VSPI與顯示器、SD卡讀卡器、外部無線模組等設備通訊。
內部SPI快閃記憶體有一組特別敏感的接腳:GPIO6 (SCK/CLK)、GPIO7 (SDO/SD0)、GPIO8 (SDI/SD1)、GPIO9 (SHD/SD2)、GPIO10 (SWP/SD3) 和 GPIO11 (CSC/CMD)。這些引腳專用於與快閃記憶體通信,切勿在電路中使用;將它們連接到任何外部設備通常會導致系統崩潰、啟動錯誤或資料損壞。
除了 UART、I2C 和 SPI 之外,ESP32 還整合了I2S、CAN 2.0、乙太網路 MAC、SD/SDIO 控制器、TX/RX 紅外線控制器、脈衝計數器和其他進階週邊。這使得它能夠勝任多種功能,例如用作網路網關、播放或擷取數位音訊、與工業匯流排通信,或作為更複雜馬達和編碼器的控制器。
ESP32 系列及型號:WROOM、WROVER、S2、S3、C3、C6 和 ESP32-CAM
當您想購買 ESP32 時,WROOM、WROVER、S2、S3、C3、C6 或 ESP32-CAM等名稱會很快出現。儘管它們都屬於 ESP32 生態系統,但它們並不相同。一方面,我們有「純粹的」SoC 晶片;另一方面,我們有整合該晶片及其他組件的模組和開發板。
「ESP32模組」(例如ESP32-WROOM-32或ESP32-WROVER)是一個矩形金屬塊,內部包含晶片、快閃記憶體、有時還包含PSRAM以及天線。這些模組設計用於直接焊接在定制電路板上。許多製造商隨後會在其上安裝“開發板”,並添加USB連接埠、穩壓器、可存取引腳和重設/啟動按鈕,例如DevKitC、NodeMCU-32S、LOLIN32等。
在我們的晶片系列中,主要有以下幾種:經典的 ESP32系列(最初的雙核,支援 WiFi + 藍牙,文件非常完善)、ESP32-S2系列(單核,不支援藍牙,原生支援 USB,非常適合專注於 WiFi 和 USB 的設備)、ESP32-S3系列(雙核,擁有更大的 RAMLE 並改進了對 BLE 的功能級相機或對壓級。ESP32-C3系列(RISC-V 內核,低成本,支援 WiFi + BLE 5,旨在取代 ESP8266)以及ESP32-C6系列(支援 WiFi 6、BLE 5,並在某些情況下支援 Thread 等技術,專為家庭自動化和現代網路而設計)。
ESP32-WROOM模組是傳統開發板中最常見的模組。它通常配備 4MB 快閃記憶體(也有 8MB 或更大容量的版本)、標準內部 RAM 以及整合的 Wi-Fi 和藍牙功能。它非常適合感測器、自動化和智慧家庭等通用項目,這些項目不需要攝影機或大量的額外 RAM。
ESP32-WROVER模組增加了外部 PSRAM,使其更適合需要大量記憶體的項目,例如影像處理、大緩衝區、圖形應用程式或嵌入式 AI。它的價格通常也更高一些;如果你的項目用不到這些額外的內存,那麼你實際上是在為用不到的東西買單。
ESP32-CAM開發板已成為低成本視訊監控專案的經典之選。它整合了 ESP32 晶片、相機(通常為 OV2640 感測器)和 microSD 卡槽,非常適合構建家用 IP 相機、智慧門鈴或進行簡單的視覺實驗。然而,它可用的 GPIO 引腳數量明顯較少,而且編程和供電也更為敏感。
如何為您的專案選擇合適的 ESP32 型號
選擇合適的 ESP32 型號與其說是記住所有名稱,不如說是要明確四個關鍵要求:是否需要相機、是否優先考慮低電池功耗、應用程式是否需要大量記憶體(例如 PSRAM)以及是否需要特定技術,例如 BLE 5 或 WiFi 6。
如果你是新手,想要一塊可以用來學習、安裝感測器、嘗試 Wi-Fi 和藍牙功能以及學習大多數教程的開發板,那麼最明智的選擇通常是帶有 WROOM 模組的 ESP32 開發套件。它價格實惠,與範例和庫高度相容,並且擁有豐富的文件。對於許多「普通」的物聯網和智慧家庭專案來說,這個選擇綽綽有餘。
當您的專案包含整合式相機時,您有兩個主要選擇:使用 ESP32-CAM 板(非常經濟實惠且緊湊,是簡單 WiFi 相機的理想選擇),或者如果您需要更高的效能、更複雜的演算法或具有螢幕的使用者介面,則可以選擇支援相機和更大記憶體的 ESP32-S3。
如果您優先考慮低功耗和電池供電,特別是對於大部分時間處於睡眠模式的感測器節點,ESP32-C3 系列是一個非常不錯的選擇。它採用 RISC-V 架構,具備先進的 Wi-Fi 和 BLE 功能,功耗極低,並且足以滿足感測、資料傳輸和基本邏輯任務的需求。
對於重視WiFi 6、BLE 5 以及未來對 Thread 或 Matter 等技術支援的「下一代」智慧家庭專案而言,ESP32-C6 系列晶片尤其具有發展潛力。雖然它比經典的 ESP32 更新一些,普及程度也略遜一籌,但它的設計旨在適應日益複雜的智慧家庭生態系統。
典型用例及與其他平台的比較
在日常應用中,ESP32 常用於家庭自動化、感測器、穿戴式裝置、自動化系統和物聯網原型開發。一個典型的例子是控制燈、插座、百葉窗或馬達的繼電器,並透過 Wi-Fi 與本地伺服器或雲端通訊。另一個常見的應用是溫度、濕度、人體感應或空氣品質感測器,它們會定期向後端報告數據。
由於整合了藍牙(包括 BLE),它也被廣泛用於與手機通訊的便攜式設備或穿戴式裝置:心率監測器、計步器、小型睡眠監測器等。 WiFi 可用於將資料上傳到互聯網或提供網路配置介面,而 BLE 則負責與應用程式或其他附近感測器進行通訊。
另一個非常常見的應用是將 ESP32 用作系統的網關或核心,透過 UART、SPI 或 I2C 與其他模組(例如,經典的 Arduino、工業感測器、顯示器等)通信,並透過 Wi-Fi 提供 API、MQTT 或 Web 介面。它也被用於音訊項目,利用 I2S 介面以及即時處理語音和音樂的能力。
與「純粹的」Arduino Uno相比,ESP32擁有更強大的運算能力、整合的WiFi/藍牙連接、更大的記憶體和更豐富的外部設備,同時價格卻相近甚至更低。與舊款ESP8266相比,ESP32在核心數、記憶體、GPIO接腳數和介面種類方面都遙遙領先。
與樹莓派 Pico W 相比,兩者在效能和功耗方面更為接近,但 ESP32 的物聯網和智慧家庭軟體及庫生態系統非常成熟。此外,由於所有連接協定棧(包括硬體安全)都整合在同一晶片上,因此無需像樹莓派那樣搭載完整的作業系統,即可更方便地應用於終端產品中。
開發環境:Arduino IDE、ESP-IDF 和 MicroPython
在對 ESP32 進行程式設計時,您有多種開發環境可供選擇。業餘愛好者和創客最常用的是 Arduino 生態系統:既可以使用傳統的 Arduino IDE,也可以使用整合到 Visual Studio Code 中的 PlatformIO,後者簡化了函式庫和大型專案的管理。
要在 Arduino IDE 中添加 ESP32 支持,請從開發板管理器安裝“ESP32 by Espressif”開發板軟體包,使用 Espressif 在其 GitHub 上提供的穩定版本連結。安裝完成後,您可以選擇開發板(例如“ESP32 開發模組”或您開發套件中的特定型號),並使用諸如 pinMode、digitalWrite、analogRead 等函數以及 WiFi、藍牙、HTTP、MQTT 等專用庫,以幾乎與 Arduino 完全相同的方式對其進行編程。
Espressif 官方開發環境是ESP-IDF(Espressif IoT 開發框架),這是一個 C/C++ 框架,可對硬體、FreeRTOS 使用、記憶體管理、功耗、網路協定堆疊和進階安全功能進行精細控制。它是專業項目或需要最大限度發揮晶片性能的項目的首選。
另一個非常方便的選擇是MicroPython,它是一個輕量級的 Python 實現,專為微控制器而設計。在 ESP32 上,它允許您使用 Python 腳本來操作 WiFi、BLE、GPIO、I2C、SPI 等接口,您可以快速上傳和修改這些腳本。它尤其適用於教育、快速原型開發以及那些開發速度比效率更重要的場景。
無論選擇哪種環境,都建議參考Espressif 官方文件(資料手冊、入門指南、API 參考)以及包含 Arduino-ESP32 和 ESP-IDF 的範例。 GitHub 社群、ESP32 專屬論壇以及 Reddit 等平台也提供了大量現成的項目,可以根據您的需求進行調整。
高級引腳排列、限制以及與相機和 SD 卡的擴展
當你深入了解 ESP32 的使用時,你會遇到一些需要注意的引腳細節。其中之一是 ADC2 與前面提到的 WiFi/藍牙模組不相容;另一個是 JTAG 引腳(GPIO12、13、14 和 15)在硬體調試中的作用。如果你不使用 JTAG,可以將它們視為普通的 GPIO,但同時也要注意它們的跳線功能。
仔細規劃引腳至關重要,尤其是在需要同時使用多種功能(例如 GPIO、ADC、I2C、SPI、相機、SD 卡等)的專案中。一些引腳預留用於電源和關鍵訊號,例如 3.3V、GND 以及連接到 SPI 快閃記憶體的引腳。如果穩壓器無法承受,則應避免從板上的 3.3V 或 5V 引腳汲取大電流,並且避免在沒有適當驅動器的情況下將大負載直接連接到 GPIO 引腳。
一些專為 ESP32 設計的套件和擴充板整合了特定功能,例如OV2640 相機模組、microSD 卡讀卡器和 18650 電池支援。它們通常提供兩排引腳:一排是用於快速原型開發的母座,另一排是用於更永久安裝的螺絲端子,例如在「現場」物聯網專案或固定安裝中。
這些擴充板通常在控制相機和microSD卡的引腳上帶有上拉/下拉電阻,因此如果您打算將它們用作通用輸入或輸出,則應查閱擴充板的資料手冊。諸如主電源開關、專用電池充電埠和狀態指示燈等細節在建立電池供電的獨立設備時至關重要。
實際上,ESP32、OV2640 相機、microSD 卡和 18650 電池的組合可以讓你建立相當完整的遠端視覺節點,能夠進行串流媒體、定期捕獲圖像或運行簡單的檢測演算法,在需要時透過 USB 為電池充電,並將所有組件保持在緊湊的格式中。
在仔細研究了晶片的內部工作原理、引腳排列、產品系列、典型應用案例和開發工具之後,可以清楚地看出,ESP32 以非常實惠的價格提供了大量的集成功能、設計靈活性和低功耗選項,使其成為構建物聯網、家庭自動化或結合無線連接、良好處理能力和成熟軟體生態系統的自動化項目時,很難找到與之敵匹的平台。