注释
听起来 ESP32 没有使用我们的固件。我建议制作一个新的控制器。那会更容易,让您完全控制和未来升级。 |
我的第一个猜测是数据可能是二进制数据的 base64 编码的变体。除了使用 : 而不是 + 之外,字符集看起来像 base64。但即使您确实反转了该编码,您仍然必须发现数据的含义。我怀疑这些消息可能是某种挑战/响应身份验证方案,用于防止未经授权使用激光。如果有人控制了 20W 无线激光器并开火,那将是非常危险的。 |
谢谢两位 是的,我假设他们没有使用您的固件。由于板上有 ESP32 和 Atmega328,我假设 Atmega328 上有一个标准的 GRBL 固件,ESP 只是充当 Wi-Fi 的接口,也可能用于通过 USB 进行串行通信。 所以我认为模式是 PC <==> USB/WIFI <==> ESP32 <==> Atmega328 他们在 ESP32 中实现了一个固件,部分显示为“透明”(例如 GCODE 流被正常发送,以及一些即时命令和实时状态消息)并部分改变了一些东西;吃掉“ok”消息,以不同形式的消息更改错误消息,添加一个
乍一看,我也有这种印象,但尝试用 base64 解码会导致不可读的结果。 这些消息在某些特定场合交换:
它可能看起来像,但事实并非如此。即使不发送加密命令,您仍然可以发送 GCode 命令并激活激光。 相反,这些消息似乎激活了“模式”。例如,您作为“页眉”交换的内容激活了一种“在程序中”模式,电路板发出“哔”声并开始发送 |
PS:即使我知道它与您的 fw 无关,我还是选择写在这里,因为也许你们中间有一些 ESP32 的小专家,可以识别出与已经看到的东西有一些相似之处。我希望它不会打扰! |
他们正在做的事情不太可能与 ESP32 处理器的任何特定内容有关。这显然是某种协议喋喋不休。我所知道的唯一特定于 ESP 的协议是 ESP-Now,它适用于完全不同的用例——比如智能灯。 一种可能是他们发明了自己的 base64 变体,并使用它直接传输数据结构值。 由于透明发送似乎有效,可以忽略那个额外的协议吗? 如果不是,对于特定用例,消息是否始终相同,或者即使您在做完全相同的事情,它们也会因运行而异?如果它们相同,那么也许您可以尝试不同的用例并创建一个映射,其中包含哪些消息值激活哪些模式。您可能已经想到了这一点;我只是为了完整性而提到它。 |
您能否窥探 ESP32 和 AVR 之间的串行线路,看看是否有额外的 GCode 或 GRBL 消息是由有趣的协议消息产生的? |
从执行命令的意义上讲,它是有效的,但是由于缺少“ok”的响应,很难(如果不是不可能的话)将 gcode 流式传输到板子而不会溢出缓冲区,因为您不知道 grbl 何时收到和管理他们这样你就可以发送更多。 从开发板获得命令/流式反馈(并因此能够实施字符计数协议)的 理解这些 VSta、SBuf、LTC 的含义也会很有趣。
我做了一些分析,这是我所看到的:
所有这些让我认为消息是加密的,并且添加了 foo/ignored character/number 来随机化加密结果。 幸运的是,似乎在不知道消息的含义的情况下发送已知消息会欺骗接收者。
没那么容易,因为我应该放一些电线,也许还要在 PCB 上切一些路径。 |
我从http://www.vigotec.cn/下载了VG-L7 和VG-L7x 的软件。在 VG-L7 zip 文件中,我找到了这样的自述文件
这让我觉得 ESP32 可能被编程为 USB 和 AVR 之间的透明网关,在 AVR 芯片中有特殊的固件。ESP32 可能还有一种 WiFi 模式,可以将 WiFi 网关连接到 AVR。 如果这个想法是正确的,那么就可以使用 XLoader 用标准 GRBL 对 AVR 重新编程,问题就解决了。 Vigo 应用程序有一个屏幕,可以将设备恢复为出厂默认设置,这可能会让您在必要时将特殊固件放回 AVR。 根据我对产品开发团队工作方式的了解,我认为我的猜测很可能是正确的。更简单的 VG-L7 版本可能是第一个产品。他们开发了特殊的 AVR 固件来支持他们的应用需求。后来,当他们想要添加新的支持 WiFi 的版本时,他们保持 AVR 代码与以前相同,并且只添加支持新功能所需的最少 ESP 功能。他们首先将 ESP32 编程为透明网关,因此所有现有的应用程序代码和 AVR 固件都无需更改即可运行,然后他们加入了额外的 WiFi 网关功能。 注意:根据我刚刚发现的信息,以下想法可能已过时。 另一种可能性是将 ESP32 重新编程为真正透明的网关。您可以分阶段进行,如下所示
如果 esptool 不起作用,可能是制造商试图让通过 USB 端口重新编程变得困难。我怀疑这是因为他们使用了 CH330N USB 串行芯片而不是更常见的 CH340 或 CP2102。CH330N 的引脚太少,无法支持大多数 ESP32 模块用于将 ESP32 切换到编程模式的额外 RTS 和 DTR 引脚。CH330N 有 RTS 但没有 DTR。他们可能有一个聪明的方法来让它工作,但你必须尝试 esptool 才能看到。 或者,可以使用 ESP32 OTA 更改 ESP32 固件。 |
关于窥探,没有必要切割痕迹,因为您会在线路上添加额外的接收器,并且可以安全地完成。电线可以焊接到 ESP32 模块上的引脚。这些引脚很大且易于访问。 |
我无法与之通信的雕刻机型号是L7x,它是带WiFi的型号,使用VigoWork软件。VigoWork for L7x 的下载包中没有提供 Atmega 和 ESP32 固件。 L7 模型有一个标准的 Atmega328 控制器,并使用不同的软件(尽管 UI 相似)称为VigoEngraver。下载中的固件是一个非常标准的 grbl,尽管自述文件中有说明。加载到 Arduino 上进行通信,没有任何加密包或与 GRBL 的显着差异。 拥有一个透明的 ESP32 是最简单的事情,除此之外,我还发布了一个用作 telnet 网桥的 ESP8266 草图,只需进行一些修改就可以适用于 ESP32。虽然是最简单的选择,但这似乎并不是VG-L7x的开发者所走的路 是的,重新编程芯片可以是一个解决方案,但我的目标不是让电路板与 LaserGRBL 兼容,而是相反(使 LaserGRBL 与该电路板兼容)。这允许该模型的所有所有者使用 LaserGRBL,而不仅仅是能够重新编程 fw 的“极客”。 幸运的是,我现在有不错的成绩。我可以发送“嗅探”的加密消息,并且董事会会按预期做出响应。我相信我可以对 LaserGRBL 进行必要的更改,使其与雕刻机兼容。 此外,我手头的板子不是我的。它是由购买此雕刻机的 LaserGRBL 用户发给我的。
我有电子技能,所以我可以使用欧姆表、焊机和 co。 关于第 2 点。我从未直接转储/编程 ESP32 芯片(仅使用集成 USB 的 devkit)。 所以你把 IO0 接地并重置 ESP32 应该足以通过 USB 板端口读取 esp 内容吗? 明天我会做一些测试,我希望能够克隆固件(如果没有读保护)。 |
是的,引导加载引脚是 GPIO0 / 引脚 23。https ://github.com/espressif/esptool/wiki/ESP32-Boot-Mode-Selection。 CH330N 到 u0TxD 和 U0RxD 的连接完全符合预期,并且与串行引导加载程序兼容,因此在复位后将 GPIO0 保持为低电平应该可以让您连接到 esptool。 我想他们有问题 – 就像其他发件人一样 – 在大量激光作业的重负载下使用标准 GRBL ok 响应协议,有很多短移动和 S 字更改。如果他们通过延迟不一致的 WiFi 导出标准 GRBL 线路协议,此类问题可能会特别麻烦。他们可能正在使用 ESP32 进行额外缓冲。SBuf 报告比 ok 计数更明确,尤其是当您考虑错误情况时。我想知道第三个数字是否与 ESP32 中的额外缓冲有关?如果我要为 AVR GRBL 设计 ESP32 前端,我可能会在 ESP32 内部提供更多的线路缓冲。窥探 AVR 线路并将 ok 流与 SBuf 流进行比较可以为您提供线索。lines-sent/lines-received 的一个问题是它不会直接向您提供有关队列中可用空间/行数的信息。也许队列长度是隐式已知的,并将其与两个 SBuf 数字之间的差异进行比较。更好的协议设计是直接报告可用空间,就像 TCP 对“窗口大小”所做的那样。无论如何,您或许可以弄清楚他们对窥探做了什么。 关于 VG-L7x .zip 下载中缺少固件映像:我怀疑他们将固件映像隐藏在应用程序中。对于新用户来说,这更不容易出错,也更简单,并且需要更少的关于如何查找和选择写入固件文件的文档。 Bart 的 ESP32_Grbl 板之一可以为该设备制作比所示板更好的控制器,因此,为了感谢您在这里获得的支持,您可以考虑将该建议转达给您的 Vigotech“客户”。 |
谢谢米奇 第一个测试是让 ESP 与带有来自 gnea/grbl 的标准 grbl 固件的 arduino nano 通信。 这证实了 arduino 固件是标准的,并且协议更改(加密消息、no ok 等)仅由 esp32 fw 完成。 但是我认为我不会进一步尝试解码编码消息,因为我认为这必然需要对 sw/fw 进行逆向工程才能理解加密方案。一旦我验证了“间谍”消息在每种情况下都被机器正确接受,我想我会感到满意并且我拥有制作 LaserGRBL 伪造 VigoWork 协议所需的所有信息:-) 再次感谢您的所有建议,我可以关闭线程 |
大家好,我是LaserGRBL的开发者。
我试图让我的程序能够与激光雕刻机 (Vigo VG-L7x) 通信,制造商没有发布规格,也没有联系甚至电子邮件,对标准“grbl”进行了一些更改通过插入一些在我看来它们看起来是“编码”甚至“加密”的消息来实现协议。
这导致这台机器只能与他们的软件(这是一块垃圾)交谈,所以人们开始要求我在 LaserGRBL 中支持它(如果可能的话)。
看起来当雕刻师与他们的标准程序对话时,除了交换人类可读的 G 代码命令流之外,它还交换一些无法理解的消息,因为它们是编码的。
控制板有一个 ESP32 芯片和一个 Atmega32。我认为通信由与 Atmega32(它们具有标准 grbl 固件)通信的 ESP32 处理。
这里有一些这个编码通信的例子(见图片或 pastebin)
https://pastebin.com/v3q14rdE
这些消息会根据特定操作定期发送:连接时、开始发送作业文件之前、作业流结束时等,并在 ESP32 上激活某些使其能够工作的东西。
例如,开发板不会在接收到的每个命令时发送“ok”,而是使用一种状态报告的形式
<VSta:2|SBuf:5,1,0|LTC:4095>
通过 Sbuf 数字告诉接收、处理了多少行等。问题是该报告是仅当您发送一个特殊的加密命令时才会激活,该命令说“我正在开始流式传输作业”(并且当收到此命令时,电路板会发出哔哔声)。在多个工作会话之间,消息内容总是不同,但长度相同。
https://pastebin.com/AXz6k3tQ
如果我发送以前的会话消息,雕刻师可以毫无问题地识别它。
了解它是简单编码(因此可逆)还是加密真的可以帮助我避免浪费时间。
任何的想法?
谢谢大家!