6157|19

1万

帖子

24

TA的资源

版主

楼主
 

【SAMR21新玩法】34. 模拟USB鼠标键盘 [复制链接]

 
 

和MicroPython一样,在CircuitPython中,可以非常容易的模拟USB HID设备,可以将设备作为USB键盘或者USB鼠标。先看一下USB HID的基本用法:

 

import usb_hid

kb = usb_hid.devices[0]
kb.send_report(buf)


buf是bytes或者bytearray类型,对于键盘,需要发送8字节的数据,而对于鼠标,需要发送4字节数据。

此内容由EEWORLD论坛网友dcexpert原创,如需转载或用于商业用途需征得作者同意并注明出处
 

最新回复

SAMR21新玩法】34. 模拟USB鼠标键盘 [修改]   详情 回复 发表于 2023-10-7 17:14
点赞 关注(1)
 
 

回复
举报

1万

帖子

24

TA的资源

版主

沙发
 

上面只是基本的使用方式,具体的使用如下,USB键盘的使用方法:

 

游客,如果您要查看本帖隐藏内容请回复

首先定义键盘类kb,然后发送数据,代表按键按下。注意发送数据后需要再次发送0,代表按键释放,否则系统会一直发出按键。例如,下面将发送字母a:

 

kb_send(4)

 

 
 
 

回复

1万

帖子

24

TA的资源

版主

板凳
 

因为键盘缓冲区是8字节,第一个字节代表ctrl、shift、alt键状态,2-7字节代表字符,所以一次最多可以发送6个字符,将上面程序略作修改,就可以实现多个字符的发送:

游客,如果您要查看本帖隐藏内容请回复

例如,使用kb_sends(4,5,6)将发送abc。

 
 
 

回复

1万

帖子

24

TA的资源

版主

4
 

注意注意USB HID发送的键盘数据并不是字符的ASCII码,而是USB协议定义的数据,具体数据可以参考USB协议中的规定,也可以参考下面精简的表格

 

USBKeyScan.pdf (16.4 KB, 下载次数: 30)

 
 
 

回复

1万

帖子

24

TA的资源

版主

5
 

鼠标的使用方法和键盘类似,区别在于使用了device[1],数据是4字节:

 

mouse = usb_hid.devices[1]
mouse.send_report(bytes([0, 100, 0, 0]))

 

上面的程序,将鼠标位置右移100(x方向)。

 

缓冲区的数据,第一个代表鼠标按键;第2/3个代表X/Y方向移动距离;第4个字节代表滚动。

 

 
 
 

回复

1万

帖子

24

TA的资源

版主

6
 

USB鼠标键盘演示,当按下触摸键A0时,鼠标做圆圈运动;按下A1,发送数字1;按下A2,发送字母a。

 

import usb_hid
from time import sleep
import touchio
from board import *
import math

tp1 = touchio.TouchIn(A0)
tp2 = touchio.TouchIn(A1)
tp3 = touchio.TouchIn(A2)

kb = usb_hid.devices[0]
mouse = usb_hid.devices[1]

n = 0
while 1:
    sleep(0.1)
    if tp1.value:
        t = n*math.pi/360
        x, y = round(10*math.cos(t)), round(10*math.sin(t))
        if x < 0: x += 256
        if y < 0: y += 256
        buf = bytes([0, x, y, 0])
        print(n, buf[0], buf[1] ,buf[2], buf[3])
        mouse.send_report(buf)
        n += 10

    if tp2.value:
        kb.send_report(bytes([0, 0, 0x1E, 0, 0, 0, 0, 0]))
        sleep(0.01)
        kb.send_report(bytes(8))
        kb.send_report(bytes(8))
    
    if tp3.value:
        kb.send_report(bytes([0, 0, 0x04, 0, 0, 0, 0, 0]))
        sleep(0.01)
        kb.send_report(bytes(8))
        kb.send_report(bytes(8))

 

 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

7
 

SAMR21新玩法】34. 模拟USB鼠标键盘 [修改]

 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

8
 

您好,请问usb-hib是设备自带的吗?我现在想用python来调用,发现一直报 No module named 'usb_hid'。

点评

自带的。是不是你的版本问题  详情 回复 发表于 2019-12-19 09:02
 
 
 

回复

1万

帖子

24

TA的资源

版主

9
 
feiandrou 发表于 2019-12-18 22:01 您好,请问usb-hib是设备自带的吗?我现在想用python来调用,发现一直报 No module named 'usb_hi ...

自带的。是不是你的版本问题

点评

8266或者ESP32也能玩这个吗?  详情 回复 发表于 2019-12-24 10:02
 
 
 

回复

128

帖子

0

TA的资源

一粒金砂(中级)

10
 
dcexpert 发表于 2019-12-19 09:02 自带的。是不是你的版本问题

8266或者ESP32也能玩这个吗?

点评

不能  详情 回复 发表于 2019-12-24 10:02
 
 
 

回复

1万

帖子

24

TA的资源

版主

11
 
9zhmke 发表于 2019-12-24 10:02 8266或者ESP32也能玩这个吗?

不能

 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

12
 

看看如何使用的

 
 
 

回复

10

帖子

0

TA的资源

一粒金砂(中级)

13
 

请问哪个开发板才能运行上面的代码?

点评

支持circuitpython的都可以,比如SAM D21/R21/D51等。  详情 回复 发表于 2020-11-27 15:49
 
 
 

回复

1万

帖子

24

TA的资源

版主

14
 
soidea 发表于 2020-11-27 14:31 请问哪个开发板才能运行上面的代码?

支持circuitpython的都可以,比如SAM D21/R21/D51等。

 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

15
 

谢谢楼主分享技术。

 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(中级)

16
 

RE: 【SAMR21新玩法】34. 模拟USB鼠标键盘 [修改]

 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(中级)

17
 

RE: 【SAMR21新玩法】34. 模拟USB鼠标键盘 [修改]

 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(中级)

18
 
  • RE: 【SAMR21新玩法】34. 模拟USB鼠标键盘 [修改]
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(中级)

19
 

RE: 【SAMR21新玩法】34. 模拟USB鼠标键盘 [修改]

 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(中级)

20
 

SAMR21新玩法】34. 模拟USB鼠标键盘 [修改]

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表