好,該來的還是來了。Arduino ESP32 Core 3.0.0 的版本正式發布了,而且這次不是小打小鬧的更新,是個大版本,幾乎可以說是從裡到外都換了一輪的感覺。
我自己是覺得,這感覺很像兩年多前他們從 1.x 版跳到 2.0.0 版的時候。那次是為了支援 ESP32-S2、S3 跟 C3,搞得天翻地覆,但也真的帶來了超多新東西。結果這才多久,新的晶片又來了,所以 3.0.0 的出現其實完全不意外。樂鑫 (Espressif) 這家公司,老實說,出晶片的速度真的跟下蛋一樣快... 開玩笑的,但他們真的很積極。
重點一句話
一句話講完:全面支援 ESP32-C6 和 H2 這兩顆帶有 Wi-Fi 6 和 Thread/Zigbee 新無線技術的晶片,同時把底層換成最新的 ESP-IDF 5.1,還塞了一個超級實用的「周邊管理器」來防止你接錯腳位。
所以,多了哪些新玩具?ESP32-C6 與 H2 登場
這次更新最大的亮點,毫無疑問就是這兩顆新的 SoC。以前我們玩 ESP32,要嘛就是 Wi-Fi 加藍牙,後來多了 S3 的 AI 功能。但現在,物聯網的戰場已經不只是 Wi-Fi 了。
這點我覺得特別有感。尤其在美國,Apple 和 Google 都在推 Matter 這個新的智慧家庭標準,它的底層很大一部分就是跑 Thread。所以樂鑫快速跟進,推出原生支援這些技術的晶片,完全是意料之中。在台灣雖然還沒那麼普及,但看看蝦皮或對岸淘寶,支援 Thread/Zigbee 的設備也越來越多,這表示我們 Maker 的軍火庫也該升級了。
來,直接看表格比較清楚,這兩顆到底差在哪:
| 比較項目 | ESP32-C6 | ESP32-H2 |
|---|---|---|
| 核心處理器 | 32-bit RISC-V,最高 160 MHz | 32-bit RISC-V,最高 96 MHz |
| 主要賣點 | Wi-Fi 6! 終於啊。還有藍牙 5 (LE) 跟 802.15.4。 | 純粹的 802.15.4 (Thread/Zigbee) + 藍牙 5 (LE)。 |
| 有沒有 Wi-Fi? | 有,而且是 Wi-Fi 6 (2.4 GHz)。人多的地方干擾會少一點,理論上也更省電。 | 沒有 Wi-Fi。 對,你沒看錯,這顆晶片專攻低功耗的 mesh 網路。 |
| 適合做什麼? | 需要連上傳統 Wi-Fi 路由器,但又想玩 Matter (over Wi-Fi) 或其他需要高速網路的裝置。像是...嗯...智慧攝影機、串流聲音之類的。 | 超適合當作 Thread 邊界路由器 (Border Router) 的一部分,或是終端節點。例如溫濕度感測器、智慧開關、門鎖這些。功耗低是王道。 |
| 我的個人看法 | 算是 C3 的「全能升級版」。什麼都有,什麼都支援。如果預算夠,而且不確定未來會不會用到 Thread/Zigbee,選它就對了,很保險。 | 定位非常明確,就是要做 Thread/Zigbee 裝置。如果你的專案根本不需要連 Wi-Fi,用它就對了,更省電、成本可能也更低。是個「專才型」選手。 |
不只是新晶片,骨子裡都換了
如果你覺得 3.0 就只是加了兩個新晶片的支援,那誤會可就大了。它底層的改動,我自己是覺得,對開發者的日常體驗影響更大。
救星登場:周邊管理器 (Peripheral Manager)
這個功能我真的要給它一百個讚。說真的,應該很多人都遇過,專案莫名其妙當掉,查了半天發現是同一個 GPIO 腳位,一下子拿去給 SPI 用,一下子又設定給 RMT 用,結果周邊就衝突了。或是誤用到 Flash 專用的腳位。
以前,IDE 不會警告你,它只會默默地讓你的板子 crash 或出現一些靈異現象。現在這個「周邊管理器」會在初始化之後,直接印出一份報告,告訴你哪個腳位現在被哪個周邊佔用了。
简单講,它就是你旁邊的一個囉嗦但可靠的學長,在你準備把線插錯洞之前,先拍你的頭說:「喂!這隻腳已經在用了啦!」
當你把 Debug Level 設定成 Verbose,就會看到類似下面這種報告。你看,它會很清楚地列出 GPIO 的使用情況,還有晶片、記憶體、分區等各種資訊,除錯時超級方便。
...
============ After Setup Start ============
INTERNAL Memory Info:
------------------------------------------
Total Size : 341480 B ( 333.5 KB)
Free Bytes : 314976 B ( 307.6 KB)
...
------------------------------------------
GPIO Info:
------------------------------------------
8 : I2C_MASTER
9 : I2C_MASTER
20 : UART_RX
21 : UART_TX
============ After Setup End =============
底層全面升級:ESP-IDF 5.1
Arduino Core 其實只是 ESP-IDF (樂鑫官方的開發框架) 的一層包裝。這次 Core 3.0 直接把地基換成了最新的 ESP-IDF 5.1。這代表什麼?
首先,對 C6 和 H2 的完整支援是基於這個新版本的。再來,很多新功能,尤其是跟 802.15.4 相關的,未來要加進來會變得更容易,不用再等一次傷筋動骨的大改版。就像你家的地基和管線全部翻新了,之後要加裝洗碗機或暖氣就簡單多了。
其他值得注意的更新
- SPI Ethernet 支援: 以前要用乙太網路有點麻煩,現在官方直接支援 W5500、DM9051 和 KSZ8851SNL 這幾款常見的 SPI Ethernet 晶片了。對於需要穩定有線網路的專案來說,這真的是好消息。
- 新的 I2S Library: I2S 的函式庫也用 ESP-IDF 的 API 重寫了,API 有些變動,但功能應該是更強大穩定。有在玩聲音、麥克風、DAC 的人要注意一下。
- 語音喚醒 (ESP32-S3 限定): 基於 ESP-SR,S3 這顆晶片現在可以玩語音喚醒和指令辨識了。可以搞個「Hey, ESP!」之類的,蠻酷的。
- TensorFlowLite 支援: 官方直接把 TensorFlowLite 的範例加進來了。想在邊緣端跑一些小型 AI 模型的話,門檻又更低了。
還有像 ADC、BLE、LEDC、RMT...超多 API 都有改良。但有好消息,通常也就有壞消息。
從 2.x 版升上來,會痛嗎?(會,但值得)
直接說答案:會痛。因為這是大版本更新,裡面有「Breaking Changes」。這意味著你以前寫的某些 code,在 3.0.0 上編譯可能會失敗,或是跑起來跟預期不一樣。官方有提供一份 [Migration Guide],強烈建議、不,是必須在升級前好好讀一遍。
主要的改動都圍繞在 API 的調整上。例如前面提到的 I2S,或是 RMT、Timer 等等,函式名稱或參數可能都變了。你得對照著指南,檢查你的程式碼,然後手動修改。
聽起來很麻煩,對吧?但有個很現實的理由逼你不得不升級:官方公告 2.0.x 版的支援只會維護到 2024 年 7 月。之後就不再更新了。所以,除非你的專案已經完成,並且不打算再動它,否則遲早都要面對這次升級。
等等,我的霍爾感測器 (Hall Sensor) 怎麼辦?
啊,說到壞消息,就是這個。原本內建在 ESP32 (初代) 裡的霍爾效應感測器,它的 API 在 3.0.0 裡面被正式移除了 (Deprecated)。
對,它掰了。如果你以前的專案有用到 `hallRead()` 這個函式,升到 3.0.0 之後就不能用了。你必須改用外部的霍爾感測器,透過 GPIO 來讀取。雖然有點可惜,但老實說,內建那个的精度和穩定性也一直普普, mungkin external an external one is a better choice anyway. This is probably their way of cleaning up the API.
我想馬上試試,怎麼安裝?
如果你心臟夠大顆,不怕遇到 bug,可以現在就安裝開發版來玩。在 Arduino IDE 的「偏好設定」裡,把下面這個開發版的 JSON 連結加到「額外的開發板管理員網址」裡面:
https://espressif.github.io/arduino-esp32/package_esp32_dev_index.json
然後去「開發板管理員」搜尋 `esp32`,你就會看到可以安裝的版本。記得,這是「開發版」,不是「穩定版」。遇到問題是正常的,可以到他們的 GitHub回報。
好啦,這次的更新重點大概就是這些。感覺像是大掃除,丟掉一些舊東西,然後搬進一堆閃亮亮的新玩具。雖然整理過程會很累,但弄好之後,能做的事情就更多了。
那你呢?看完這些更新,你最想玩的是哪顆新晶片?是想用 ESP32-C6 的 Wi-Fi 6 來做個超低延遲的遊戲控制器,還是想用 ESP32-H2 來打造你家的 Thread 智慧家庭網路?在下面留言分享你的想法吧!
原始來源: https://www.pineymountain.com/tw/article/106/arduino-esp32-core-upgrade-guide
