如何通过USB发送一个Gcode指令?

7
我试图编写一个简单的 Python 脚本,向运行 Marlin 的 Wanhao D9 主板打印机发送 GCode 命令。我将脚本运行在连接到打印机的 Raspberry Pi 上,并通过 USB 连接。
import serial

ser = serial.Serial("/dev/ttyUSB0", 115200)
ser.write("G28\n")

我已经阅读了20多个论坛页面,发现有类似的问题,并尝试了他们提供的解决方案,例如将波特率更改为250000以及对写函数参数进行以下更改:

ser.write("G28\r\n")
ser.write(b'G28\r\n')
ser.write(b'G28\n')
ser.write(b'G28')
ser.write("G28")

我已经尝试了所有这些组合,并且还添加了:

time.sleep(5)

在我的文件顶部,我加入了与时间模块相关的import语句。我将这行代码添加在ser声明和ser.write函数调用之间。

我还尝试添加:

ser.close()

我尝试了一些组合方式,以便查看是否会有所不同,但似乎并没有帮助,因为我知道这是最佳实践。

无论我使用哪种代码组合,在运行Python脚本时,我的打印机似乎都会重新启动(屏幕从主页更改为开机菜单,然后再回到主页)。

我期待任何人能够对我的代码提供帮助,并指出我可能做错了什么。


1
你是否真正连接到设备?还是只是打开串行连接并开始向其写入数据?此外,您是否尝试通过串行读取机器的响应?也许它正在告诉您一些信息。 - lsabi
我问题中的前三行代码就是整个文件,所以据我所知,我正在打开串口连接并向其写入数据。然而,我尝试了这段代码,并连接到了Arduino Uno而不是打印机,我可以从Arduino串行监视器中读取代码。 我也尝试从ser中读取,但它没有接收到任何内容。 - C.Gibbons
我建议使用像Putty这样的程序(免费)来最初与设备通信。这可以消除确保Python程序设置正确的许多复杂性。一旦您可以在Putty中发送命令并获得预期的响应,那么我会在Python中编写可行的序列。 - Michael Molter
2个回答

4

在我的指令后添加额外的睡眠时间解决了我的问题。现在我也可以从打印机读取初始设置反馈。

没有额外睡眠时间的我的最终代码:

import serial
import time

ser = serial.Serial('/dev/ttyUSB0', 115200)

time.sleep(2)
ser.write("G28\r\n")
time.sleep(1)
ser.close()

感谢这篇文章中的用户指导我正确地方向 使用pySerial包的完整示例

这段代码对我很有用,我希望将来其他人也能从中受益。


0
我在我的Ender 3 Pro上遇到了类似的问题,并通过在串行连接的初始化中添加超时来解决它。
import serial

ser = serial.Serial('/dev/ttyUSB0', 115200, timeout=2)

g_code = 'G1 Z30.15\n'

ser.write(g_code.encode())
response = ser.readline()
print(response.decode())
ser.close()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接