用 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 卡,以及一點點設定,就能解鎖這塊小板子的無限可能。不論你是想開發巨集鍵盤、腳踏控制器,還是創造創意輸入裝置,這裡都是最好的起點。

Pi Zero

什麼是 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 設定與啟用,需使用指令列工具(如 modprobeecholn 等)。

啟用 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 替代品)

這只是開始,真正的限制只有你的創意。