8. 使pyboard充当USB鼠标

pyboard 是一个 USB 设备,可以配置为充当鼠标而不是默认的 USB 闪存驱动器。

为此,我们必须首先编辑boot.py 文件以更改 USB 配置。如果你还没有接触过你的boot.py 文件,那么它看起来像这样:

# boot.py -- run on boot-up
# can run arbitrary Python, but best to keep it minimal

import pyb
#pyb.main('main.py') # main script to run after this one
#pyb.usb_mode('VCP+MSC') # act as a serial and a storage device
#pyb.usb_mode('VCP+HID') # act as a serial device and a mouse

要启用鼠标模式,请取消文件最后一行的注释,使其看起来像:

pyb.usb_mode('VCP+HID') # act as a serial device and a mouse

如果您已经更改了boot.py 文件,那么它需要工作的最低代码是:

import pyb
pyb.usb_mode('VCP+HID')

这告诉 pyboard 在启动时将自己配置为 VCP(虚拟 COM 端口,即串行端口)和 HID(人机接口设备,在我们的例子中是鼠标)USB 设备。

弹出/卸载 pyboard 驱动器并使用 RST 开关重置它。您的 PC 现在应该将 pyboard 检测为鼠标!

8.1. 手动发送鼠标事件

为了让 py-mouse 做任何事情,我们需要将鼠标事件发送到 PC。我们将首先使用 REPL 提示手动执行此操作。使用串行程序连接到您的 pyboard 并键入以下内容(无需在其后面键入# 和 文本):

>>> hid = pyb.USB_HID()
>>> hid.send((0, 100, 0, 0)) # (button status, x-direction, y-direction, scroll)

您的鼠标应该向右移动 100 像素!在上面的命令中,您将发送 4 条信息:按钮状态、x-方向、y-方向滚动。数字 100 告诉 PC 鼠标在 x 方向移动了 100 个像素。

让我们让鼠标左右摆动:

>>> import math
>>> def osc(n, d):
...   for i in range(n):
...     hid.send((0, int(20 * math.sin(i / 10)), 0, 0))
...     pyb.delay(d)
...
>>> osc(100, 50)

该函数的第一个参数osc 是要发送的鼠标事件的数量,第二个参数是事件之间的延迟(以毫秒为单位)。尝试玩不同的数字。

练习:让鼠标绕一圈。

8.2. 用加速度计制作鼠标

现在让我们使用加速度计让鼠标根据 pyboard 的角度移动。下面的代码可以直接在 REPL 提示符下输入,也可以放在main.py 文件中。在这里,我们将插入,main.py 因为为此我们将学习如何进入安全模式。

目前,pyboard 充当串行 USB 设备和 HID(鼠标)。所以你不能访问文件系统来编辑你的main.py文件。

您也无法boot.py 使用 USB 驱动器编辑您的退出 HID 模式并返回正常模式......

为了解决这个问题,我们需要进入安全模式。这在[安全模式教程](tut-reset)中有描述,但我们在这里重复说明:

  1. 按住 USR 开关。

  2. 在仍然按住 USR 的同时,按下并松开 RST 开关。

  3. 然后 LED 会从绿色循环到橙色再到绿色 + 橙色,然后再返回。

  4. 继续按住 USR 直到只有橙色 LED 亮起,然后松开 USR 开关。

  5. 橙色 LED 应快速闪烁 4 次,然后熄灭。

  6. 您现在处于安全模式。

在安全模式下,不执行 boot.pymain.py文件,因此 pyboard 以默认设置启动。这意味着您现在可以访问文件系统(应该会出现 USB 驱动器),并且您可以编辑 main.py. (保持boot.py 原样,因为我们在完成编辑后仍想回到 HID 模式main.py。)

输入 main.py以下代码:

import pyb

switch = pyb.Switch()
accel = pyb.Accel()
hid = pyb.USB_HID()

while not switch():
    hid.send((0, accel.x(), accel.y(), 0))
    pyb.delay(20)

保存您的文件,弹出/卸载您的 pyboard 驱动器,然后使用 RST 开关重置它。它现在应该充当鼠标,并且板的角度将移动鼠标。试试看,看看你能不能让鼠标静止不动!

按 USR 开关停止鼠标移动。

您会注意到 y 轴是倒置的。这很容易解决:只需在hid.send() 上面一行中的 y 坐标前面放一个减号。

8.3. 将您的 pyboard 恢复正常

如果您将 pyboard 保持原样,则每次插入时它都会像鼠标一样运行。您可能希望将其改回正常状态。为此,您需要先进入安全模式(见上文),然后编辑 boot.py文件。在boot.py 文件中,注释掉(在前面加上#) VCP+HID 设置的那一行, 看起来像:

#pyb.usb_mode('VCP+HID') # act as a serial device and a mouse

保存您的文件,弹出/卸载驱动器,然后重置 pyboard。它现在恢复到正常操作模式。