Minke Is Nesting Key Events.
"它安静如深海鳁鲸,却能在你按下回车的瞬间,替你掀起巨浪。"
Minke 是一个基于 ESP32-S3 的微型自动化引擎。它通过 USB HID 协议将 ESP32 伪装成标准的物理键鼠设备,并通过串口(UART)接收上位机指令。
不同于传统的软件宏,Minke 实现了硬件级隔离与高度拟人化控制,支持宏录制、回放以及结合计算机视觉(CV)的闭环自动化。
- 物理伪装: 目标电脑识别为标准 HID 设备,无需安装驱动。
- 零软件残留: 自动化逻辑在另一台电脑运行,受控端无任何可疑进程。
- 贝塞尔曲线: 摒弃机械直线,生成符合生物力学的平滑移动轨迹。
- 动态变速: 基于菲茨定律 (Fitts's Law) 的加减速模型。
- 微观抖动: 模拟人类肌肉的微小震颤与过冲修正 (Overshoot)。
- 随机延迟: 基于高斯分布的按键停顿,拒绝固定频率。
- 相对模式 (Relative): 专为 FPS 游戏视角控制设计,支持高精度微操。
- 绝对模式 (Absolute): 专为 MOBA/桌面自动化设计,支持屏幕坐标直接映射 (0-32767),含安全边距保护。
Minke 采用 Python 上位机 + ESP32 固件 的双层架构,实现了决策与执行的完美分离。
graph TD
%% ================= 样式定义 =================
classDef hardware fill:#e1f5fe,stroke:#01579b,stroke-width:2px;
classDef python fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px;
classDef firmware fill:#fff3e0,stroke:#ef6c00,stroke-width:2px;
%% ================= 区域 1: 受控端 =================
subgraph Target_PC ["🖥️ 受控端 (Target PC)"]
direction TB
GameApp[("🎮 目标程序")]
OS_Driver["OS HID 驱动"]
USB_Physical["USB 接口"]
USB_Physical -->|HID 信号| OS_Driver --> GameApp
end
%% ================= 区域 2: 控制端逻辑 =================
subgraph Control_PC ["🧠 控制端 (Python Brain)"]
direction TB
UserScript["用户脚本 / CV 算法"]
subgraph Human_Layer ["拟人层 (human_hid.py)"]
HumanAlgo["贝塞尔曲线 / 抖动 / 过冲"]
end
subgraph Driver_Layer ["驱动层 (hid_driver.py)"]
ProtocolPack["协议封装 (11 Bytes)"]
end
UserScript --> Human_Layer --> Driver_Layer
end
%% ================= 区域 3: 硬件执行 =================
subgraph ESP32_Hardware ["🐋 Minke 固件 (ESP32-S3)"]
direction TB
UART_RX["UART 解析器"]
HID_Task["HID 任务 (RingBuffer)"]
TinyUSB["TinyUSB 协议栈"]
Driver_Layer ==>|UART TX->RX| UART_RX
UART_RX --> HID_Task --> TinyUSB
end
%% ================= 物理连接 =================
TinyUSB ==>|USB Cable| USB_Physical
%% ================= 样式应用 =================
class Target_PC,GameApp,OS_Driver,USB_Physical hardware;
class Control_PC,UserScript,Human_Layer,Driver_Layer python;
class ESP32_Hardware,UART_RX,HID_Task,TinyUSB firmware;
- ESP32-S3 开发板 (必须支持 USB OTG)。
- 两条 USB 线:
- USB OTG 口: 连接受控电脑(模拟键鼠)。
- UART/Debug 口: 连接控制电脑(发送指令/烧录固件)。
- Python 3.8+
- ESP-IDF v5.0+ (用于编译固件)
# 进入项目根目录
cd Minke
# 设置目标芯片
idf.py set-target esp32s3
# 编译并烧录 (假设 COM3 为开发板端口)
idf.py build flash -p COM3 monitor
# 安装依赖库
pip install pyserial pyautogui pynput
# 确认串口号 (Windows: COMx, Linux: /dev/ttyUSBx)
from driver.human_hid import HumanHID
# 连接控制端串口
with HumanHID('COM3', screen_width=1920, screen_height=1080) as bot:
print("Minke 已启动...")
# 拟人化移动到屏幕中心 (带抖动和过冲)
bot.move_to(0.5, 0.5, duration=0.8, jitter_pixels=5)
# 连击操作
bot.click('left')
# 键盘宏
with bot.hold('shift'):
bot.type("hello minke", wpm=100)Minke 使用 11 字节定长帧 进行高效通信。
| Header | Type | Arg1 | Arg2 | Arg3 | Arg4 | Arg5 | Arg6 | Delay_L | Delay_H | Tail |
|---|---|---|---|---|---|---|---|---|---|---|
0xAA |
ID |
B1 |
B2 |
B3 |
B4 |
B5 |
B6 |
ms |
ms |
0x55 |
- Type 0x01 (键盘):
[Keycode, Flags, Modifier, 0, 0, 0] - Type 0x02 (相对鼠标):
[Buttons, Wheel, X_L, X_H, Y_L, Y_H](包含大数值拆包逻辑) - Type 0x03 (绝对鼠标):
[Buttons, 0, X_L, X_H, Y_L, Y_H]
Minke/
├── main/ # ESP32 固件源码
│ ├── main.c # FreeRTOS 任务入口
│ ├── usb_descriptors.c # HID 描述符定义 (PID/VID)
│ └── protocol/ # UART 协议解析
├── driver/ # Python 上位机驱动
│ ├── hid_driver.py # 底层通信封装
│ ├── human_hid.py # 拟人化算法层 (贝塞尔/Fitts)
│ ├── recorder.py # 动作录制工具
│ └── replayer.py # 动作回放工具
├── CMakeLists.txt # 构建脚本
└── README.md # 说明文档
Minke 内置了强大的宏录制系统,支持将操作保存为 .jsonl 文件。
录制操作:
# 运行后按 F12 停止录制
python driver/recorder.py
# 输出文件: actions.jsonl
回放操作:
# 支持倍速回放 (speed=2.0)
python driver/replayer.py
本项目仅供技术研究与教育用途(如自动化测试、辅助功能开发)。 请勿将本项目用于违反游戏服务条款(ToS)的行为。开发者不对因使用本项目导致的账号封禁或法律后果承担任何责任。
Made with by Minke