8. 使TPYBoard作为USB鼠标¶
该TPYBoard 是一个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')
这告诉TPYBoard将其自身配置为启动时的VCP(虚拟COM端口,即串行端口)和HID(人机界面设备,在我们的例子中是鼠标)USB设备。
弹出/卸载TPYBoard驱动器,并使用RST开关重新设置。您的电脑现在应该检测到TPYBoard为鼠标!
8.1. 手动发送鼠标事件¶
为了让鼠标做任何事情,我们需要将鼠标事件发送到PC。 我们将首先使用REPL提示手动进行此操作。使用串行程序连接到您的TPYBoard,并键入以下内容:
>>> hid = pyb.USB_HID()
>>> hid.send((0, 10, 0, 0))
你的鼠标应该向右移动10像素!在上面的命令中,您将发送4条信息:按钮状态,x,y和滚动。 数字10告诉PC机鼠标在x方向移动10个像素。
让我们让鼠标左右摆动:
>>> 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. 用加速度计制作鼠标¶
现在让使用加速度计的鼠标移动基于TPYBoard的角度。 可以直接在REPL提示符下键入以下代码,也可以将其放入main.py文件中。 在这里,我们会加入main.py,因为要做到这一点,我们将学习如何进入安全模式。
目前,TPYBoard充当串行USB设备和HID(鼠标)。所以您无法访问main.py文件系统来编辑文件。
您也无法编辑您boot.py的HID模式,并使用USB驱动器恢复正常模式...
为了解决这个问题,我们需要进入安全模式。这在[安全模式教程](tut-reset)中有描述,但是我们在此重复说明:
- 按住USR开关。
- 同时按住USR,按下并释放RST开关。
- 然后LED将循环绿色至橙色至绿色+橙色并再次返回。
- 继续按住USR,直到只有橙色LED点亮,然后放开USR开关。
- 橙色LED应闪烁4次,然后关闭。
- 你现在处于安全模式。
在安全模式下,boot.py并且main.py文件不被执行,因此TPYBoard启动时使用默认设置。 这意味着您现在可以访问文件系统(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)
保存文件,弹出/卸载您的TPYBoard驱动器,并使用RST开关重置它。 它现在应该用作鼠标,并且板的角度将移动鼠标。尝试一下,看看是否可以让鼠标静止不动!
按USR开关停止鼠标移动。
你会注意到y轴是倒置的。这很容易解决:只需在上方的y坐标前放一个减号hid.send()。
8.3. 恢复您的TPYBoard正常¶
如果你按原样离开你的TPYBoard,每当你插入它,它就会像鼠标一样表现出来。 你可能想把它改成正常。要做到这一点,您需要先进入安全模式(见上文),然后编辑boot.py文件。 在boot.py文件中,注释掉(放在#前面)的行与 VCP+HID设置,所以它看起来像:
#pyb.usb_mode('VCP+HID') # act as a serial device and a mouse
保存文件,弹出/卸载驱动器,并重置TPYBoard。现在回到正常的工作模式。