首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用树莓派或任何其他linux PC或设备创建虚拟/模拟USB鼠标

如何使用树莓派或任何其他linux PC或设备创建虚拟/模拟USB鼠标
EN

Stack Overflow用户
提问于 2016-02-05 13:58:34
回答 3查看 8.8K关注 0票数 3

我需要创建一个模拟的USB设备。将该设备插入PC或平板电脑时,其操作方式应类似于USB鼠标。其动机是检查系统的鼠标驱动程序。我想让其中一个Raspberry Pi USB端口像鼠标一样工作。

当我将Raspberry Pi USB端口连接到我的PC时,它应该显示已连接鼠标。

如何制作这种虚拟/模拟设备?

此外,我还需要监控和发送点击消息到PC。

EN

回答 3

Stack Overflow用户

发布于 2016-02-06 04:12:43

要模拟USB鼠标,您需要充当USB HID设备。HID很容易实现,许多具有简单USB设备端口的微控制器都有足够的资源来实现这一点。甚至有一种使用bit-banged IO on an AVR ATTiny的低速USB实现,根本不需要USB硬件。

问题在于,在典型的基于Linux的主板中,只有USB主机端口。大多数型号的RPi都有这一限制,尽管RPi核心的Broadcom SOC支持USB,并且原则上可以用作USB设备。

根据RPi Stack Exchange上的this answer的说法,新的RPi型号零板有两个端口,正确地连接为USB OTG,可以用作设备。

USB连接只是第一个障碍。其次,您需要对OTG的Linux内核支持,以及对实现USB设备的内核支持。这在Linux中被称为“小工具模式”,并由Broadcom SOC的内核支持,并且可以根据a tutorial at Adafruit在RPi0中使用。有关更多链接和讨论,请参阅linked answer above

所有这些基础设施就绪后,您需要使用小工具API充当HID并发出HID报告,该报告将被理解为鼠标运动。

票数 7
EN

Stack Overflow用户

发布于 2016-02-06 04:14:05

PC和Raspberry Pi都是USB主机;而USB鼠标是USB设备,您不能将主机连接到主机。

您需要具有USB设备控制器的硬件,然后实现HID设备类。您最好的选择可能是一个简单的微控制器开发板;使用Linux系统来呈现HID设备有点过头了。基于STM32的主板是一种简单的入门方式,例如,ST的STM32Cube USB device library包含HID设备类支持。

票数 2
EN

Stack Overflow用户

发布于 2021-06-16 01:58:47

所有你需要的是一个4美元的树莓派Pico在HID模式。使用此学习指南:

https://learn.adafruit.com/circuitpython-essentials/circuitpython-hid-keyboard-and-mouse

代码语言:javascript
运行
复制
"""CircuitPython Essentials HID Mouse example"""
import time
import analogio
import board
import digitalio
import usb_hid
from adafruit_hid.mouse import Mouse

mouse = Mouse(usb_hid.devices)

x_axis = analogio.AnalogIn(board.A0)
y_axis = analogio.AnalogIn(board.A1)
select = digitalio.DigitalInOut(board.A2)
select.direction = digitalio.Direction.INPUT
select.pull = digitalio.Pull.UP

pot_min = 0.00
pot_max = 3.29
step = (pot_max - pot_min) / 20.0


def get_voltage(pin):
    return (pin.value * 3.3) / 65536


def steps(axis):
    """ Maps the potentiometer voltage range to 0-20 """
    return round((axis - pot_min) / step)


while True:
    x = get_voltage(x_axis)
    y = get_voltage(y_axis)

    if select.value is False:
        mouse.click(Mouse.LEFT_BUTTON)
        time.sleep(0.2)  # Debounce delay

    if steps(x) > 11.0:
        # print(steps(x))
        mouse.move(x=1)
    if steps(x) < 9.0:
        # print(steps(x))
        mouse.move(x=-1)

    if steps(x) > 19.0:
        # print(steps(x))
        mouse.move(x=8)
    if steps(x) < 1.0:
        # print(steps(x))
        mouse.move(x=-8)

    if steps(y) > 11.0:
        # print(steps(y))
        mouse.move(y=-1)
    if steps(y) < 9.0:
        # print(steps(y))
        mouse.move(y=1)

    if steps(y) > 19.0:
        # print(steps(y))
        mouse.move(y=-8)
    if steps(y) < 1.0:
        # print(steps(y))
        mouse.move(y=8)

这是使用操纵杆的鼠标的CP示例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35217250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档