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

 一、作为鼠标应用

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

?
1
2
3
4
<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中,输入:

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

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

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

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

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

?
1
2
3
4
5
6
7
    >>> import math
    >>> def osc(n, d):
    ...   for in range(n):
    ...     pyb.hid((0int(20 * math.sin(i / 10)), 00))
    ...     pyb.delay(d)
    ...
    >>> osc(10050)

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

?
1
2
3
4
5
6
7
8
    #main.py
    import math
    import pyb
    def osc(n, d):
    for in range(n):
    pyb.hid((0int(20 * math.sin(i / 10)), 00))
    pyb.delay(d)
    osc(10050)

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

二、作为键盘应用

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

?
1
2
3
4
5
6
7
 # 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文件:悦德财富:https://yuedecaifu.com

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
    # 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秒。

MicroPython开发板TPYBoard关于USB-HID的应用的更多相关文章

  1. 带以太网的MicroPython开发板:TPYBoardv201建立云加法器实例

    转载请注明文章来源,MicroPythonQQ技术交流群:157816561,公众号:MicroPython玩家汇 前面的一篇文档向大家介绍了v201的开发板作为客户端终端向TCPS上传数据的基本过程 ...

  2. 带以太网的MicroPython开发板:TPYBoardv201温湿度上传实例

    转载请以链接形式注明文章来源,MicroPythonQQ交流群:157816561,公众号:MicroPython玩家汇 历来关于温湿度的检测都是没有间断过的,这次我们继续检测温湿度,同样还是使用DH ...

  3. STC8H开发(九): STC8H8K64U模拟USB HID外设

    目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...

  4. TPYBoard—MicroPython开发板免费试用!你最想抱走哪款?

    TPYBoard开发板自上市开售以来,受到了广大硬件及MicroPython爱好者的一致好评,许多人提出想试用开发板的申请.为此,TPYBoard特推出多款开发板免费试用活动,感兴趣的朋友抓紧申请吧! ...

  5. MicroPython开发板:TPYBoard v102 播放音乐实例

    0x00前言 前段时间看到TPYBoard的技术交流群(群号:157816561,)里有人问关于TPYBoard播放音乐的问题.最近抽空看了一下文档介绍,着手做了个实验.更多MicroPython的教 ...

  6. NEXYS 3开发板练手--USB UART(一)

    接上一篇文章,今天来讲讲这个USB UART串口发送机. 我们知道,当我们的微处理器(单片机.FPGA.DSP等)要和电脑进行通信的时候一般会采用串行通信方式,而最常用的串行通信协议的物理层接口是RS ...

  7. TurnipBit—MicroPython开发板:从积木式编程语言开始学做小小创客

    编程.建模.制作动画和游戏--这些当初我们默认只有成年人玩得转的事情,现在早已经被无数小孩子给颠覆甚至玩出新境界了.热爱科技和动手的"创客"(Maker)现在在全世界都炙手可热.今 ...

  8. NEXYS 3开发板练手--USB UART(三)

    接着上一篇,今天我们来建立一个能用于实际工程中的DEMO. 首先,为了使我们的发送机不像上一个DEMO一样无节制的循环发送,我们需要修改代码,增加使发送机停止发送的控制部分,修改后的代码如下: `ti ...

  9. TurnipBit—MicroPython开发板:妥妥拽拽零基础也能玩编程

    可视化编程网站入口:www.turnipbit.com 说到编程.谈到硬件,你也许会想到屌丝逆袭女神的"传奇"故事,也许会浮现出带着眼镜.头发稀少.无精打采的程序猿形象." ...

随机推荐

  1. 转!JNDI 是什么?

    JNDI是 Java 命名与目录接口(Java Naming and Directory Interface),在J2EE规范中是重要的规范之一,不少专家认为,没有透彻理解JNDI的意义和作用,就没有 ...

  2. 抛弃优启Grub4dos和PE大多数时间可以这样用

    在能够进入Windows的情况下,Grub4dos和PE大多数时间可以这样用 http://files.cnblogs.com/files/liuzhaoyzz/boot_moban.rar Grub ...

  3. virtualbox macosx10.9改变分辨率方法

    VBoxManage setextradata "osx10.9" VBoxInternal2/EfiGopMode 5 VBoxManage setextradata " ...

  4. setInterval小问题

    先看下面代码: for (var i = 0; i < 3; i++) { setTimeout(function () { console.log(i) }, 1000); } 运行效果是 输 ...

  5. 倒计时原生js

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. 5.4.2 使用配置启动firefox

    1.使用firefox的本地配置加载浏览器 使用本地配置加载浏览器,代码如下. 这样运行后,可以看到firebug等插件都已启动. 练习:假设做性能测试时,需要获取某个状况下的页面网络运行参数.要求完 ...

  7. C++一个简单的类

    从基本数据类型说起: 一般情况下,c++中的基本数据类型有int ,char,,,, 但是这些数据类型是有限的,而且还是C++中自带的,缺乏灵活性 于是C++提供了一种定义自定义类型的方式----使用 ...

  8. 如何使用java调用DLL运行C++(初篇)

    JNI:Java Native Interface,简称JNI,是Java平台的一部分,可用于让Java和其他语言编写的代码进行交互. 下面是从网上摘取的JNI工作示意图:

  9. DataOdinalRegression

    clear name={'SCV1V1','SVC1VA','SVR','CSSVC','SVMOP','NNOP','ELMOP','GPOR','KDLOR','POM',... 'NNPOM', ...

  10. jQuery性能优化指南(转载)

    现在jquery应用的越来越多, 有些同学在享受爽快淋漓coding时就将性能问题忽略了, 比如我. jquery虽在诸多的js类库中性能表现还算优秀, 但毕竟不是在用原生的javascript开发, ...