开源改变世界!!

Wi-Fi 连接问题 #515

推推 grbl 2年前 (2023-01-27) 99次浏览
关闭
fabbbio986 开启了这个issue 2018 年 11 月 29 日 · 31条评论
关闭

Wi-Fi 连接问题#515

fabbbio986 开启了这个issue 2018 年 11 月 29 日 · 31条评论

注释

Wi-Fi 连接问题 #515

大家好!
首先感谢 arkypita 分享你的作品!
我通过 USB 连接将 laserGRBL 与我的 3D 打印激光雕刻机一起使用,但现在我正尝试通过 ESP8266 使用它。

目前,我正在尝试使用连接到上面有 CNCshield 的 arduino UNO 的 NodeMCU 板(ESP8266 12-e)。

我必须首先强调我在草图 websocketserver.ino上传过程中遇到的一个问题:当 arduino IDE 编译草图时,它在第 145 行给我一个错误。我发现上传草图的唯一方法是更改从“const char”“const unsigned char”
那是正常的吗?
有没有其他人遇到过同样的问题?

这是给出的错误消息:

Arduino:1.8.5 (Windows 10), Scheda:”NodeMCU 1.0 (ESP-12E Module), 80 MHz, Flash, 4M (1M SPIFFS), v2 Lower Memory, Disabled, None, Only Sketch, 115200″

C:\Users\Fabio\Desktop\laser\wifi\websocketserver\websocketserver.ino: 在函数 ‘void webSocketEvent(uint8_t, WStype_t, uint8_t*, size_t)’ 中:

websocketserver:145: 错误:从“const char*”到“const uint8_t* {aka const unsigned char*}”的无效转换 [-fpermissive]

           Serial.write((const char *) (payload), (lenght));

                                                          ^

在 C:\Users\Fabio\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.2\cores\esp8266/Arduino.h:261:0 包含的文件中,

             from C:\Users\Fabio\Desktop\laser\wifi\websocketserver\websocketserver.ino:3:

C:\Users\Fabio\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.4.2\cores\esp8266/HardwareSerial.h:156:12: 错误:正在初始化 ‘virtual size_t HardwareSerial::write 的参数 1 (const uint8_t*, size_t)’ [-fpermissive]

 size_t write(const uint8_t *buffer, size_t size)

        ^

退出状态 1
从“const char*”到“const uint8_t* {aka const unsigned char*}”的无效转换 [-fpermissive]

Questo report potrebbe essere più ricco di informazioni abilitando l’opzione
“Mostra un output dettagliato durante la compilazione”
in “File -> Impostazioni”

正如我之前所说,通过这个小修改,我已经上传了草图,并且我使用 Web 界面成功地将 nodeMCU 板连接到我的 wifi 网络。
之后,我通过路由器设置为 nodeMCU (192.168.1.7) 分配了一个静态地址。
打开 laserGRBL 后,我切换到 LaserWeb8266 模式并在Socket URL字段中输入地址:ws://192.168.1.7:81并单击连接按钮。

此时程序给我消息(在左侧窗口)Connected但右下角的状态是Connecting大约10秒后状态变为Disconnected

在这 10 秒内,我无法发送任何“gcode 命令”,但如果我发送“WIFIRESET”命令,它就会起作用。

laserGRBL 在连接过程中是否需要确认消息(来自 esp8266 + arduino)以建立连接?
这可能是由于 nodeMCU 和 arduino 之间的连接不良造成的吗?
即使没有连接到 RX 和 TX 引脚,LaserGRBL 是否应该连接到 nodeMCU?

谢谢您的帮助!

Wi-Fi 连接问题 #515
所有者
阿尔基皮塔 评论了 2018 年 11 月 29 日  

我通过 USB 连接将 laserGRBL 与我的 3D 打印激光雕刻机一起使用,但现在我正尝试通过 ESP8266 使用它。
目前,我正在尝试使用连接到上面有 CNCshield 的 arduino UNO 的 NodeMCU 板(ESP8266 12-e)。

我必须首先强调我在草图websocketserver.ino上传过程中遇到的一个问题:当 arduino IDE 编译草图时,它在第 145 行给我一个错误。我发现上传草图的唯一方法是更改从“const char”“const unsigned char”
那是正常的吗?
有没有其他人遇到过同样的问题?

使用WiFi的LaserGRBL用户不多,不知谁来解答。
自从我上次编写指南并编译了 lib 以来已经过去了很多时间,也许 WifiManager 或 arduinoWebSockets 最新版本有一些变化。

正如我之前所说,通过这个小修改,我已经上传了草图,并且我使用 Web 界面成功地将 nodeMCU 板连接到我的 wifi 网络。
之后,我通过路由器设置为 nodeMCU (192.168.1.7) 分配了一个静态地址。
打开 laserGRBL 后,我切换到 LaserWeb8266 模式并在Socket URL字段中输入地址:ws://192.168.1.7:81并单击连接按钮。

此时程序给我消息(在左侧窗口)Connected但右下角的状态是Connecting大约10秒后状态变为Disconnected

当连接打开时,LaserGRBL 进入连接状态并启动计时器。

SetStatus(MacStatus.Connecting);
connectStart = Tools.HiResTimer.TotalMilliseconds;

现在,如果 LaserGRBL 从 grbl 收到任何报告机器状态的状态报告(空闲、运行、暂停、门…),右下角状态栏中显示的状态反映收到的状态,但如果它没有收到从在不到 10 秒的时间内连接到其他东西,超时到期并且连接将关闭。

if (MachineStatus == MacStatus.Connecting && Tools.HiResTimer.TotalMilliseconds - connectStart > 10000)
	OnConnectTimeout();

恕我直言,您的系统未正确桥接从 arduino 到 pc 的串行连接

Wi-Fi 连接问题 #515
所有者
阿尔基皮塔 评论了 2018 年 11 月 29 日  

laserGRBL 在连接过程中是否需要确认消息(来自 esp8266 + arduino)以建立连接?

是的,需要沟通

这可能是由于 nodeMCU 和 arduino 之间的连接不良造成的吗?

是的

即使没有连接到 RX 和 TX 引脚,LaserGRBL 是否应该连接到 nodeMCU?

否,连接然后由于超时而断开连接。

看到你的?- 会话日志

Wi-Fi 连接问题 #515
作者

我已经按照建议检查了会话日志,每次出现连接超时错误。
我做了一些其他的试验和错误但没有结果,所以当我按下 laserGRBL 上的连接按钮时,我试图通过 arduino IDE 串行监视器读取 nodeMCU 和 Arduino UNO。
这是我为 nodeMCU 的串行监视器得到的:
Wi-Fi 连接问题 #515

这是 Arduino UNO 串行监视器的消息:
Wi-Fi 连接问题 #515

我不知道这是否有帮助,但似乎这些设备可以相互通信。
你有任何其他建议我可以尝试吗?
非常感谢你的帮助!

祝你有美好的一天!

Wi-Fi 连接问题 #515
所有者

Ciao Fabio
你能从命令提示符或快捷方式运行 LaserGRBL 吗?如果您使用“comlog”参数“C:\Program Files (x86)\LaserGRBL\LaserGRBL.exe comlog”启动 LaserGRBL,程序将记录一个名为“comlog.txt”的文件,位于“C:\Users\YourName\AppData\漫游 \LaserGRBL”。

在 comlog 文件中,您可以找到从 LaserGRBL 发送/接收的所有串行数据。
有效的 comlog 如下所示:comlog.txt

Wi-Fi 连接问题 #515

Ciao Fabio
我刚刚尝试使用 nodemcu lolin 芯片但没有成功,问题出在串行电路上。
用于第 145 行错误的解决方案是:// Serial.write((const char *) (payload), (lenght)); 在 serial.write
((const PROGMEM uint8_t *) (payload), (lenght)) 编译过程中出错
wifi 连接与 esp8266-01、esp8266-pro 或最好的是 esp8266 WEMOS D1 Mini,现在我使用这个模块与 wifi lcd 和 sd 卡独立工作你可以在这个链接上看到我的视频https://www.youtube .com/watch?v=fBsigGqBQKA&t=22s
再见

Wi-Fi 连接问题 #515
作者

Ciao Fabio
你能从命令提示符或快捷方式运行 LaserGRBL 吗?如果您使用“comlog”参数“C:\Program Files (x86)\LaserGRBL\LaserGRBL.exe comlog”启动 LaserGRBL,程序将记录一个名为“comlog.txt”的文件,位于“C:\Users\YourName\AppData\漫游 \LaserGRBL”。

在 comlog 文件中,您可以找到从 LaserGRBL 发送/接收的所有串行数据。
有效的 comlog 如下所示:comlog.txt

再见 arkypita,
我曾尝试在命令提示符下运行 LaserGRBL,但仅当我使用 USB 电缆将 arduino 连接到我的 PC 时,我才会获得 comlog.txt 文件。
如果我尝试通过 WIFI 连接到 ESP8266 + arduino 运行 LaserGRBL,我的文件夹中没有任何文件。
在这些试验中,我注意到两件事:

  • 单击 LaserGRBL 上的“连接按钮”后,Rx 和 Tx Arduino LED 闪烁(这意味着从 ESP8266 传输/接收了某些内容);
  • 如果我通过 USB 将 PC 连接到 arduino,并将 ESP8266 连接到 arduino 的 TX/RX 和接地引脚,我注意到 USB 连接不起作用。

我仔细检查了设备之间的电气连接,但看不到任何错误。

Ciao Fabio
我刚刚尝试使用 nodemcu lolin 芯片但没有成功,问题出在串行电路上。
用于第 145 行错误的解决方案是:// Serial.write((const char *) (payload), (lenght)); 在 serial.write
((const PROGMEM uint8_t *) (payload), (lenght)) 编译过程中出错
wifi 连接与 esp8266-01、esp8266-pro 或最好的是 esp8266 WEMOS D1 Mini,现在我使用这个模块与 wifi lcd 和 sd 卡独立工作你可以在这个链接上看到我的视频https://www.youtube .com/watch?v=fBsigGqBQKA&t=22s
再见

Ciao Pinuxx
感谢您分享您的经验!
首先,我更换了线条并上传了草图,但结果是一样的。
在我尝试将代码上传到 D1 Mini 后,我得到的结果与我在 nodeMCU 上得到的结果相同。
你在 RX/TX 引脚之间使用任何电平转换器还是在 Arduino TX 引脚之间使用简单的分压器 —-> D1 Mini RX 引脚?

Wi-Fi 连接问题 #515
所有者

对不起,你是对的。我已经为串行调试实现了 comlog.txt。

您可以下载 v3.0.5 https://github.com/arkypita/LaserGRBL/releases/download/v3.0.5/install.exe,我在其中为 telnet 和 websocket 添加了完整的 tx-rx 日志记录。可以使用 comlog 开关激活(如前所述)。

我建议使用 telnet 版本而不是 websocket。
更“低级”并且易于调试诊断。

我实际上正在使用集成了 ESP8266 的 arduino 开发板,它运行良好。以前我用的是备用的 ESP8266,它也能用。我认为这是你的硬件问题。

你在 RX/TX 引脚之间使用任何电平转换器还是在 Arduino 之间使用简单的分压器

原理图中的分压器应该可以工作:https ://github.com/arkypita/ESP8266-SerialTelnet

我建议在 ESP8266 电源线附近放一个大电解电容。当 esp 开始传输时,它会消耗大量电流,并且如果电压下降可以自行复位。https://internetofhomethings.com/homethings/?p=396

Wi-Fi 连接问题 #515
所有者

如果我通过 USB 将 PC 连接到 arduino,并将 ESP8266 连接到 arduino 的 TX/RX 和接地引脚,我注意到 USB 连接不起作用。

WiFi 和 USB 不能一起工作。

Wi-Fi 连接问题 #515

@fabbbio986
再见 Fabio,
在所附的图片上有我的最终电路,我正在使用电平转换器将 tx 和 rx 线连接到 nano,将 scl 和 sda I2c 线连接到 LCD2004。
分压器电路适用于 esp-01,我没有尝试过 wemos 和 esp8266-pro 解决方案。
注意电源线在模块馈线附近使用多个 100nf 的电容。
并使用良好的电源。
Wi-Fi 连接问题 #515

Wi-Fi 连接问题 #515
作者
fabbbio986 评论了 2018 年 12 月 7 日  

再见 Arkypita,
我找到了一个 esp01 模块,我决定值得一试。
如果我对这个模块使用相同的代码并且连接正常!我可以毫无问题地使用点动命令。
我无法解释为什么其他 esp 设备会出现所有这些问题。

不幸的是我现在有另一个问题。我试图将图像从 LaserGRBL 发送到 CNC,但出现了很多这样的错误:
Wi-Fi 连接问题 #515
Wi-Fi 连接问题 #515
Wi-Fi 连接问题 #515

如果我观察运动的行为还有一些其他问题:

  • 在几行之后,程序失去了位置,激光(和显示屏上的光标)无限期地移动到 X+(我不得不停止程序,因为激光开始击中右止动器);
  • 在雕刻过程中,有时程序会卡在一个点上;
  • 在雕刻过程中,有时光标会随机地从一个点移动到另一个点;
  • 有时程序会停止,就像我按下保持按钮一样。

我已将流模式从缓冲更改为同步,将线程模式从超快更改为快速,错误消失了,但其他问题仍然存在。

编辑:这里有我的会话的socketlog.txt,我有这些错误。

Wi-Fi 连接问题 #515
作者

@fabbbio986
再见 Fabio,
在所附的图片上有我的最终电路,我正在使用电平转换器将 tx 和 rx 线连接到 nano,将 scl 和 sda I2c 线连接到 LCD2004。
分压器电路适用于 esp-01,我没有尝试过 wemos 和 esp8266-pro 解决方案。
注意电源线在模块馈线附近使用多个 100nf 的电容。
并使用良好的电源。
Wi-Fi 连接问题 #515

Ciao Pinuxx,
感谢您提供电路照片。
我开始认为当使用以下类型的 ESP8266(12-e 如果我记得很好)时会出现问题: 我有 NodeMCU 和 D1 mini(不是原来的)上面有这种 ESP8266 但什么都没有作品。 将代码上传到 ESP-01 模块(如 arkypita 编写的教程中使用的模块)后,连接正常。 不幸的是现在我还有其他问题(写在上一篇文章中)。
Wi-Fi 连接问题 #515

Wi-Fi 连接问题 #515

嗨,法比奥。
电路的不稳定性是一个信号,表明您的电源可能有问题,请使用至少 2A 的良好电源,并将电平 (10-100mF) 和滤波电容器 (100nF) 放在靠近引脚 Vcc 和 Gnd 的位置。

Wi-Fi 连接问题 #515

从上一个继续..
电线长度很短。

Wi-Fi 连接问题 #515
所有者

不幸的是我现在有另一个问题。我试图将图像从 LaserGRBL 发送到 CNC,但出现了很多这样的错误:

图像中显示的错误清楚地表明,有时 LaserGRBL 发送了一个有效命令,但 grbl 收到了损坏的命令。通常这是由于串行端的电气干扰造成的。

Wi-Fi 连接问题 #515
作者

再见 arkypita e pinuxx!
更换电源后一切正常!谢谢你。
与此同时,我按照建议订购了带有集成 ESP8266 的 arduino UNO 克隆版,该板也可以使用!
在这一点上,我认为我遇到的问题与基于 esp8266 12-e 版本有关。
现在我有一个 D1 mini,我可以用它来创建一个向 GRBL 发送命令的无线吊坠。你觉得可能吗?
我在 D1 mini 上上传了一个 websocketclient 示例,在设置 wifi 数据和服务器 IP 后,我收到了来自 GRBL 单元的所有状态消息(我可以在串行监视器上看到它)。现在我找不到从 D1 mini 向 GRBL 单元发送命令的方法。你可以帮帮我吗?

Wi-Fi 连接问题 #515
所有者

应该很简单,只需发送一个带有 gcode 的字符串,然后是 \n

webSocketClient.sendData(“G0 X10 Y10\n”);

Wi-Fi 连接问题 #515
所有者
阿尔基皮塔 评论了 2018 年 12 月 17 日  

然后在发送下一个命令之前等待“ok”或“error”响应

https://github.com/gnea/grbl/wiki/Grbl-v1.1-Interface

Wi-Fi 连接问题 #515
作者

应该很简单,只需发送一个带有 gcode 的字符串,然后是 \n

webSocketClient.sendData(“G0 X10 Y10\n”);

谢谢!我错过了“\n”!

(我必须使用 webSocket.sendTXT(“G0 X10 Y10\n”); 命令而不是 webSocketClient.sendData(“G0 X10 Y10\n”); 否则 IDE 会给我一个错误)。

然后在发送下一个命令之前等待“ok”或“error”响应

https://github.com/gnea/grbl/wiki/Grbl-v1.1-Interface

我已经写了几行来读取来自服务器的传入文本,并按照此处的建议与字符串(“ok”)进行比较,但是在编译时它给我一个关于交叉初始化的错误。

WebSocketClient:45: 错误:跨越 ‘String payload_str’ 的初始化

      String payload_str = String((char*) payload);

.

这个想法是检查来自服务器的传入消息,如果消息“正常”,它使我能够从客户端发送另一个命令。

Wi-Fi 连接问题 #515
作者

好的,我在这里更新!
之前的错误只是一个编码错误,我已经解决了!

现在我对从 GRBL 单元收到的文本有点问题。

我试着解释一下我的设置:
目前我正在尝试连接 3 台设备:

  1. 带 GRBL 和内置 esp8266 模块的 Arduino UNO 激光设备;
  2. 运行 LaserGRBL 的电脑;
  3. Wemos D1 Mini 带有修改后的 websocketclient 草图示例。

在 Wemos D1 Mini 上,我修改了标头 WebSockets.h(请参阅 WEBSOCKETS_NETWORK_TYPE 定义),如下所示:Links2004/arduinoWebSockets#119
,以便为来自 Arduino UNO + esp8266 的消息提供一种中断功能。
我进行了此更改,因为我看到 LaserGRBL 不断询问 GRBL 的状态,因此我认为通过这种方式,wemos D1 mini 在他的循环中执行操作时不会丢失任何信息。

在 wemos D1 mini 上,我使用了一个 if 函数,当收到 TXT 时,比较 2 个字符串并检查 GRBL 消息:

`
case WStype_TEXT:
USE_SERIAL.printf(“[WSc] get text: %s\n”, payload);

  if (strcmp(ok, (const char *)payload) == 0){
                  buff = 0;
  }`

其中 ok 定义为:const char ok[] = “ok\r\n”
而“buff”是一个布尔值,它告诉我是否收到来自 GRBL 的“ok”消息,因此允许我发送另一个动作按钮。

如果我只连接 wemos 和 Arduino,一切正常,但当我尝试同时连接 LaserGRBL 时出现问题。
LaserGRBL 工作完美,但 wemos 上的按钮仅工作 2-3 次然后停止(要使其再次工作,我必须重置 wem​​os 或对 LaserGRBL 执行操作)。
这是由于 if 语句不再为真而引起的,并且由 2 个事实证实:

  • 在串行监视器上,有时“ok”消息与以下状态的字符串相同:

[WSc] 获取文本:<Run|MPos:63.000,63.000,0.000|FS:0,0|Ov:100,100,100>
ok

  • 如果我更改 if 语句并使用

`
if (strstr(((const char *)payload), “ok”) != 0) {

               buff = 0;
    }

`
一切正常(也连接了 LaserGRBL)。

你有什么解释吗?

谢谢!

Wi-Fi 连接问题 #515
所有者

const char ok[] = "ok\r\n"

也许const char ok[] = "ok\n"更正确?

Wi-Fi 连接问题 #515
所有者

但是我不确定是否理解了该项目的全部含义。你能给我解释一下吗(也用意大利语,可能会更容易)。

Wi-Fi 连接问题 #515
作者
fabbbio986 评论了 2018 年 12 月 22 日  

const char ok[] = "ok\r\n"

也许const char ok[] = "ok\n"更正确?

不,我试过使用“ok\n”,但 strcmp 函数给了我 3 作为输出值。
使用“ok\r\n”,strcmp 函数返回 0 并验证 if 语句。

但是我不确定是否理解了该项目的全部含义。你能给我解释一下吗(也用意大利语,可能会更容易)。

是的当然!
由于我周围有一个 wemos D1 mini,我正在尝试制作一个无线吊坠(Joystick to JOG + 一些其他功能按钮)。
在这个阶段我有:

  • 激光设备:带GRBL的Arduino UNO,内置esp8266模块;
  • LaserGRBL:PC;
  • 无线挂件:目前,Wemos D1 Mini 的 D3 引脚上有一个按钮,上面有一个修改过的 websocketclient 草图示例。通过按下按钮,我将发送“$J=G91X6Y0F6000 \n”。

我的想法是从无线吊坠发送 JOG 命令到激光器以自由移动激光头,所以我遵循这些说明:https ://github.com/gnea/grbl/wiki/Grbl-v1.1-慢跑
简而言之,我必须发送一个 $J=91XxYyFzzzz 命令,然后在发送新命令之前等待 GRBL 的“ok”响应。
在没有连接 LaserGRBL 的情况下,我可以毫无问题地使用 strcmp 命令检查消息并通过按下吊坠上的按钮来移动激光。
我遇到的问题是,当我连接 LaserGRBL 时,吊坠在 2-3 次移动后停止工作。

通过检查我在吊坠上收到的串行监视器并将其与 laserGRBL 生成的 comlog 文件进行比较,收到的所有数据都是相同的(所以我没有丢失任何消息),除了我按下吊坠时的一些消息按钮:
在串行监视器上,有时“ok”响应与状态字符串相同(LaserGRBL 不断请求),如下所示:

[WSc] 获取文本:确定
<Jog|MPos:605.350,526.500,0.000|FS:6000,0>

我使用 strstr 函数而不是 strcmp 绕过了这个问题,但我不明白为什么我在同一个字符串中有两条消息(我认为是同步问题)。

我借此机会问你另一个问题:释放挂件上的按钮后,我想发送一个 0x85 命令,这是一个点动取消实时命令,以获得低延迟的感觉。

0x85命令描述为:

0x85:点动取消
通过进给保持立即取消当前点动状态,并自动刷新缓冲区中所有剩余的点动命令。
如果不处于 JOG 状态,或者如果已调用并在处理中,则命令将被忽略。
如果在取消期间检测到安全门微开,Grbl 将返回 IDLE 状态或 DOOR 状态。

你知道我怎样才能通过 websocket 发送这种消息吗?

意大利语版本:

Sì,certamente!
Sicome ho una wemos D1 mini inutilizzata sto provando a realizzare un pendant wireless (Joystick per JOG + altri pulsanti)。
在 questa fase ho 中:

  • 激光 CNC:Arduino UNO con GRBL 1.1 e modulo esp8266 incorporato;
  • LaserGRBL:PC;
  • 吊坠无线:根据 il momento solo un pulsante sul pin D3 di una Wemos D1 Mini con un esempio di sketch websocketclient modificato。Premendo il pulsante invio “$J=G91X6Y0F6000 \n”。

L’idea è di inviare un comando JOG dal Pendant wireless al laser per spostarlo liberamente e quindi sto seguendo queste istruzioni: https://github.com/gnea/grbl/wiki/Grbl-v1.1-Jogging
In breve devo inviare un comando $ J = 91XxYyFzzzz e quindi attendere una risposta “ok” da GRBL prima di inviare un’altro comando.
Senza LaserGRBL collegato non ho problemi nell’usare la funzione strcmp per fare questa verifica e spostare il laser premendo il pulsante sul pendant.
Il problema che riscontro è che quando collego LaserGRBL, il pendant smette di funzionare dopo 2-3 movimenti.

Controllando sul monitor seriale ciò che ricevo sul pendant e confrontandolo con il file comlog generato da laserGRBL, tutti i dati ricevuti sono identici (quindi non ho messaggi persi); la differenza la ho su alcuni messaggi quando premo il pulsante sul pendant:
Sul monitor seriale a volte la risposta “ok” è nella stessa stringa dello stato (richiesta da LaserGRBL costantemente) come questa:

[WSc] ottiene il testo: ok
<Jog | MPos: 605.350,526.500,0.000 | V: 6000,0>

Ho aggirato questo problema usando la funzione strstr invece di strcmp ma non riesco a capire perché ho entrambi i messaggi nella stessa stringa (penso un problema di sincronizzazione).

喜欢 (0)