零代码也能玩硬件:用 60 元 Arduino 把键盘鼠标自动化做成“物理外挂”

核心问题:没有嵌入式经验,能不能在 Windows 上快速搭一套“即插即用”的键盘鼠标自动化硬件?
一句话答案:可以,只要一块 Arduino Leonardo、一个 Qt 小工具,30 分钟就能跑通;下文给你可复制的每一步。


1. 方案速览:两块板子、一条 USB 线,到底能做什么?

场景 手工操作痛点 硬件自动化做法 收益
游戏刷材料 重复按键 3 小时 插上小板→选窗口→设定 200 ms 间隔→自动连点 零值守,防封号(Windows 层操作,不注入进程)
报表录入 每天 Ctrl+C / Ctrl+V 500 次 录一段“组合键宏”,设 07:50 定时启动 早到工位,数据已就位
老化测试 手动来回 Alt+Tab 顺序执行 Tab→Space→Enter→随机 0.5-1 s 间隔 通宵跑,无疲劳

作者反思:最早我用纯软件宏被安全软件拦,换硬件层后一条报警都没再弹;物理“摸”键盘,系统就当是人。


2. 项目组成:软件 + 固件,为什么一定要分两边?

2.1 客户端(Qt 桌面端)

  • 可视界面:选窗口、勾按键、填间隔、定时起止。
  • 真正干的活:把“按键序列”转成串口指令,发给 Arduino。

2.2 固件(Arduino 端)

  • 基于 ATmega32U4 的 Leonardo 自带 USB-HID 功能,插上电脑就被识别成键盘/鼠标。
  • 收到串口指令后,直接调用 Keyboard.press() / Mouse.click(),绕过操作系统权限限制。

一句话:Qt 端负责“脑”,Arduino 负责“手”;两边通过 USB-CDC 串口对话,115200 波特率,延迟 <10 ms。


3. 准备清单:60 元起步,一台 Windows 10 以上机器

类别 名称 数量 预估价 备注
硬件 Arduino Leonardo 兼容板 1 55-65 元 必须 32U4 主控,Uno 不行
线材 Micro-USB 数据线 1 5 元 传数据 + 供电
软件 Qt 5.15.2 开源版 1 0 元 安装时勾选 MinGW 即可
工具 Arduino IDE 2.x 1 0 元 烧录用,也可用 Arduino CLI

淘宝关键词:Arduino Leonardo R3 ATMEGA32U4,选有“送数据线”套餐即可。


4. 烧录固件:第一次玩板子,5 步搞定

核心问题:Arduino 第一次上手,最简烧录路径是什么?

  1. 安装 Arduino IDE → 启动后点击“工具→开发板→Arduino AVR Boards→Arduino Leonardo”。
  2. 插板子到 USB → “工具→端口”里出现 COMx(x 数字因人而异)→ 选中。
  3. 打开固件文件:arduino/keypresser.ino(源码已在压缩包)。
  4. 点“✓ 验证”→ 底部提示“编译完成”。
  5. 点“→ 上传”→ 状态栏出现“上传成功”,板载 L 灯闪两下,完事。

常见坑

  • 上传时提示“端口消失”→ 别急,Leonardo 会重启,30 秒后自动回来。
  • 驱动未识别→ Windows 10 以上自带,若仍问号,手动选“Arduino bootloader”驱动即可。

5. 编译 Qt 客户端:从源码到 exe,只要点三下

  1. 打开 KeyPresserHardware.pro(Qt Creator→文件→打开项目)。
  2. 左下角 kit 选 MinGW 64-bit → 点“构建”小锤子。
  3. 构建完毕,进入 build-KeyPresserHardware-Desktop-Release/release/ 找到 KeyPresserHardware.exe,双击即可跑。

作者教训:第一次用 MSVC 套件编译,结果跑到没装运行库的电脑直接闪退;改 MinGW 后裸机可跑,绿色发布。


6. 使用教程:30 分钟跑通第一个“自动刷 F5”脚本

6.1 连接硬件

插 Leonardo → 启动 exe → 状态栏自动显示“Arduino Leonardo 已连接”;若未识别,点“重新扫描”。

6.2 选择目标窗口

点“选择窗口”→ 光标变成十字→ 移到浏览器标签栏点一下→ 软件窗口标题自动填入,表示后续按键只发到此窗口。

6.3 配置按键序列

  1. 勾选“顺序模式”。
  2. 右侧列表添一行:

    • 类型:单键
    • 键值:F5
    • 最小间隔:1000 ms
    • 最大间隔:1500 ms(随机防检测)
  3. 如需组合键,选“组合键”→ 下拉选 Ctrl → 再选 R,实现强制刷新。

6.4 定时任务(可选)

勾选“定时任务”→ 设开始 08:00、结束 08:30→ 到点自动启停,午休不再占用机器。

6.5 启动 & 停止

点“开始”→ 目标窗口每秒收到一次 F5;软件最小化到托盘,右键可瞬间停止。

场景示例:把公司仪表板网页设成 5 秒一刷,领导路过永远看到最新数字,其实你去喝咖啡了。


7. 进阶玩法:随机间隔、独立/顺序模式、置顶窗口

功能 说明 适用场景
随机间隔 最小 800 ms、最大 1200 ms,每次在区间随机 游戏防检测、模拟真人
独立模式 多按键同时按下,无先后 格斗游戏“搓招”
顺序模式 严格按照列表一行一行来 表单跳转、后台录单
置顶窗口 客户端界面保持最前,方便调试 多屏用户福音

作者见解:随机间隔是精髓,比固定 1 秒更“人”;但区间别太大,否则业务逻辑会乱,我通常给 ±20% 浮动。


8. 配置文件:一次编排,多机复现

点“保存配置”→ 生成 .cfg JSON 文件,内容示例:

{
  "window": "Chrome",
  "mode": "sequence",
  "hotkeys": [
    {"type": "key", "value": "F5", "min": 1000, "max": 1500}
  ],
  "schedule": {
    "enable": true,
    "start": "08:00",
    "end": "08:30"
  }
}

把 cfg 放 U 盘,下班带回家,家里电脑加载后秒级还原,真正做到“脚本随身”。


9. 故障排查:90% 问题这三条日志就能定位

现象 自查清单 解决
状态栏一直“未连接” 设备管理器有无 COM?驱动图标黄不黄? 换线、换 USB2.0 口、重装驱动
按键无反应 窗口标题是否匹配?是否被安全软件拦截? 重新选择窗口,把 exe 加入白名单
定时没启动 系统时间对不对?时区是否东八区? 同步 Internet 时间,重启软件

反思:曾经我把窗口选成“记事本”却盯着浏览器发呆,以为板子坏了;其实软件精准投递,只是投错了地方。


10. 许可证与伦理提醒:CC BY-NC-SA 4.0,非商业共享

  • 可自由修改、再发布,但必须同名协议、注明原作者。
  • 禁止出售固件或捆绑硬件盈利。
  • 游戏场景请遵守运营商用户协议,高风险封号行为自负。

11. 实用摘要 / 操作清单(A4 打印版)

  1. 买 Leonardo → 2. 烧录固件 → 3. 编译 Qt → 4. 插线启动 → 5. 选窗→ 6. 添按键 → 7. 随机间隔 → 8. 定时 → 9. 保存配置 → 10. 开始运行
    总耗时 ≤ 30 分钟,成本 ≤ 60 元

12. One-page Summary

KeyPresser Hardware = Qt 前端 + Arduino 固件,利用 Leonardo 的 USB-HID 把串口命令转成真实键鼠事件。支持单键、组合键、随机间隔、定时启停、配置导入导出。零驱动、零汇编、零注入,Windows 10/11 即插即用,适合重复性 GUI 自动化、游戏辅助、网页刷新、老化测试。项目开源且仅允许非商业使用。


13. 常见问答(FAQ)

  1. Uno/Nano 能不能替代 Leonardo?
    不能,只有 32U4 原生 USB-HID,Uno 需额外刷 Hoodloader,复杂且不稳定。

  2. 会被游戏反作弊拦截吗?
    硬件层模拟,系统层面就是“人”在按键;但请遵守游戏协议,高风险动作自担。

  3. 最多支持多少按键同时按?
    固件采用 6KRO,标准键盘协议上限 6 个同时按下,足够日常/游戏宏。

  4. 串口波特率能再提高吗?
    115200 已低至 1 ms 内完成传输;再提升对 HID 刷新无感知,反而增加丢包。

  5. 想加鼠标滚轮怎么办?
    固件已留 Mouse.scroll(int8_t) 接口,Qt 端下拉框加一行即可,零门槛扩展。

  6. 能否在 macOS 跑客户端?
    源码无 WinAPI 依赖,Qt 跨平台,只需把窗口选择模块改成 Quartz API 即可,作者未实测。

  7. 定时任务会错过系统睡眠怎么办?
    软件启动时调用 SetThreadExecutionState 禁止睡眠,跑完自动恢复,通宵老化无忧。


图片来源示例(可替换):
Unsplash 技术自动化
图片来源:Unsplash