ESP32 S3 無損音樂播放器製作記錄
2 分鐘
- ESP32 S3 無損音樂播放器製作記錄
作者:輕鬆易學嵌入式
YouTube 影片連結:https://www.youtube.com/watch?v=axT8qfYF0Kk
專案原始碼與 PCB 設計檔案:GitHub 專案倉庫
ESP32 S3 無損音樂播放器製作記錄
從洞洞板到四層 PCB 的設計 焊接與音訊測試
手機已經可以完成絕大多數聽音樂的需求,為什麼還要自己做一臺播放器?
對我來說,吸引人的地方是能夠親手掌握整個過程:音樂檔案怎麼從 SD 卡讀出來,解碼後的資料怎麼送到 DAC,螢幕重新整理會不會影響播放,換一種輸出方式又會發生什麼。遇到問題,可以改硬體、查日誌,也可以透過錄音和盲聽來驗證自己的判斷。
於是,我用 ESP32-S3 搭配 SD 卡、顯示螢幕和外接 DAC,做了這臺音樂播放器。它最早只是洞洞板上的一堆模組和飛線,後來逐步變成自己設計、自己焊接的四層 PCB。
這篇文章就把這次升級的過程整理出來:從確定硬體架構、使用 EasyEDA 設計 PCB,到打樣、手工焊接、韌體除錯,最後再用幾種不同的音訊輸出方案做一次盲聽對比。
一 先在洞洞板上 把音樂播放出來
這個專案並沒有一開始就畫 PCB。我先在洞洞板上把各個模組連線起來,驗證儲存、解碼、顯示和 USB 音訊輸出能不能一起工作。
最早的原型使用鋰電池供電:一路經過 5V 升壓給控制板,另一路經過濾波後給 USB DAC。ESP32-S3 負責讀取 SD 卡、解碼 FLAC、驅動螢幕,同時作為 USB Host 連線外部音效卡。
當時使用的是 Sound Blaster PLAY! 3,原型已經實現了 24-bit、96 kHz 播放。旁邊還預留過一塊 RP2040,原本計劃用來讀取 CD 資料,不過那屬於預留方向,並不是這次播放器已經完成的功能。
第一次成功出聲,證明這條方案能夠走通。繼續除錯時,洞洞板的侷限也逐漸顯現出來:模組分散、飛線密集,檢查一條連線往往需要沿著線找很久,移動和修改也不方便。
因此,升級 PCB 時,我重新整理了介面位置、供電和訊號路徑,希望把已經驗證過的原型變成一個便於繼續開發的硬體平臺。
二 新版播放器的硬體架構
新版繼續採用 ESP32-S3-WROOM-1-N16R8,配置為 16 MB Flash 和 8 MB PSRAM。播放器從 FAT32 格式的 SD 卡中讀取音樂,支援遞迴掃描 MP3、PCM WAV 和 FLAC 檔案,生成歌單並迴圈播放。
這裡的“無損播放器”指它支援 PCM WAV、FLAC 等音樂檔案的播放,並不意味著任意輸出鏈路、任意音量設定都可以直接稱為 bit-perfect。檔案格式、軟體處理和最終類比輸出,需要分別來看。
| 模組 | 本專案採用的方案 | 主要作用 |
|---|---|---|
| 主控 | ESP32-S3-WROOM-1-N16R8 | 檔案讀取、音訊解碼、顯示和裝置管理 |
| 儲存 | FAT32 SD 卡 | 儲存音樂檔案 |
| 顯示 | ST7789,原生 240×320,橫向使用 | 顯示曲目、播放狀態和即時頻譜 |
| I2S 音訊輸出 | PCM5100A | 提供一種獨立於 USB DAC 的播放路徑 |
| USB 音訊輸出 | CX31993、Sound Blaster PLAY! 3 | 分別驗證 UAC2 和 UAC1 播放 |
| 操作與維護 | 串列埠控制、網頁控制、區域網路 TCP OTA | 控制播放和更新韌體 |
音訊資料的基本路徑是:SD 卡讀取 → 軟體解碼 → PCM 資料 → I2S 或 USB 音訊輸出。螢幕則顯示當前曲目、格式、網路位址、實際使用的 DAC 和即時頻譜。
我保留了兩類輸出方式。沒有可用 USB DAC 時,播放器可以直接使用 I2S;接入支援的 USB DAC 並成功啟動音訊流後,再切換到 USB。拔掉 USB DAC 後,系統自動恢復 I2S 輸出。
這樣既方便日常使用,也讓同一臺播放器能夠測試不同的音訊輸出方案。硬體與功能演示見影片 1:38 起。
三 用 EasyEDA 設計四層 PCB
先確定元件位置與介面方向
這次 PCB 使用 EasyEDA 設計。我先整理洞洞板上已經驗證過的連線,再逐個核對元件封裝和接腳,完成原理圖與 PCB 佈局。因為準備自己焊接,元件是否方便定位、焊墊是否容易操作,也是需要一起考慮的問題。
開始佈局時,我先考慮幾個實際問題:ESP32-S3 放在哪裡,SD 卡是否方便插拔,螢幕排線朝哪個方向,USB 介面與周圍元件會不會互相遮擋。確定這些位置後,再安排各功能模組之間的連線。
音訊相關部分與數位部分按功能分區,USB 資料路徑儘量緊湊,同時為供電和其他訊號留出合適的走線空間。這樣做的目的,是讓板子的連線關係更清楚,也便於後續檢查和修改。
四層板與獨立匯流排
這次採用四層 PCB,其中安排了一整層地平面,希望為訊號提供較完整的迴流路徑,也讓供電和訊號佈線有更充足的空間。
四層板本身不能直接證明音質更好,最終表現仍要靠實際執行和測量驗證。對這次設計而言,它首先解決的是佈局和佈線安排的問題。
介面分配上,USB 使用 ESP32-S3 的原生介面;SD 卡單獨使用 SPI2,ST7789 螢幕單獨使用 SPI3。儲存和顯示各自使用一套 SPI 匯流排,可以減少二者在同一匯流排上的爭用。能否持續穩定播放,還需要結合讀取、解碼和緩衝一起驗證。
用 3D 預覽檢查裝配
佈線完成後,我用 3D 預覽檢查元件方向、介面朝向和機械干涉。二維圖裡不明顯的問題,例如聯結器朝反、插頭空間不足,換一個立體視角往往更容易發現。
對手工組裝的專案來說,檢查“能不能焊、焊好後能不能插上”,與檢查電氣連線同樣重要。PCB 設計過程見影片 2:21 起。
四 生產檔案檢查與 PCB 打樣
在匯出生產檔案前,我先執行 DRC,也就是設計規則檢查,處理未連線網路、線寬線距、過孔和板框等問題。
DRC 通過並不等於整套電路一定能正常工作,但它可以提前發現一部分製造和連線問題。我還嘗試用 AI 輔助檢查原理圖連線、元件選型和容易遺漏的細節,把它作為額外的複核手段;最終仍需要結合元件資料和實際電路判斷。
確認設計後,我匯出 Gerber 等生產檔案,上傳後對照生產預覽,再複核一次板框、層數、孔位和正反面。這一步相當於從製造檔案的角度重新看一遍設計,確認提交的內容與預期一致。
這次 PCB 由 JLCPCB 提供裸板打樣支援,焊接和組裝由我自己完成。它也提供 PCBA 組裝服務;有類似製作需求的朋友,可以透過這個連結造訪網站,註冊後按自己的設計提交訂單。
我這次需要檢查的重點是裸板生產檔案。如果採用貼片組裝,還需要準備 BOM 物料清單和 CPL 元件座標檔案,逐項核對料號、封裝、方向與貼裝位置。
五 手工焊接 每完成一部分 就檢查一部分
板子到手後,我先檢查板框、孔位、細間距焊墊和阻焊,再用萬用表檢查電源與地之間是否存在明顯短路。確認後才開始裝配。
焊接前,我按功能把元件分組,確認封裝和方向,再從較矮小的元件開始。放置元件時先固定一個接腳,調整位置後再完成其他焊點。每焊完一組,就檢查一次偏位、虛焊和連錫,避免把問題積累到最後。
貼片 IC 的焊接,我使用了焊錫膏和熱風槍。實際操作並不順利:風量偏大時,小元件容易被吹動,為此返工了好幾次。這也讓我體會到,焊接方式要與元件尺寸、工具和操作熟練程度相匹配,不能只看焊錫有沒有熔化。
貼片部分完成後,再焊接插件元件,並從側面觀察焊錫是否真正潤溼焊墊和接腳。表面形成一個錫球,並不代表連線已經可靠。
首次通電時,我沒有把螢幕、SD 卡和 DAC 一次全部接上,而是先複測電源對地阻值,再限流上電。確認電流和關鍵電壓沒有異常後,逐步接入各個模組。
分階段檢查確實會多花一些時間,但如果接入某個模組後出現異常,排查範圍就比較明確。焊接與首次通電記錄見影片 5:06 起。
六 ESP IDF 韌體 把各個模組真正串起來
硬體焊接完成,只是播放器開始工作的前提。韌體還需要把儲存、解碼、輸出、顯示和控制組合起來,並處理實際執行中的各種狀態變化。
我使用 ESP-IDF 開發,按功能拆分儲存、解碼、音訊輸出、顯示、網頁控制和 OTA 模組。啟動後先初始化螢幕,再掛載 SD 卡、掃描音樂並生成歌單;連線區域網路後,可以透過手機網頁選歌、播放、暫停、切歌和調節音量。
開發中比較耗時間的部分,包括 SD 卡相容性、USB DAC 的格式協商、FLAC 播放爆音,以及裝置插拔後的狀態恢復。
例如,USB 裝置成功列舉,只說明播放器已經識別到裝置,並不能證明音訊流已經按正確格式開始傳輸。因此,輸出切換需要以成功啟流為條件,失敗或斷開時再恢復 I2S。
針對 FLAC 播放中的讀取抖動,當前公開韌體採用輸入預讀和 PSRAM 環形緩衝,讓解碼與音訊輸出之間有一定餘量。這個處理方向針對的是資料供給的連續性,並不能把所有爆音都歸結為同一個原因。相關實現和當前配置可以檢視專案倉庫的音訊輸出說明。
區域網路 TCP OTA 則方便我在除錯過程中更新韌體,減少反覆連線下載線的操作。當前實現沒有身份認證和 TLS,適合在可信、隔離的區域網路內使用,不應直接開放到網際網路。使用方法與限制見專案說明。
七 成品驗證 播放 控制與熱插拔
完成除錯後,我按實際使用流程做了一次完整演示:
1. 上電後初始化顯示螢幕,掛載 SD 卡並掃描音樂。
2. 生成歌單後播放,螢幕顯示曲目、狀態與頻譜。
3. 連線區域網路,透過網頁完成選歌、暫停、切歌和音量調節。
4. 插入 CX31993,列舉並成功啟流後切換到 USB DAC。
5. 拔掉 USB DAC,自動恢復 I2S 輸出。
這組演示確認了主要功能能夠串聯執行。對我而言,從原型升級到 PCB 的價值,在這裡變得很直觀:硬體連線固定下來後,可以把更多精力放在軟體行為和實際使用問題上。
這次沒有把續航、輸出功率、訊雜比等指標作為完整測量專案,因此也不為這些專案填寫推測數值。
八 三種 DAC 加一臺手機 做一次盲聽對比
播放器能正常執行之後,我又準備了四條音訊輸出路徑:
| 對比對象 | 播放路徑 |
|---|---|
| PCM5100A | ESP32-S3 經 I2S 輸出 |
| CX31993 | ESP32-S3 經 USB UAC2 輸出 |
| Sound Blaster PLAY! 3 | ESP32-S3 經 USB UAC1 輸出 |
| Sony Xperia 5 V | 手機的 3.5 mm 類比音訊輸出 |
錄製時,四者播放同一個無損測試檔案,採用相同取樣率,並接入同一臺錄音音效卡的同一輸入通道。這樣可以減少測試路徑變化造成的影響。
盲聽時,我希望大家先聽聲音,再看裝置名稱。影片中安排了試聽片段,但平臺會再次編碼音訊,因此它更適合作為一個體驗環節;認真比較時,應使用未經影片平臺處理的 WAV 檔案。測試介紹見影片 7:02 起。
在後續整理中,我又把四份錄音對齊到同一段音樂,擷取共同音樂開頭的 40 秒,並將整體響度匹配到 −20 LUFS,用於兩兩 ABX 測試。固定響度的目的,是儘量減少音量差對判斷的干擾。
ABX 的操作很直接:A 和 B 來自兩個不同樣本,X 隨機取其中一個。試聽者可以反覆切換,判斷 X 與 A 還是 B 相同,完成預先確定的輪數後再檢視結果。
需要說明的是,整理過程中發現 Sony 這份原始錄音存在觸及滿幅的削波。後期降低音量不能恢復已經丟失的波形,原因還需要結合播放端與錄音端的電平設定排查。因此,現有樣本可以用於體驗盲聽流程,但若要據此討論裝置本身的失真表現,應先排查並重新錄製這一路,再重新匹配樣本。
目前還沒有完成正式聽者測試的成績,所以這裡不寫“某款更好”或者“完全聽不出區別”的結論。ABX 能回答的是,在指定樣本和條件下能否分辨;喜歡哪種聲音,以及裝置整體表現如何,是另外的問題。
九 做完這臺播放器 我學到了什麼
從洞洞板到四層 PCB,這次最明顯的體會是:讓一個模組工作,與讓整臺裝置在不同狀態下持續工作,是兩件難度不同的事情。
線路連線、元件焊接只是開始。SD 卡能否正確讀取,解碼過程能否連續供數,USB DAC 是否接受當前格式,拔插之後狀態能否恢復,每一個環節都需要單獨觀察,再放回整機中驗證。
自己完成焊接和除錯後,我對設計檢查有了更直接的認識:螢幕上看起來很小的封裝、方向或介面位置問題,到了裝配時就可能變成一次返工。這些細節應該在送板前儘量確認。
播放器目前已經具備音樂播放、狀態顯示、多種輸出、網頁控制和 OTA 等功能。接下來,我希望繼續完善相容性和異常恢復,並把音訊對比的錄製條件與測試記錄整理得更完整。
自己做播放器的樂趣,就在於可以沿著一條真實的資料路徑,從檔案、軟體一直追到最終聽到的聲音,再用自己的修改和測試去理解它。
專案原始碼與 PCB 設計檔案已經放在 GitHub 專案倉庫。感興趣的朋友可以結合程式碼和圖紙繼續研究,也歡迎交流你在播放器設計、焊接和除錯過程中遇到的問題。
持續學習
KeyNest 四鍵小鍵盤製作紀錄|ESP32-S3、RGB、快捷鍵與網頁設定
KeyNest 四鍵小鍵盤製作紀錄 哈嘍各位,這次分享的是 KeyNest,一個四鍵的小鍵盤。四顆鍵可以各自設定快捷鍵,也有 RGB 燈和按鍵音。設定從網頁透過 USB 傳進板子,存好之後就可以關掉網頁繼續使用。 目前最直接的用法,就是把常用操作放到這四顆鍵上。像是把一顆設成複製,按下去就送出 Ctrl+C。也可以把 Ctrl 和 A 分在兩顆鍵,按住 Ctrl 再按 A。換一組快捷鍵,在網頁改好再存進去就可以,不用重燒程式。 圖 1:左為外殼 3D 模型,右為實機操作畫面。 四顆鍵排在前面 外殼前面是一整排按鍵,下方各有一個燈光視窗。喇叭的長條開孔放在上蓋後方,USB 從後側接進來。手放在前排操作時,線就留在後面。 這個專案是我先講想要什麼,再和 Codex 來回修改程式、網頁和功能整合。我負責看哪裡不對,再拿到實機上試。原本講出來的功能,慢慢變成桌上能按的東西,這個過程蠻有趣的。 外殼跟著 PCB 配 把模型拆開來看,依序是鍵帽、上蓋、PCB 和底座。四顆開關直接排在 PCB 上,上蓋留出整排按鍵的空間,前面的四個視窗再對到 RGB。底座則用固定柱支撐板子。 圖 2:機構展開的 3D 模型,非......
自製 USB 2.0 HUB:三個 USB-A、雙 Type-C 與 3D 外殼設計紀錄
自己做一個 USB 2.0 HUB 哈嘍各位,這次分享我做的 USB 2.0 HUB。 圖 1:實機照片。 做這個 HUB,我想把接口和外觀一起整理好。三個 USB-A 放在同一側,兩端再各留一個 Type-C,外殼的開口也跟著這個配置走。希望接起來能靈活、實用,線材和外觀也保持整潔、輕巧。這一版用的是 SL2.1A,外殼則交給 JLC 的 3D 代工製作。 這一版已做過基本連線和檔案傳輸測試。目前還是第一版原型,電源和 Type-C 的設計也有要注意的地方,後面會一起說明。 三個 USB A 放一起 兩端留 Type C 板上看得到五個插座,不過規劃上是一個上游、四個下游。標示 USB C IN 的 Type-C 接主機,另外三個 USB-A 和標示 USB C OUT 的 Type-C 則是下游接口。 當初也想把下游的 Type-C 接到下一個 HUB,讓線可以沿著兩端接下去。這是接口安排時的想法,串接的供電和相容性還沒有完整驗證。 圖 2:PCB 佈局。三個 USB-A 排在同一側,兩端各留一個 Type-C。 HUB 的電路 圖 3:依原理圖整理的資料通道關係。箭頭表示雙向資料傳輸,不是供......
從零打造「智慧喝水管家」:ESP32-C3 硬體設計、3D 列印與全韌體開發實錄
前言: 當我想把一個在麵包板上用杜邦線插得像蜘蛛網一樣的原型,變成一個能實用半年的智慧健康穿戴裝置時,會遇到多少坑?感謝全球領先的 PCB 製造與 PCBA 代工廠 JLCPCB 的贊助邀請,讓我有機會記錄下這個專案從初期的靈感發想、電路原理圖繪製、PCB 佈局優化、JLCPCB 工廠打樣/SMT 貼片,到 3D 機構外殼與 ESP32-C3 低功耗韌體的全流程開發記錄。 歡迎透過以下連結註冊 JLCPCB 繁體中文站並進行下單! https://jlcpcb.com/hk?from=Stonez56 一、 專案發想與健康科學背景 1.1 為什麼需要一個「智慧喝水管家」? 許多人日常工作中常遇到的問題是:工作一忙起來就忘記喝水,或者直到劇烈口渴才一次暴飲暴食般地灌水。在預防醫學與生理學中,大腦脫水 就會引發專注力下滑與認知下降,而人體腎臟每小時處理水分也有其上限。為了實現「少量多次」的科學補水,我需要一個能夠非侵入式感測喝水動作、定時溫和提醒、且具備超長續航力的智慧貼合裝置。 1.2 產品原型與形態演進 • 原型階段 (Breadboard Prototype): 使用 ESP32-C3 Supe......
設計精密 72 顆 LED 可穿戴手錶:使用 JLCPCB SMT 組裝製作 40 mm 圓形 PCB
重點摘要 本案例研究介紹一款採用精密 40 mm 圓形 PCB 製作的 72 顆 LED 可穿戴手錶。你將了解 JLCPCB SMT 組裝如何省去 70 多顆 0603 LED 的手工焊接、ENIG 表面處理如何確保可穿戴應用的可靠性,以及透過鼠咬孔分離耳實現圓形電路板自動組裝的巧妙拼板策略。整個專案涵蓋從 EasyEDA 原理圖繪製、韌體優化,到商用級不鏽鋼外殼整合的完整流程。 簡介與設計動機 製作客製可穿戴硬件,是現代電子領域中最具成就感、同時也最具挑戰性的工作之一。市面上的智能手錶通常依賴複雜 OLED 顯示器和耗電量較高的處理器,而開源專案創作者 Taifur 則希望製作一款極簡、具工業級質感的時計:LED 圓形手錶。 核心構想簡單,但在技術上要求很高:使用由 72 顆獨立 SMD LED 組成的環形顯示器,以 ATmega328P 微控制器和高精度 DS3231 實時時鐘(RTC)驅動。 然而,要將 72 顆 LED 的放射狀電路轉化為可穿戴產品,會遇到多項重大工程挑戰: 機械限制:PCB 直徑不能超過 40 mm,才能放入市售手錶外殼。 組裝複雜度:在 40 mm 電路板上,手工焊接 ......
Athena:打造高效能 6 層火箭航電 PCB
重點摘要 Athena 是一款開源飛行電腦,採用三 MCU 架構、冗餘感測器及多個通訊介面,整合於緊湊的 6 層 PCB 上。 這塊 80 × 140 mm 的電路板整合三個 STM32 MCU、三個 IMU、氣壓計、GNSS、LoRa、Bluetooth、CAN、USB、快閃記憶體、SD 卡及電源管理功能。 6 層 PCB 為這項複雜設計提供充足的佈線容量、有組織的電源分配、清晰的訊號規劃及緊湊的功能整合。 這個專案展示開源硬件如何透過專業 PCB 製造及組裝服務,由設計落地為實體硬件。 先進火箭技術需要飛行電腦在緊湊而可靠的硬件平台上整合運算、感測、通訊、電源管理及控制功能。NotARoomba 的開源飛行電腦專案 Athena 透過三 MCU 架構、冗餘感測、多個通訊介面、專用控制通道及 6 層 PCB,滿足這些要求。 Athena 電路板尺寸為 80 × 140 mm,整合三個 STM32 MCU、三個 IMU、氣壓計、GNSS、LoRa、Bluetooth、CAN、USB、快閃記憶體、SD 卡介面及多項電源管理功能。專案使用 EasyEDA 設計,並由 JLCPCB 負責 PCB 製造及......
ESP32 S3 無損音樂播放器製作記錄
作者:輕鬆易學嵌入式 YouTube 影片連結:https://www.youtube.com/watch?v=axT8qfYF0Kk 專案原始碼與 PCB 設計檔案:GitHub 專案倉庫 ESP32 S3 無損音樂播放器製作記錄 從洞洞板到四層 PCB 的設計 焊接與音訊測試 手機已經可以完成絕大多數聽音樂的需求,為什麼還要自己做一臺播放器? 對我來說,吸引人的地方是能夠親手掌握整個過程:音樂檔案怎麼從 SD 卡讀出來,解碼後的資料怎麼送到 DAC,螢幕重新整理會不會影響播放,換一種輸出方式又會發生什麼。遇到問題,可以改硬體、查日誌,也可以透過錄音和盲聽來驗證自己的判斷。 於是,我用 ESP32-S3 搭配 SD 卡、顯示螢幕和外接 DAC,做了這臺音樂播放器。它最早只是洞洞板上的一堆模組和飛線,後來逐步變成自己設計、自己焊接的四層 PCB。 這篇文章就把這次升級的過程整理出來:從確定硬體架構、使用 EasyEDA 設計 PCB,到打樣、手工焊接、韌體除錯,最後再用幾種不同的音訊輸出方案做一次盲聽對比。 圖 1 播放器成品與手機網頁控制 來源 影片 6:52 一 先在洞洞板上 把音樂播放出來 ......