Learning Objectives
- 說出微控制器與單板電腦(例如樹莓派)的差別,以及各自適合的用途
- 認識 ESP32 的主要規格:雙核心處理器、Wi-Fi、藍牙、GPIO 與 ADC
- 分辨晶片、模組與開發板,知道 ESP32 家族有不同型號
- 知道哪些腳位只能輸入、哪些腳位最好不要用
一顆可以連網的小電腦
智慧插座、空氣品質偵測器、自動澆花器、會把溫度傳到手機的小盒子:這些物聯網(IoT)裝置裡, 常常有一顆和 ESP32 類似的晶片。它要做的事很單純:讀感測器、控制開關、透過 Wi-Fi 把資料送出去,而且要省電、體積小。
ESP32 是上海的樂鑫科技(Espressif Systems)在 2016 年推出的晶片,前一代是 ESP8266。 它把處理器、記憶體、Wi-Fi 與藍牙都整合在同一顆晶片上,所以很適合拿來做會連網的作品。
這一軌用 MicroPython(給微控制器用的 Python)寫程式。你會從點亮 LED 開始,一路做到連上 Wi-Fi、用 MQTT 收送訊息的感測節點。 這一課先認識 ESP32 是什麼、開發板上有什麼,下一課再把 MicroPython 裝進去。
微控制器和單板電腦有什麼不同
ESP32 是微控制器(microcontroller,MCU),樹莓派是單板電腦(single-board computer)。兩者都很小、都能接感測器,但定位不同:
| 微控制器(ESP32) | 單板電腦(樹莓派) | |
|---|---|---|
| 作業系統 | 沒有一般的作業系統,開機直接執行你的程式 | 執行 Linux,程式是作業系統上的一個應用程式 |
| 開機 | 通電後很快就開始執行 | 要等作業系統開機 |
| 記憶體 | KB 等級(ESP32 有 520 KB SRAM) | GB 等級 |
| 耗電 | 低,深度睡眠可以很省電,適合電池供電 | 較高,通常要持續供電 |
| 擅長 | 讀感測器、控制開關、準確的時序、長時間運作 | 跑網頁伺服器、資料庫、影像處理、多個程式同時執行 |
簡單說:一直盯著一件事、要省電、要便宜用微控制器;要處理大量資料、要跑完整的軟體用單板電腦。 兩者也常一起用:多個 ESP32 感測節點把資料傳給一台樹莓派整理。「樹莓派」軌和「自造者入門」軌第 01 課有更多比較。
「計算機概論」軌介紹過電腦的基本架構(CPU、記憶體、輸入輸出),微控制器就是把這些全部放進一顆晶片的小電腦。
ESP32 的規格
以下是原版 ESP32 的主要規格(取自樂鑫的 ESP32 系列規格書):
| 項目 | 規格 |
|---|---|
| 處理器 | Xtensa 32 位元 LX6,雙核心(也有單核心的型號),最高 240 MHz |
| 記憶體 | 520 KB SRAM、448 KB ROM;程式與檔案放在外接的快閃記憶體(flash) |
| Wi-Fi | 802.11 b/g/n,2.4 GHz |
| 藍牙 | Bluetooth v4.2 BR/EDR 與藍牙低功耗(BLE) |
| GPIO | 34 支可程式化的腳位 |
| 類比輸入 | 12 位元 ADC,最多 18 個通道 |
| 其他 | 2 個 8 位元 DAC、10 個觸控感測、PWM、I2C、SPI、UART 等 |
| 工作電壓 | 2.3V~3.6V,一般使用 3.3V |
注意最後一行:ESP32 是 3.3V 的晶片,腳位的高電位是 3.3V。之後接模組時要確認它能接受 3.3V 的訊號,不要把 5V 直接接到 GPIO。
晶片、模組、開發板
- 晶片:就是 ESP32 本身,一小塊方形的積體電路。
- 模組:晶片加上快閃記憶體、石英振盪器、天線,外面包一層金屬殼,例如 ESP32-WROOM-32。
- 開發板:把模組焊在一塊板子上,加上 USB 接頭、USB 轉序列晶片、穩壓器、按鈕與 LED,兩側拉出排針, 插在麵包板上就能用,例如樂鑫的 ESP32-DevKitC。這一軌說的「ESP32」都是指開發板。
開發板上通常有兩個按鈕:EN(重設,按一下就重新開機)與 BOOT(下一課燒錄韌體時可能用到)。
ESP32 家族
樂鑫後來推出了許多型號,名稱都以 ESP32 開頭,但處理器與功能不同:
| 型號 | 特色 |
|---|---|
| ESP32(原版) | Xtensa LX6 雙核心,Wi-Fi+傳統藍牙與 BLE;本課程以它為準 |
| ESP32-S2 | Xtensa LX7 單核心,有 USB,沒有藍牙 |
| ESP32-S3 | Xtensa LX7 雙核心,有 USB,藍牙 5(BLE) |
| ESP32-C3 | RISC-V 處理器,藍牙 5(BLE) |
| ESP32-C6 | RISC-V 處理器,支援 Wi-Fi 6 |
不同型號的腳位編號、ADC、PWM 細節不一樣,買板子與查資料時要先確認型號。
逐步看:ESP32 上的第一支程式
先看看 MicroPython 程式長什麼樣子:和一般 Python 幾乎一樣,多了 machine 這種控制硬體的模組。
上方是開發板,藍色的板上 LED 接在 GPIO2。每一行的意思下一課、下下課會詳細說明,這裡先看整體。
腳位不是每一支都一樣
開發板兩側的排針上印著 GPIO 編號(例如 D23、G23 或 23,依廠商而不同)。
程式裡用的是 GPIO 編號,不是排針的第幾支。大部分 GPIO 可以當輸入或輸出,但有幾群要注意:
| 腳位 | 限制 |
|---|---|
| GPIO34~39 | 只能當輸入,而且沒有內建上拉、下拉電阻;適合接感測器 |
| GPIO6、7、8、11、16、17 | MicroPython 官方文件提醒:用來連接板上的快閃記憶體(或 PSRAM),不建議拿來做別的事 |
| GPIO1、3 | 序列埠(UART0)的 TX、RX,電腦和開發板溝通用,也就是下一課 REPL 走的線 |
| GPIO0、2、5、12、15 | 開機設定腳位(strapping pins):開機那一刻的電位會決定開機模式等設定,接了會拉高、拉低的電路可能導致無法開機 |
初學時,接 LED、按鈕、感測器優先用 GPIO4、13、18、19、21、22、23、25、26、27、32、33。 GPIO2 接著板上 LED,也是開機設定腳位,拿來閃板上 LED 沒問題,外接電路時避開比較保險。 用程式把只能輸入的腳位設成輸出,MicroPython 會直接拒絕:
逐步看:哪些腳位能當輸出
程式依序嘗試把四支腳位設成輸出。設定失敗時 Pin() 會丟出 ValueError,用 try/except 接住,印出原因。
小測驗:微控制器與規格
下面哪一個專題比較適合用 ESP32,而不是樹莓派?
ESP32 腳位的高電位大約是多少?
「ESP32-WROOM-32」指的是什麼?
小測驗:腳位
下面的程式模擬「哪些腳位能當輸出」,會印出什麼?
input_only = range(34, 40)
ok = [n for n in (2, 23, 36, 25, 39) if n not in input_only]
print(ok)
外接電路接在 GPIO12 之後,開發板常常無法正常開機。最可能的原因是什麼?
重點整理
- ESP32 是樂鑫在 2016 年推出的微控制器:雙核心最高 240 MHz、520 KB SRAM、Wi-Fi 與藍牙整合在同一顆晶片。
- 微控制器開機直接執行你的程式、省電、適合長時間做一件事;單板電腦跑完整的作業系統,適合大量運算與複雜軟體。
- ESP32 是 3.3V 的晶片;平常用的是把模組焊在板上、加了 USB 與排針的開發板。
- ESP32 家族有 S2、S3、C3、C6 等型號,腳位與功能不同,查資料前先確認型號。
- 腳位限制:GPIO34~39 只能輸入;GPIO6、7、8、11、16、17 接快閃記憶體;GPIO1、3 是序列埠;GPIO0、2、5、12、15 是開機設定腳位。
下一課把 MicroPython 韌體燒進 ESP32,並在 REPL 裡一行一行地下指令。