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 專案倉庫。感興趣的朋友可以結合程式碼和圖紙繼續研究,也歡迎交流你在播放器設計、焊接和除錯過程中遇到的問題。
持續學習
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 一 先在洞洞板上 把音樂播放出來 ......
把 ESP32-C3 做成智慧居家燈控
作者: 泰瑞電電 Github: terry-eric 项目連結: https://github.com/terry-eric/home_WS2812_control_online/tree/main 社群平台: Instagram @terry_ee_lab、 Threads @terry_ee_lab 把 ESP32-C3 做成智慧居家燈控 從 home_WS2812_control_online 到 TerryESP-Matter-Controller 💡 我下這片 PCB,是想把 ESP32-C3、USB 供電和 WS2812 的控制收進一塊小板,做成可以放在家裡用的智慧燈。 我原本就比較熟 ESP32,所以這次直接用 ESP32-C3FH4。板子是雙層板,尺寸約 16.764 x 30.121 mm。上面有 USB Type-C、穩壓器、晶振、天線區、BOOT 按鍵和燈條接頭。我只拉一個 GPIO 出來控 WS2812,因為 WS2812 本身就能一顆接一顆串下去,線路不用拉得很複雜。 我一開始的想法很單純:先把控制板做出來,接上燈條,讓它可以從網路控制。後來同一塊板子先跑 MQTT,......
從零打造「智慧喝水管家」:ESP32-C3 硬體設計、3D 列印與全韌體開發實錄
作者: Kevin Chen 原始網站: Stonez56創客工坊 原文連結: https://www.stonez56.com/archives/1239 前言: 當我想把一個在麵包板上用杜邦線插得像蜘蛛網一樣的原型,變成一個能實用半年的智慧健康穿戴裝置時,會遇到多少坑?感謝全球領先的 PCB 製造與 PCBA 代工廠 JLCPCB 的贊助邀請,讓我有機會記錄下這個專案從初期的靈感發想、電路原理圖繪製、PCB 佈局優化、JLCPCB 工廠打樣/SMT 貼片,到 3D 機構外殼與 ESP32-C3 低功耗韌體的全流程開發記錄。 歡迎透過以下連結註冊 JLCPCB 繁體中文站並進行下單! https://jlcpcb.com/hk?from=Stonez56 一、 專案發想與健康科學背景 1.1 為什麼需要一個「智慧喝水管家」? 許多人日常工作中常遇到的問題是:工作一忙起來就忘記喝水,或者直到劇烈口渴才一次暴飲暴食般地灌水。在預防醫學與生理學中,大腦脫水 就會引發專注力下滑與認知下降,而人體腎臟每小時處理水分也有其上限。為了實現「少量多次」的科學補水,我需要一個能夠非侵入式感測喝水動作、定時溫和提醒......
PiBrick Pocket-CM5:使用 JLCPCB 打造的緊湊型 Raspberry Pi CM5 掌上型電腦
重點摘要 piBrick Pocket-CM5 是一款功能完整、智慧型手機大小的 Raspberry Pi CM5 掌上型電腦,配備實體 QWERTY 鍵盤、AMOLED 顯示器與 M.2 NVMe SSD 此專案採用 JLCPCB 的 4 層 PCB 製造與阻抗控制,包含 USB 的 90 歐姆阻抗,以及 PCIe/MIPI DSI 的 100 歐姆阻抗,以維持訊號完整性 該專案使用 EasyEDA 設計並由 JLCPCB 製造,並提交至 EasyEDA Spark 計畫,成功取得零件與材料贊助以支援開發 JLCPCB 的自動化 SMT 組裝服務,可處理具挑戰性的 0.4mm 間距板對板連接器,流程包含雷射切割鋼網、視覺導引取放與 AOI 品質檢查 JLCPCB 的軟性印刷電路板可在緊湊外殼內實現複雜內部走線,同時透過聚醯亞胺補強片維持連接器穩定性 整體元件採購透過 LCSC Parts Library 串接完成,減少採購延誤與組裝成本 開源硬體社群近年明顯轉向高度整合、可攜式運算裝置。在這個領域中,piBrick Pocket-CM5 是一個突出的專案,由硬體開發者 Ahmad Amarull......
再進化!輝光管時鐘第二代|硬體設計、KiCad Layout 與 JLCPCB 打樣實錄
作者: Habonroof 原始網站: Habonroof Playground 原文連結: https://www.habonroof-playground.com/2026/08/nixie-clock-design-and-debug.html 延續上一篇文章 再進化!輝光管時鐘第二代 | 設計動機與前言 我延續模組化設計把整個作品分成顯示板與控制板,並讓顯示板可以依照個人喜好選用IN-4或者IN-14的輝光管。 本文將介紹第一版樣品的各項功能、實際測試結果,以及評估後決定保留或移除的設計。同時也會說明如何使用 KiCad 完成 PCB Layout,並透過 JLCPCB 製作電路板及進行 SMT 組裝。 目錄 1. 第二代輝光管時鐘架構 2. 顯示板 3. 控制板 4. KiCad PCB Layout 5. 製造檔案輸出 6. JLCPCB 下單與 SMT 組裝 7. 結論 8. 參考資料 第二代輝光管時鐘架構 在第二代輝光管時鐘的設計,我延續模組化堆疊的方式,利用低價穩固的板載連接器將顯示板與控制板結合在一起。 顯示板 整個專案分成上下兩塊板子,上層為顯示板,可依照個人喜好搭配 IN-......
遙控模型用 ESP32 智慧控制板|JLCPCB
重點摘要 本專案展示如何透過 JLCPCB 製造及組裝設計完善的客製化 PCB,讓更多模型玩家也能使用進階電子技術。主要經驗包括: 在遵循可製造性設計(DFM)規則的前提下,優先採用精巧的高密度佈局。 複雜電路板應善用專業 SMT 組裝服務。 透過清楚標示及模組化設計提升使用便利性。 選擇製造能力符合專案需求的合作夥伴,以獲得穩定一致的成果。 專案概述:將專業自動化技術帶入業餘遙控模型 在充滿活力的遙控模型世界中,玩家不斷尋找方法,希望將簡單的玩具級載具升級為更具沉浸感及真實感的體驗。熱門 YouTube 頻道 Arduino Para Modelismo 的創作者 Aldeir Moreira 開發了 ESP32 智慧控制板。這款超精巧且功能豐富的控制方案,可為遙控卡車、汽車、船舶及工程機具提供精準動作控制、動態燈光效果,以及同步的擬真音效。 在充滿活力的遙控模型世界中,玩家不斷尋找方法,希望將簡單的玩具級載具升級為更具沉浸感及真實感的體驗。熱門 YouTube 頻道 Arduino Para Modelismo 的創作者 Aldeir Moreira 開發了 ESP32 智慧控制板。這款超精巧......