ESP32物理连点器
个人观点,仅供参考

缘起
起因是上上个星期在我的世界里造了一个半自动钓鱼机,需要每隔5秒点击一次鼠标右键。当时我想着用一个普通的连点器来自动钓鱼,实践后发现根本不行😅
最开始我以为是鼠标的问题。连点器是虚拟鼠标,而真实鼠标是物理鼠标,于是一个很朴素的想法诞生了:
- 诶🤓👆如果我外接一个真实的模拟物理鼠标的设备,那在电脑看来不就是一个真正的鼠标发起的点击操作吗🤗

好巧不巧,强大的 esp32早就可以模拟蓝牙鼠标,我只需要学会如何把程序写入单片机就可以了🤩
想法是美好的,道路是曲折的。
板子不工作了???
起初,esp32很给力,我一次就成功启动鼠标连点。代码 ai 写,我只需要学如何编译。
流程跑通后,我把写了个空函数来关掉连点器,打算后面慢慢改,然后开心地玩游戏去了。
玩完游戏天塌了:我重新上传代码,在调试串口里面却没有输出!最诡异的是,编译和上传的过程都是正常的!
于是我问 ai。它要不是反复给我修改单片机烧录的配置,要不就是反复给我“最小调试代码”。第二天下午,我新开了一个对话聊了半小时还是和之前类似的结果。我又花了一个小时让 ai 上网找资料,自己看论坛找技术手册,折腾很久还是一样的诡异现象。
后来, ai 建议我重写分区表,重新安装 bootloader,我看了看方案直接叹了一口气:要真这样那不得 debug 到猴年马月啊!这板子是才到的新板子啊😭😭
正当我想要放弃之时,我察觉到了一个很神奇的现象:我在 main.cpp 里面不小心加入了非法字符,居然可以编译通过?!😡
ai 说,这可能是因为版本设置不当,而导致编译器认为当前版本是旧版本而非新版本,进而不编译。
我听了听感觉好没道理:时间设置凭什么不当?我的系统时间不太可能出过问题,所以这个解释不成立啊。
注意到 ai 提到当前编译的代码和我期望编译的代码不一样,我忽然想到了什么。
我想着:既然真正编译的和我一直修改的不一样,那一定存在一个编译器真正编译的代码文件。这个文件在哪里呢?🤔
我百思不得其解,决定新建项目。新建项目后,我发现项目根目录下居然没有 main.cpp!!!仔细观察目录结构,发现有一个 src 文件夹,打开发现 main.cpp 静静地躺在那里。😨
我瞬间理解了一切。
- 原来我之前一直修改的根目录下的main.cpp 是我自己创建的,而编译器编译的是 src 文件下下的代码文件。😰

我曾以为是代码问题,花了两个半小时 debug,以为板子坏了,没想到真相竟如此简单:我 debug 的这两个多小时,根本没动过真正编译的 main.cpp!!!
再一次被自己蠢笑了🤡👈🤣
你说得对,但是《我的世界》不认连点器啊
但新的问题又来了:解决了板子“不工作”的问题,我的世界不认 esp32 的情况依然存在。我上网搜了很多攻略,都没找到解决办法。
ai 一直给我灌输什么“游戏会认鼠标制造商”“因为点击频率固定而被判定为连点器”之类的观点。我看着 ai 所输出的内容,感觉它所说的看上去有道理,但实际发生的概率太小了,不符合常规逻辑。
我再一次注意到了一个细节。一次和ai对话的过程中,我无意间提到“破坏方块的时间”。同时,之前在让ai解析blemouse.h库底层代码实现的时候,我意识到点击鼠标和弹起鼠标是两个不同的事件,而这两个事件中间有一定的时间差。我突然意识到一个事情:
- 也许“放置方块”这样看似在一瞬间完成的操作,其实也需要一个在很小时间内按住鼠标不放的过程呢?
我测了一下我点击鼠标的速度。一秒钟我最多点5~6下,意味着我按住鼠标不放这个状态持续了大概200ms左右。而连点器呢?它完成鼠标点击的操作几乎在“一瞬间”,在几毫秒内就完成了一次鼠标按键的按下和抬起。
我突然顿悟了。我的世界原来还有这样的机制:
即使是抛出鱼竿这样看上去在一瞬间完成的操作,其实还是需要我们按住鼠标不放一段时间的。如果鼠标按下和弹起的间隔过短,这样的点击会被游戏直接抛弃。

如果我问ai,为什么我的世界不认我的esp32的鼠标点击,我想它大概率会说“物理鼠标和esp32发送的HID数据包不一样”“我的世界会认制造商”,进而让我去走USB HID、改制造商等等毫不相干的操作。
找到原因后,事情一下就简单了。我让写了一段代码,可以自己控制按下和弹起的间隔等参数,还封装了接口,方便后续python程序调用。一两分钟后,连点器在游戏内成功运行了!

尾声
也许后续我会开发一个python前端来调用连点器,但这可能需要我学习qt。其实最大的限制因素是时间。最近感觉有一堆DDL在追着我杀,如果有空学学qt搞一个前端出来吧!(不过感觉最近有点不太可能了呜呜呜呜)
以及,掌握了这个原理,其实我的世界连点器没必要用ESP32?🤔让AI写一个在按下和暂停中间有时间间隔的连点器岂不美哉?不过ESP32已经买了,醋都准备好的,包盘饺子不也是一件没事吗?
总之,ai好用,也不好用。很多人说“ai一点也不好用,它说的根本不是我想要的”。我想反问:“你说想要ai更聪明,但你自己有没有先成为一个聪明的提问者呢?你自己有没有成为一个善于捕捉细节的思考者呢?究竟是你把ai当做你的工具,还是ai把你当做它执行代码、复制粘贴调试信息与灌输它的思想的工具呢?”
Comments NOTHING