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('CDC+MSC')
- # act as a serial and a storage device
- #pyb.usb_mode('CDC+HID')
- # act as a serial device and a mouse
为使能鼠标模式,将文件最后一行的注释号去掉,如下所示:
- pyb.usb_mode('CDC+HID') # act as a serial device and a mouse
修改完boot.py 文件后,使其工作的最小量代码如下所示:
- import pyb
- pyb.usb_mode('CDC+HID')
这告知 pyboard 板在其启动时将自身设置为一个CDC(串口连接) 和 HID(人机交互设备,在本例中即鼠标) 的 USB 设备。
退出/卸载 pybord 设备并通过复位按键重置,之后你的 PC 机就可以将 pyboard 板当作鼠标使用了!
8.1 手动发送鼠标事件
为让 py鼠标 能够将我们想要发送的事件传递到 PC 机中,我们先通过交互式解释器(REPL)完成这个目标。连接 pyboard 板,在串口程序里边打入如下代码:
- >>> pyb.hid((0, 10, 0, 0))
你的鼠标现在向右移动了十个像素!上述代码中你发送了四个信息:按键状态,x 坐标,y坐标和滚动值(?)。数字即告知 PC 机在 x轴上移动十个像素。
下面代码实现鼠标左右摇晃:
- >>> import math
- >>> def osc(n, d):
- ... for i in range(n):
- ... pyb.hid((0, int(20 * math.sin(i / 10)), 0, 0))
- ... pyb.delay(d)
- ...
- >>> osc(100, 50)
osc 函数的第一个参数即要发送的鼠标事件,第二个参数即每个事件中的毫秒级别延迟时间。尝试用不同的数值代替。
练习: 让鼠标围着圈圈转动。
8.2 加上加速度传感器的鼠标
用加速度传感器制作一个能根据 pyboard 板角度移动而移动的鼠标。相关的代码可以直接在 交互式解释器里边完成,或者放入 main.py 文件中。在这里我们选择放入 main.py 文件,因为这样做我们可以学到如何进入安全模式。
当 pyboard 作为 USB 串口设备和 HID 鼠标时,无法连接文件系统以编辑更改 main.py 的内容。
因此我们需要进入安全模式实现我们的目标。这在上一篇教程里已有提及,这里再重复一遍:
- 按下用户按键;
- 保持用户按键按下的同时,按下重置按键后松开
- LED灯将持续亮绿灯,然后橙灯再到绿橙灯一起亮的循环;
- 保持按下用户按键直到橙色的LED灯亮起,然后就可松开用户按键;
- 橙色的 LED 灯将快速闪烁四次,然后熄灭;
- 现在你进入了安全模式
安全模式下 boot.py 和 main.py 文件不被执行,所以 pyboard 板将按照默认的设置启动。这意味着可以连接到文件系统(USB设备将出现),且可以对 main.py 文件进行编辑。(保持 boot.py 文件不动,因为在编辑完 main.py 文件后我们需要返回 HID 模式)。
在 main.py 中我们打入如下代码:
- import pyb
- switch = pyb.Switch()
- accel = pyb.Accel()
- while not switch():
- pyb.hid((0, accel.x(), accel.y(), 0))
- pyb.delay(20)
保存文件,退出或卸载 pyboard 设备。通过复位按键重置,其将再次成为鼠标,且不同的板的角度将移动鼠标。试试看能否保持鼠标的静止不动。
按下复位按键将停止鼠标姿态。
你应该能注意到 y轴方向是颠倒的。这个问题很容易解决:在上述的 pyb.hid( )行里,y 轴方向前边加上负号即可。
8.3 恢复pyboard 为普通模式
上述实验后不做更改,那么每次连接上 pyboard 板其只能作为鼠标被使用。或许你想要回到普通状态。为此首先你需要进入安全模式(如上所示),然后编辑 boot.py 文件。在 boot.py 文件中注释 CDC_HID 的设置(在前边加上 # 号),如下所示:
- #pyb.usb_mode('CDC+HID') # act as a serial device and a mouse
保存文件,退出或卸载设备,重置板子则进入普通操作模式。