You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

树莓派5模拟HID设备实现GPIO按键触发按键输入方案咨询

树莓派5模拟HID设备并通过GPIO按键触发输入的可行方案

树莓派5完全支持模拟HID设备,以下是两种经过验证的可行方案,替代你之前尝试的无效教程:

方案一:基于Linux原生libcomposite配置USB HID

这是最直接的原生方案,无需额外依赖包,稳定性高:

  1. 启用dwc2驱动

    • 编辑/boot/firmware/config.txt,添加一行:dtoverlay=dwc2
    • 编辑/boot/firmware/cmdline.txt,在rootwait后追加:modules-load=dwc2,g_hid
    • 重启树莓派
  2. 创建键盘HID描述符
    在/etc/下新建文件hid-keyboard.descriptor,写入标准键盘的HID描述符:

    0x05, 0x01,        // Usage Page (Generic Desktop)
    0x09, 0x06,        // Usage (Keyboard)
    0xA1, 0x01,        // Collection (Application)
    0x05, 0x07,        // Usage Page (Key Codes)
    0x19, 0xE0,        // Usage Minimum (224)
    0x29, 0xE7,        // Usage Maximum (231)
    0x15, 0x00,        // Logical Minimum (0)
    0x25, 0x01,        // Logical Maximum (1)
    0x75, 0x01,        // Report Size (1)
    0x95, 0x08,        // Report Count (8)
    0x81, 0x02,        // Input (Data,Var,Abs)
    0x95, 0x01,        // Report Count (1)
    0x75, 0x08,        // Report Size (8)
    0x81, 0x03,        // Input (Cnst,Var,Abs)
    0x95, 0x05,        // Report Count (5)
    0x75, 0x01,        // Report Size (1)
    0x05, 0x08,        // Usage Page (LEDs)
    0x19, 0x01,        // Usage Minimum (1)
    0x29, 0x05,        // Usage Maximum (5)
    0x91, 0x02,        // Output (Data,Var,Abs)
    0x95, 0x01,        // Report Count (1)
    0x75, 0x03,        // Report Size (3)
    0x91, 0x03,        // Output (Cnst,Var,Abs)
    0x95, 0x06,        // Report Count (6)
    0x75, 0x08,        // Report Size (8)
    0x15, 0x00,        // Logical Minimum (0)
    0x25, 0x65,        // Logical Maximum (101)
    0x05, 0x07,        // Usage Page (Key Codes)
    0x19, 0x00,        // Usage Minimum (0)
    0x29, 0x65,        // Usage Maximum (101)
    0x81, 0x00,        // Input (Data,Array)
    0xC0               // End Collection
    
  3. 加载HID模块
    执行命令加载定制的HID设备:

    sudo modprobe g_hid idVendor=0x1d6b idProduct=0x0101 report_desc=$(cat /etc/hid-keyboard.descriptor | xxd -i | tr -d '\n ' | sed 's/0x//g')
    
  4. 结合gpiozero的Python控制脚本
    编写脚本监听GPIO按键,触发时向HID设备写入按键数据:

    from gpiozero import Button
    import time
    import os
    
    HID_DEVICE = '/dev/hidg0'
    # 按键码:A键的标准HID编码是0x04
    KEY_A = [0, 0, 0x04, 0, 0, 0, 0, 0]
    KEY_RELEASE = [0, 0, 0, 0, 0, 0, 0, 0]
    
    # 绑定GPIO2的按键
    trigger_button = Button(2)
    
    def send_key_press(key_codes):
        with open(HID_DEVICE, 'wb') as hid:
            hid.write(bytearray(key_codes))
    
    def handle_button_press():
        send_key_press(KEY_A)
        time.sleep(0.1)
        send_key_press(KEY_RELEASE)
    
    trigger_button.when_pressed = handle_button_press
    
    while True:
        time.sleep(1)
    

    注意:脚本需要以sudo运行,或给/dev/hidg0设置权限:sudo chmod 666 /dev/hidg0

方案二:用PiPico作为HID转发器(规避树莓派USB驱动问题)

如果原生方案遇到兼容性问题,可通过PiPico中转:

  • 在PiPico上刷入MicroPython,编写HID键盘代码,监听UART串口指令
  • 树莓派5通过GPIO的UART引脚连接PiPico,用gpiozero监控按键,触发时向PiPico发送指令
  • PiPico收到指令后,模拟对应按键输入到Windows电脑
    这种方式完全避开树莓派5的USB设备模式配置,稳定性拉满,适合多按键场景

常见问题排查

  • 确认USB分线器的数据线连接正常,树莓派5处于USB设备模式而非主机模式
  • 若libcomposite加载失败,查看dmesg输出,确认dwc2驱动是否正常加载
  • Python脚本权限问题:优先用sudo运行,或通过setcap给Python赋予设备访问权限

内容的提问来源于stack exchange,提问作者StrixTyphoon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 02:18:12