Skip to main content

Esp32-HID外设

什么是HID动作,啥时候使用HID?

我们可以把HID简单理解为给Android 手机配一个 “可控鼠标”+“可控键盘”

  • 换句话说:我们用esp32芯片虚拟了一个,android鼠标键盘外设,并且可通过指令控制该外设.

在部分自动化中,无障碍点击失效,Root点击失效.

蓝牙与USB如何选择?

  • 蓝牙固件: 通过蓝牙连接,适合设备量少的场景.单个场景超过25个左右,会有干扰. 但芯片价便宜
  • USB固件: 通过usb连接,设备之间无干扰. 适合设备量多的场景. 但芯片价格略高
本篇主讲如何把esp32系列芯片 刷入固件 虚拟为HID设备,并通过AS调用执行,点击,滑动,输入等动作.

Esp芯片支持与固件刷入

本部分主要讲,如何准备芯片,如何给芯片刷入固件

  • 芯片:需自行购买

  • 固件:免费提供

芯片获取

  • 您需要根据已支持的型号,自行购买芯片
  • 如果没有您的芯片型号,请加入官方Q群,联系管理员免费编译.
已支持芯片型号芯片图样蓝牙固件usb固件购买途径均价
esp32-c3某宝/某鱼9元/个
esp32-pico某宝/某鱼17元/个
esp32-s3某宝/某鱼20元/个
其他型号可联系官方编译

固件下载

刷入固件

运行烧录之前,需要配置python环境和安装对应的库。

详细视频教程

  1. 安装Python,并设置python环境变量.保证在命令行窗口中可以访问到python
  2. 打开命令行执行 pip install esptool
  3. 芯片usb连接至电脑。“按住”板子boot键(usb接口右按钮),同时点击一下reset键(usb接口左按钮)松开boot键,即可进入烧录模式
  4. 查看自己板子型号,假如是esp32c3 就进入到 固件对应的目录,双击运行烧录工具.bat

烧录成功后

  1. 点击一下 reset按键
  2. 打开任意android设备蓝牙, 刷新列表 出现AS开头的蓝牙,及表示成功。

蓝牙HID

蓝牙配对

打开android手机 > 设置 > 蓝牙 > 刷新蓝牙列表 > 点击AS开头的蓝牙设备进行配对.

配对成功后会自动连接.

蓝牙HID指令

与蓝牙芯片通信部分,已经集成在AS插件中.

from ascript.android import plug
plug.load("esp32")
from esp32 import BleDevice
# 自动扫描AS设备并连接
ble = BleDevice()
print("名称",ble.get_name())
print("MAC地址",ble.get_mac_address())
# 判断是否连接
if ble.is_conncted():
print("已连接")

# 模拟点击坐标
ble.click(394,2116)

# 其他方法
# ble.re_connect()
# ble.slide(151,1668,989,1755,dur=500)
# ble.input("123")
# ble.home()
# ble.back()
# ble.recent()
# ble.copy()
# ble.paste()
# ble.clear()
# ble.enter()

# 模拟鼠标按下,不抬起
# ble.touch_down(0,0,20)
# # 模拟鼠标移动
# ble.touch_move(100,100)
# # 模拟鼠标抬起
# ble.touch_up(100,100)

# 是否连接
if ble.is_conncted():
print("已连接")
# 尝试重新连接
if not ble.is_conncted() and ble.re_connect() :
print("已连接")
# 获取名称
name = ble.get_name()
print(name)
# 获取MAC地址
mac_address = ble.get_mac_address()
print(mac_address)
# 模拟点击: 参数1-2:坐标x,y, dur:点击时长
ble.click(x,y,dur=30)
# 模拟滑动: 参数1-4: 滑动坐标
# dur:滑动时长,down_dur:按下时长,up_dur:抬起时长,
# easing_mode = 0 缓动模式: 0= 匀速滑动, 1 = 逐渐加速滑动, 2 = 逐渐减速滑动, 3 = 逐加逐减
# easing_power = 1 缓动力度: 1的整数倍,力度越强,加减速越明显
# report_interval 报文发送间隔, 越小滑动越流畅,但有的机型会导致卡机,所以适中就可以了
ble.slide(x1, y1, x2, y2, dur=500,down_dur = 0,up_dur = 0,easing_mode = 0,easing_power = 1,report_interval = 30)
# 触摸,按下,移动,抬起 ,参数1-2 均为x,y坐标, 参数dur:耗费时长,默认20ms
# 模拟鼠标按下
ble.touch_down(x,y,dur=20)
# 模拟鼠标移动
ble.touch_move(x,y,dur=20)
# 模拟鼠标抬起
ble.touch_up(x,y,dur=20)
# 模拟输入: 模拟输入按键,只能数字与英文,如要输入汉字(可用系统剪贴版存入数据,再用hid粘贴动作)
ble.input(keys)
# 按下home按键
ble.home()
# 按下回退按键
ble.back()
# 呼出任务栏
ble.recent()
# 呼出任务栏
ble.recent()
# 复制输入框中的数据
ble.copy()
# 粘贴
ble.paste()
# 清空输入框
ble.clear()
# 点下回车
ble.enter()

USB-HID

连接授权

打开android手机 > 手机usb连接芯片 > 打开AS > 弹出设备授权 > 点击同意即可.

USB-HID指令

# 完整案例
from ascript.android import plug
plug.load("esp32")
from esp32 import UsbDevice
# 自动扫描AS设备并连接
usb = UsbDevice()
# 模拟点击坐标394,2116, 点击时间50毫秒
usb.click(394,2116,50)

# usb.slide(151,1668,989,1755,dur=500)
# usb.input("123")
# usb.home()
# usb.back()
# usb.recent()
# usb.copy()
# usb.paste()
# usb.clear()
# usb.enter()

# 模拟点击: 参数1-2:坐标x,y, dur:点击时长
usb.click(x,y,dur=30)
# 模拟滑动: 参数1-4: 滑动坐标, dur:滑动时长,down_dur:按下时长,up_dur:抬起时长,step_duration:每一步耗时
usb.slide(x,y,x1,y1,dur=500,down_dur = 10 , up_dur = 10, step_duration=3)
# 模拟输入: 模拟输入按键,只能数字与英文,如要输入汉字(可用系统剪贴版存入数据,再用hid粘贴动作)
usb.input(keys)
# 按下home按键
usb.home()
# 按下回退按键
usb.back()
# 呼出任务栏
usb.recent()
# 呼出任务栏
usb.recent()
# 复制输入框中的数据
usb.copy()
# 粘贴
usb.paste()
# 清空输入框
usb.clear()
# 点下回车
usb.enter()