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)中有描述,但我们在这里重复说明:
按住 USR 开关。
在仍然按住 USR 的同时,按下并松开 RST 开关。
然后 LED 会从绿色循环到橙色再到绿色 + 橙色,然后再返回。
继续按住 USR 直到只有橙色 LED 亮起,然后松开 USR 开关。
橙色 LED 应快速闪烁 4 次,然后熄灭。
您现在处于安全模式。
在安全模式下,不执行 boot.py
和main.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。它现在恢复到正常操作模式。