用 Pi Zero 2 W 打造專屬 USB 裝置!從 HID 開發開始
Pi Zero 2 W 是一塊體積小巧、價格親民卻性能不俗的微型電腦,而它還藏著一個常被忽略的強大功能:USB Gadget 模式。透過這項特性,我們可以讓它偽裝成一個 USB 裝置,模擬鍵盤、滑鼠、甚至是遊戲控制器——完全符合 USB HID(Human Interface Device)規範。
本篇文章將帶你從零開始,教你如何把 Pi Zero 2 W 打造成一個專屬的 USB HID 裝置。不需要額外的 Arduino 或 STM32,你只需要一條 OTG 線、一張 microSD 卡,以及一點點設定,就能解鎖這塊小板子的無限可能。不論你是想開發巨集鍵盤、腳踏控制器,還是創造創意輸入裝置,這裡都是最好的起點。

內容
什麼是 USB HID?
USB HID(Human Interface Device) 是一種 USB 裝置通訊協定,專門用來讓人類與電腦進行互動。最常見的 HID 裝置包括 鍵盤、滑鼠、遊戲控制器、觸控板 等。HID 裝置的特點是即插即用、免驅動,幾乎所有的現代作業系統(如 Windows、macOS、Linux)都內建支援。
HID 規範定義了資料的傳輸方式和格式,因此我們可以利用像 Pi Zero 2 W 這樣的裝置模擬出一個「假的」USB HID 裝置,電腦就會誤以為它是個真的鍵盤或滑鼠,進而達到自動輸入、巨集控制等效果。
Pi Zero 2 W 簡介
Raspberry Pi Zero 2 W 是 Raspberry Pi 基金會推出的一款超小型單板電腦,延續了 Zero 系列「體積小、功耗低、價格親民」的設計理念,但在效能上有了大幅提升。它搭載 四核心 Broadcom BCM2710A1 處理器(與 Raspberry Pi 3 同級),相較於初代 Zero 提供了約 5 倍的效能提升,但尺寸依然僅為 65mm × 30mm。
這款小板具備:
- 512MB LPDDR2 RAM
- 內建 Wi-Fi(802.11 b/g/n)與藍牙 4.2
- Mini HDMI、microUSB(OTG)、GPIO 排針、microSD 卡槽
由於其支援 USB OTG 功能,Zero 2W 可以進入「USB Gadget 模式」,進而模擬 HID 裝置、Mass Storage、Serial 等多種 USB 角色,非常適合應用於低成本、便攜式的 DIY 專案,如 USB 工具、巨集鍵盤、IoT 裝置與簡易終端等。
開發環境
在開始開發板模組的 USB HID 專案之前,請確保已完成以下準備:
- Raspberry Pi Zero 2 W 一台
建議已焊接好 GPIO 排針,並具備 microSD 卡。 - 已安裝 Raspberry Pi OS(建議使用 Lite 版)
建議使用 Raspberry Pi Imager 安裝最新版作業系統,並啟用 SSH 以方便遠端操作。 - OTG 傳輸線或 microUSB 轉 USB-A 線材
Pi Zero 2 W 的 microUSB(非電源孔)可進入 USB Gadget 模式,需要透過 OTG 線與主機相連。 - 具備基本 Linux 終端操作能力
HID 裝置需要透過 configfs 設定與啟用,需使用指令列工具(如modprobe、echo、ln等)。
啟用 USB HID Gadget 模式
修改啟動設定(config.txt 與 cmdline.txt)
注意:新版 Raspberry Pi OS(如 Bookworm)設定檔位置已改為 /boot/firmware/。請使用 root 權限修改。
sudo -i
nano /boot/firmware/config.txt
在最底下加入:
dtoverlay=dwc2
然後編輯 cmdline.txt:
nano /boot/firmware/cmdline.txt
找到單行文字且在最後面插入:
modules-load=dwc2
儲存後並離開 nano 編輯器。
重新開機
reboot
切換為 root 權限
sudo -i
建立 USB Gadget 結構
cd /sys/kernel/config/usb_gadget/
mkdir -p hidgadget
cd hidgadget
設定 USB 裝置基本資訊
echo 0x1d6b > idVendor # Linux Foundation(或改為自訂 Vendor ID)
echo 0x0104 > idProduct # HID Gadget
echo 0x0100 > bcdDevice # 裝置版本
echo 0x0200 > bcdUSB # USB 2.0
設定文字描述資訊
mkdir -p strings/0x409
echo "0001" > strings/0x409/serialnumber
echo "PiZeroHID" > strings/0x409/manufacturer
echo "Custom HID Device" > strings/0x409/product
建立 USB 設定(Config)
mkdir -p configs/c.1
echo 250 > configs/c.1/MaxPower
mkdir -p configs/c.1/strings/0x409
echo "Custom HID Config" > configs/c.1/strings/0x409/configuration
建立 HID Function(64-byte 自訂資料傳輸)
mkdir -p functions/hid.usb0
echo 0 > functions/hid.usb0/protocol
echo 0 > functions/hid.usb0/subclass
echo 64 > functions/hid.usb0/report_length
這段描述了一個:
- Vendor-defined usage
- 單方向輸入(Input only)
- 每次報告為 64 bytes
將 function 加入 config
ln -s functions/hid.usb0 configs/c.1/
啟用 USB Gadget
最後,掛載 USB 裝置控制器(UDC):
ls /sys/class/udc > UDC
最後,掛成功後,系統會在 /dev/ 下出現:
/dev/hidg0
root@raspberrypi:/dev# ls hid*
hidg0
結論
透過 USB Gadget 模式,Raspberry Pi Zero 2 W 不再只是單純的微型電腦,而搖身一變成為一個可程式化的 USB 裝置。本文介紹的自訂 HID 裝置示範,僅僅是開端——你可以讓它模擬鍵盤、與主機互動、成為開發工具的一部分,甚至用在安全測試、遊戲輔助或 IoT 裝置中。
最棒的是,你不需要額外的控制板或硬體模組,一條 OTG 線、幾行指令,就能釋放這塊小板子的巨大潛力。
接下來,或許你可以:
- 將它變成一個巨集鍵盤或快捷控制器
- 傳感器資料即時送到主機
- 建立一個安全測試裝置(如 USB Rubber Ducky 替代品)
這只是開始,真正的限制只有你的創意。









