MicroPython开发板TPYBoard关于USB-HID的应用

简介:

USB-HID是Human Interface Device的缩写,属于人机交互操作的设备,如USB鼠标,USB键盘,USB游戏操纵杆,USB触摸板,USB轨迹球、电话拨号设备、VCR遥控等等设备。 TPYBoard借助micropython除了具有usb host功能以外,还可作为USB-HID设备来应用,这里重点讲述如果作为鼠标和键盘使用。

一、作为鼠标应用

(1)编辑 boot.py 文件以更改 USB—mouse 的确认方式。具体如下:

<span style="font-family: 宋体, SimSun; font-size: 12px;"># boot.py -- run on boot-
up<br># can run arbitrary Python, but best to keep it minimal<br>import pyb<br>#pyb.main('main.py')
<br># main script to run after this one#pyb.usb_mode('CDC+MSC')
<br># act as a serial and a storage device<br>pyb.usb_mode('CDC+HID')<br># act as a serial device and a mouse<br></span>

其实就是去掉了pyb.usb_mode('CDC+HID')前的注释符。这里pyb.usb_mode(),定义了HID的设备,默认为mouse,也可以用pyb.usb_mode('CDC+HID',hid=pyb.hid_mouse)。如果是键盘,应改为pyb.usb_mode('CDC+HID',hid=pyb.hid_keyboard)。

(2)REPL调试鼠标事件

这里依然用putty进行REPL调试。当进行完(1)再次启动时,会发现原本会出现的u盘没有了,此时设备的串口也可能发生了改变,因此在连接Putty前要先确认一下串口。在putty中,输入:

pyb.hid((0,10,0,0))  #注意这里两层括号

回车后,会发现鼠标向右移动了10个像素。pyb.hid()的具体用法:

pyb.hid((buttons, x, y, z))

这里buttons取0,1,2,3分别表示0移动,1按下左键,2按下中键,3按下右键。这句也可以用pyb.USB_HID().send((buttons, x, y, z)),效果是一样的。

(3)鼠标左右摇晃,代码如下:

>>> 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)

这段代码也可以写到main.py中,这时大家可能会问,u盘没了,main.py怎么编辑啊。这里需要进入TPYBV101的安全模式。按住usr键,按一下reset,此时led2与led3交替亮,当led3亮起,led2没亮时,松开usr,此时led3快闪后,可以发现u盘挂载出来了,这时可以修改main.py文件。

#main.py
    import math
    import pyb
    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)

保存后,按reset重启后,就可以看到效果了。

二、作为键盘应用

(1) 编辑 boot.py 文件,定义usb-keyboard

# boot.py -- run on boot-up
    # can run arbitrary Python, but best to keep it minimal
    import machine
    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',hid=pyb.hid_keyboard) # act as a serial device and a keyboard

(2)按键测试,这里为了便于查看,我们修改main.py文件:

# main.py -- put your code here!
    hid=pyb.USB_HID()
    def release_key_once():
    buf = bytearray(8) # report is 8 bytes long
    buf[2] = 0
    hid.send(buf) # key released
    pyb.delay(10)
    def press_key_once(key):
    buf = bytearray(8) # report is 8 bytes long
    buf[2] = key
    hid.send(buf) # key released
    pyb.delay(10)
    def press_2key(key1,key2):
    buf = bytearray(8) # report is 8 bytes long
    buf[2] = key1
    buf[3] = key2
    hid.send(buf) # key released
    pyb.delay(10)
    def release_2key():
    buf = bytearray(8) # report is 8 bytes long
    buf[2] = 0
    buf[3] = 0
    hid.send(buf) # key released
    pyb.delay(10)
    pyb.delay(1000)
    press_key_once(0x04)
    release_key_once()
    pyb.delay(1000)
    press_key_once(0x05)
    release_key_once()
    pyb.delay(1000)
    press_key_once(0x2B)
    release_key_once()
    pyb.delay(1000)
    press_key_once(0x28)
    release_key_once()
    pyb.delay(1000)
    press_key_once(0x06)
    release_key_once()
    pyb.delay(1000)
    press_key_once(0x07)
    release_key_once()
    pyb.delay(1000)
    press_2key(0x08,0x09)
    release_2key()
    pyb.delay(1000)

这个程序定义了按下一个键press_key_once(key),抬起一个键 release_key_once(),按下两个键press_2key(key1,key2),抬起两个键release_2key()的方法。具体运行效果,可先打开一个记事本,然后按一下reset键,或者插拔一次usb口,最后可以看到在记事本里,先打入ab,接着是tab,回车,接着cdef,除了ef几乎同时出现,前面的输入间都间隔了1秒。

文章转载自 开源中国社区[http://www.oschina.net]

相关文章
|
10天前
|
IDE 物联网 开发工具
【瑞萨MCU】玩转 HMI-Board 之 MDK + RASC 点灯
【瑞萨MCU】玩转 HMI-Board 之 MDK + RASC 点灯
|
7月前
|
Python
MicroPython 玩转硬件系列4:串口小实验
MicroPython 玩转硬件系列4:串口小实验
|
异构计算
FPGA新起点V1开发板(二)——Quartus II软件的安装和USB-BLaster驱动安装
FPGA新起点V1开发板(二)——Quartus II软件的安装和USB-BLaster驱动安装
231 0
FPGA新起点V1开发板(二)——Quartus II软件的安装和USB-BLaster驱动安装
|
Linux 开发工具 git
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(三十六)GPIO和Pinctrl子系统的使用(下)
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(三十六)GPIO和Pinctrl子系统的使用
255 0
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(三十六)GPIO和Pinctrl子系统的使用(下)
|
Linux 芯片
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(三十六)GPIO和Pinctrl子系统的使用(上)
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(三十六)GPIO和Pinctrl子系统的使用
239 0
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(三十六)GPIO和Pinctrl子系统的使用(上)
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(二十三)普适的GPIO引脚操作方法
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(二十三)普适的GPIO引脚操作方法
154 0
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(二十三)普适的GPIO引脚操作方法
|
Ubuntu Linux 编译器
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(二十七)具体单板的LED驱动程序
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(二十七)具体单板的LED驱动程序
156 0
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(二十七)具体单板的LED驱动程序
|
Linux C语言 芯片
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(二十二)LED硬件原理
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(二十二)LED硬件原理
124 0
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(二十二)LED硬件原理
|
传感器 测试技术 芯片
可编程 USB 转串口适配器开发板如何用S2STool工具
S2STool 是为 S2S 固件开发的测试工具,运行于 Windows 平台,内置串口调试助手和 S2S 参数配置工具,支持动态解析自定义的芯片驱动,用户可自行编写、修改、增加任何芯片的驱动程序, 方便对芯片进行测试和评估。
可编程 USB 转串口适配器开发板如何用S2STool工具
|
异构计算 Windows
VHDL串口通信 在FPGA开发板上测试 并解决没有识别到下载接口USB_Blaster(No Hardware问题)
今天在调试 VHDL 串口通信,当使用 Quartus II 13.0 综合好的文件下载到 FPGA 开发板时发现,没有识别到下载USB_Blaster
470 0
VHDL串口通信 在FPGA开发板上测试 并解决没有识别到下载接口USB_Blaster(No Hardware问题)