最近,我迷上了用 ESP32 做電子製作,所以想根據自己做過幾個雜七雜八作品的經驗,介紹一下使用 ESP32 進行大致上的電子製作方法。
ESP32 系列是由中國公司 Espressif Systems 開發的微控制器系列。很多機型都內建 Wi-Fi 或藍牙模組,利用這些功能可以很容易做出能連接周邊裝置並進行某些操作的電子作品。
以前大多數機型只能透過 UART 進行程式燒錄(大概是這樣),但最近能直接透過 USB 連接電腦等裝置並燒錄程式的機型已經大幅增加。
至少筆者認為,大多數 ESP32 系列不但 Flash 容量不像 Arduino UNO 那麼少,還支援 UART、SPI、I2C 等主要通訊協定,也內建 PWM、ADC 等功能,算是相當好用。(看起來沒有 DAC)
前言就先說到這裡。。。
ESP32 有幾個不同的型號,各自有不同特點。(以下是筆者主觀感受)
筆者主要會使用 ESP32-C 系列與 H 系列較新的型號(例如 ESP32-C3、ESP32-H2),原因是可以直接透過 USB 燒錄程式。(若是 UART 方式,則需要另外準備 USB-UART 轉換電路之類的東西,覺得很麻煩)
以下這類電子作品,大多用 C 系列或 H 系列就足夠了。筆者也大致只做過這種程度的作品而已。
這裡主要介紹適用於 C 系列與 H 系列的 ESP 周邊電路設計。
(如果你覺得這些都不需要,反正有現成開發板就好,那建議直接上一頁)
C 系列與 H 系列中有不少型號內建了晶體振盪器(不確定是不是全部,需自行確認),基本上只要至少正確接好以下幾項,應該就能先運作。(筆者的環境下是能動的)

下面是 ESP32-H2-MINI-1 的腳位配置,但不同系列與型號的腳位分配可能會有些微差異,要注意。
另外,這個型號是類似 BGA 的封裝,沒有錫膏與熱板的話很難實裝。

這裡是 ESP32-C3-WROOM-02 這個型號,由於腳位焊盤是從封裝側面露出來的類型,也不是不能用烙鐵來實裝。

回到正題,ESP32-H2-MINI-1 的腳位配置詳細如下。↓
特別是 SPI 的標示不太容易看懂,但若換成一般 4 線式 SPI,對應如下。
(大概是 Quad SPI 的標示?)
| 周邊標示 | 4 線式 SPI |
|---|---|
| FSPICLK | SPI CLK |
| FSPID | SPI MOSI |
| FSPIQ | SPI MISO |
| FSPICSx | SPI CS |

其他像 I2C、PWM、GPIO 等周邊,似乎可以在一定程度上自由分配腳位。不過 ADC、32.768kHz 晶體振盪器、UART、SPI、USB 等可分配的腳位好像是固定或有限的,要注意。
跟其他微控制器一樣,EN 腳(重置腳)周邊也必須妥善設計。(雖然不需要搞得非常複雜,但如果太隨便,可能會無法正常啟動)
ESP32 的 EN 腳需要從外部以電源電壓等方式做 pull-up,而且必須設計成符合以下的上電時序。(邏輯當然是低有效)

不同型號可能會有些微差異,但以 ESP32-H2-MINI-1 來說,電源電壓上升後至少需要等待 tSTBL = 50us。
如果將上拉電阻設為 10kΩ,並在 GND 間接上 0.1uF~1uF 左右的電容,應該就足以滿足這個條件。
下面是電路示意。這個例子雖然標示為不實裝,但也有放一顆重置 IC(❌ 標記)。
我覺得這算是鐵則,EN 與 GND 間最好再加一個小按鈕,這樣也能手動重置,很方便。

ESP32 有兩個 boot select 腳。
在 ESP32-H 系列中,GPI08 與 GPIO9 被分配為 Boot Select 腳。(不同系列可能不同,需確認)
如下表所示,透過控制啟動時 GPIO8 與 9 的狀態,可以用兩種 Boot mode 開機。
SPI Boot 模式會啟動寫入 ESP32 的程式(更精確地說,是從內部透過 SPI 連接的快閃記憶體讀出程式後啟動)。
相對地,Joint Download Boot 模式則是從 USB 或 UART 下載程式後再啟動的模式。

先看 GPIO8,其應有的邏輯為 Any value 或 1。因此,GPIO8 用 10kΩ 左右上拉是合理的。
另一方面,GPIO9 基本上維持在 1(上拉)應該也沒問題。你可能會以為正常開機與燒錄程式時必須把 GPIO9 在 1 ↔ 0 間切換,但至少依照原廠建議的燒錄方式,內建的 USB-Serial-JTAG 控制器會在內部自動把燒錄模式切換成 Joint Download Boot。(燒錄方式等內容會在別的文章介紹)不過,由於各種因素,有時這個燒錄模式切換可能不順利,所以最好還是準備一個可手動拉低的開關。
電路大致如下:

跟其他廠牌的微控制器一樣,電源腳除了正常的 3.3V 之外,還有一個看起來是供電池使用的 VBAT 腳。不過至少在 ESP32-H 系列與 C 系列中,這兩個電源腳在金屬屏蔽罩內部是用 0Ω 跳線電阻直接相連的。雖然不知道 VBAT 腳存在的意義是什麼,但 3.3V 的供電只要接到 3.3V 腳即可。
電路如下。查了一下據說 ESP 模組內部也已經有 3.3V - GND 間的去耦電容,不過為了穩定運作,再額外接一些去耦電容也沒問題。

USB 支援到 2.0 Full-Speed(12Mbps)。ESP 端的 USB 腳位是固定對應到特定腳位,只要注意不要把 +/− 接反即可。

USB 端的設計我認為還是要稍微認真做一下比較好。雖然隨便設計有時候也可能能用。筆者通常會注意以下幾點:

另外,也可以將 VBUS 接到 5V → 3.3V 轉換電路,作為 ESP32 的電源。
下面這個例子用了比較貴的切換式穩壓器,不過市面上也有很多 100~300 日圓左右就能買到的切換式穩壓器,因此用那些來設計電路也可以。

到這裡為止,只要把電路設計好,就能做出可用 USB 供電驅動 ESP,並且可從 USB 燒錄程式的電路圖。
如果要使用 SPI、I2C、PWM 等功能,就要邊參考資料表邊進行設計。
上述說明與圖片大多引用自以下文件。
↓ESP32-H2-MINI-1 資料表
這裡介紹在基板設計上比較值得特別注意的地方。
例如使用 ESP32-H2-MINI-1 時,基板焊盤大致如下。
標有 Antenna Area 的部分與內建天線區域重疊,因此應避免走線與鋪銅(包含 GND 大面積銅箔)。KiCad 提供的 footprint 會把該區域設成禁佈區,因此不容易誤放。
另外,這個型號是類似 BGA 的 SMD 封裝,所有端子都配置在晶片背面。要實裝幾乎必須有錫膏與熱板或熱風槍。向 JLCPCB 等廠商訂製基板時,也建議一併訂購用來精準塗佈錫膏的鋼網。
端子尺寸與 pitch 都很小,約 0.2~0.3mm 寬的走線剛剛好。以下範例為了省基板費,硬塞在雙層板上;但如果想做得比較正式,我認為 4 層以上會比較好。

USB 周邊大致如下。這個例子中,黃色標示的 USB+/- 走線盡量做得短。若很難縮短,通常就讓 USB+/- 兩端被 GND 大面積銅箔包圍,這是常見做法。(雖然因為只有 Full Speed 12Mbps,可能不必太過神經質。)
另外 VBUS 與 GND 則可依耗電電流設計成適當的線寬。

Boot Select 與 EN 腳周邊的電路(開關等)沒有什麼特別需要注意的地方,所以這裡省略。。。
前面寫了這麼多,其實只要去買像秋月電子也有賣的這類開發板,就不需要自己搞這些事情,全部都能解決。
↓ESP32-H2-MINI-1 開發板

如果你想連基板尺寸、概念與各種細節都完全自行自由設計,那麼不妨試試看。
另外,這篇的續篇(開發環境建置、實機運作)我也整理成後篇,放在以下。