This website requires JavaScript.
優惠券
寄往
部落格

KeyNest 四鍵小鍵盤製作紀錄|ESP32-S3、RGB、快捷鍵與網頁設定

最初發布於 Oct 30, 2026, 更新於 Oct 30, 2026

1 分鐘

目錄
  • 四顆鍵排在前面
  • 外殼跟著 PCB 配
  • 四顆按鍵和板上的配置
  • 把設定留在板子上
  • 長按和雙擊會改變按法
  • 按鍵音和後來的更新
  • 燒完之後還要能回來
  • 專案與圖片來源
  • 網頁上的按鍵設定
  • 把媒體操作放到手邊
  • 從網頁查看韌體更新

KeyNest 四鍵小鍵盤製作紀錄

哈嘍各位,這次分享的是 KeyNest,一個四鍵的小鍵盤。四顆鍵可以各自設定快捷鍵,也有 RGB 燈和按鍵音。設定從網頁透過 USB 傳進板子,存好之後就可以關掉網頁繼續使用。

目前最直接的用法,就是把常用操作放到這四顆鍵上。像是把一顆設成複製,按下去就送出 Ctrl+C。也可以把 Ctrl 和 A 分在兩顆鍵,按住 Ctrl 再按 A。換一組快捷鍵,在網頁改好再存進去就可以,不用重燒程式。

keynest_enclosure_render

keynest_prototype_photo

圖 1:左為外殼 3D 模型,右為實機操作畫面。

四顆鍵排在前面

外殼前面是一整排按鍵,下方各有一個燈光視窗。喇叭的長條開孔放在上蓋後方,USB 從後側接進來。手放在前排操作時,線就留在後面。

這個專案是我先講想要什麼,再和 Codex 來回修改程式、網頁和功能整合。我負責看哪裡不對,再拿到實機上試。原本講出來的功能,慢慢變成桌上能按的東西,這個過程蠻有趣的。

外殼跟著 PCB 配

把模型拆開來看,依序是鍵帽、上蓋、PCB 和底座。四顆開關直接排在 PCB 上,上蓋留出整排按鍵的空間,前面的四個視窗再對到 RGB。底座則用固定柱支撐板子。

keynest_exploded_view

圖 2:機構展開的 3D 模型,非實機。由上而下是鍵帽、上蓋、PCB 和底座。

外殼要配合的不只是板框。按鍵伸出上蓋的位置、RGB 視窗和後側接頭都要跟板子對上。這些位置放在同一個模型裡看,會比各自看 PCB 和外殼清楚。

四顆按鍵和板上的配置

主控用 ESP32-S3 SuperMini。除了四顆按鍵,板上還有四顆 WS2812B RGB、I²S 麥克風、NS4168 喇叭擴大機和 microSD。USB 同時負責鍵盤輸入和設定通訊。

keynest_pcb_3d_model

圖 3:PCB 3D 模型縮圖,非實機或佈線圖。

keynest_function_block_diagram

圖 4:依公開接腳資料重繪的功能連接示意。箭頭表示資料方向,並非 PCB 走線圖;I²S 時鐘由主控提供。

按鍵分別接 GPIO 9、8、7、6,按下時拉低,程式開啟內部上拉。讀到狀態改變後會等 20 ms,確認穩定才算一次按下或放開。上電時如果已經壓著按鍵,也不會多補一次假的按下事件。

四顆 RGB 串在一起,只用 GPIO 13 傳資料。麥克風和喇叭擴大機共用 I²S 的 WS、BCLK,收音和播放各走自己的資料腳,所以兩邊要用同一個取樣率。microSD 另外走 SPI。GPIO 44 已經給 SD 的 MISO 使用,除錯連線就留在 USB,沒有再拿它當 UART 接收腳。

麥克風這邊有一個型號差異要記下來。舊原理圖寫的是 ICS-43434,實際裝的是 ZTS6672。現在左聲道有資料,右聲道測到全零;人聲反應還不理想,實際接線和進音通道都還要確認。

把設定留在板子上

巨集剛接起來時,按鍵事件還要先交給電腦上的背景工具,再由它幫忙輸入。功能能用,但每次使用還要記得把工具開起來。後來在 v10 把快捷鍵、文字和連續動作移到 ESP32-S3 上執行,網頁只負責設定。存好後,就可以關掉網頁,也不用再開背景工具。

keynest_setup_usage_flow

圖 5:設定和日常使用分開看。這張是依 v10 之後的板上執行方式重繪的流程圖。

使用時先接 USB 資料線,在電腦版 Chrome 或 Edge 開啟控制台。選要改的那顆鍵,設定動作,再按儲存。網頁的控制資料經瀏覽器直接送到板子,不是先交給雲端伺服器操作 USB。第一次連接仍要自己按下授權。

v10 已經用第一顆實體鍵測過複製,選取文字後按鍵,再貼上,能拿到原本選取的內容。長文字、多步巨集和不同系統的輸入方式,還沒有全部實機測完。尤其 Windows 的中文輸入,這版沒有通用的免背景工具做法。

長按和雙擊會改變按法

v11 又加了長按和雙擊。不過開啟雙擊後,短按要等判定時間結束才執行;啟用特殊按法的那顆鍵也會改成點按動作。像前面把 Ctrl 和 A 分開的用法,就要保留一般按住與放開,不開特殊按法。

所以這兩種模式沒有全部混在一起。要當 Ctrl、Shift 這類需要一直按住的鍵,就用一般單鍵;想讓同一顆鍵做不同動作,再去開長按或雙擊。

按鍵音和後來的更新

自訂按鍵音一開始先共用一份,後來再做到每顆鍵都能放自己的片段。可以上傳音檔,在網頁裁切、試聽,每顆最多 2 秒。多了獨立音效後,原本存好的那份也要留下來,所以 v9 保留共用音效區,再另外給四顆鍵各自的儲存空間。

這裡用的是內建 Flash,沒有另外加一顆 EEPROM 音訊晶片。設定存在 NVS,按鍵音和最新一段錄音分開放。實板曾把四個不同的 2 秒音效寫進 Flash,重開機後再讀回核對,四份內容都有留下來。microSD 目前會間歇讀錯容量或掛載失敗,所以按鍵音先用 Flash。

燒完之後還要能回來

後來又把韌體更新放進同一個網頁。更新前先辨識板子和版本,確認映像相符,再進入下載模式。v12 的實板更新只寫入 app 區,寫完再核對程式,以及原本的設定和音檔區。

這次實際遇到的問題是:程式已經燒好,一般重啟卻還留在下載模式。後來依 ESP32-S3 的流程,清掉 RTC 裡強制進入下載模式的旗標,再做重置,同一份 v12 才回到正常執行。沒有為了退出下載模式再重燒一次,也沒有動到 eFuse、設定或音檔。

重新連上控制台後,能讀到 KeyNest 和 v12,原本四顆鍵的設定也還在。這次是程式已經燒好了,卻還要繼續處理重啟,才真的回到能使用的狀態。

還在處理的地方

除了 SD 和人聲收音,音訊傳輸也還有偶發校驗錯誤,收音和播放品質都還在調整。影片中的按鍵說話使用示範音檔。程式不會自動格式化 SD 卡。

如果沿用保存電路的電池供電接法,要先拔掉 USB。該接法的模組 5V 與 USB 直接相連,軟體沒辦法補上電路缺少的電源隔離。

專案與圖片來源

有興趣的可以看公開專案,程式和更新紀錄都放在 GitHub。

程式與設計資料:GitHub 公開專案

設定控制台:KeyNest 設定頁

原始公開影片:泰瑞電電 Instagram 影片

本文硬體依據為 hardware/evidence 與 firmware/README;修改及實測依據為 firmware/keyboard/VALIDATION。硬體圖片取自原始公開影片。

使用 JLCPCB 製作你的 PCB 與外殼

有興趣製作 PCB 或 3D 外殼,可以透過合作連結查看服務與報價。

查看服務與報價

網頁上的按鍵設定

設定頁把四顆按鍵和動作編輯放在同一個畫面。先選要設定的那一顆,再挑單鍵、快捷鍵、文字或連續動作,比直接改程式容易看懂。實際使用仍要連上鍵盤,再把變更儲存到板子。

keynest_key_setup_ui

圖 6:按鍵設定網頁的展示畫面。可選擇四顆按鍵及不同動作;這裡是展示模式,不會把設定送到實體鍵盤。

把媒體操作放到手邊

動作總表依功能分類,媒體控制裡有播放與暫停、靜音、增加音量和降低音量。選好要使用的按鍵與按法,再把動作指定進去,最後一起儲存。這樣常用的操作就不必每次回到軟體裡找。

keynest_media_controls_ui

圖 7:媒體控制分類的展示畫面,列出播放、靜音及音量動作。畫面呈現的是網頁操作介面,不是本次實機測試結果。

從網頁查看韌體更新

韌體更新也放在同一個控制台。視窗會顯示鍵盤連線狀態、最新版本和更新步驟;尚未連接或還在展示模式時,不會開放燒錄。實際更新前仍要辨識正確裝置,再依步驟操作。

keynest_firmware_update_ui

圖 8:韌體更新視窗的展示畫面,顯示最新版本及連線狀態。這張圖沒有進行連線或燒錄。

作者資訊

作者:泰瑞電電

Instagram:泰瑞電電 Instagram

GitHub:KeyNest 公開專案

持續學習