通过串行连接访问 3D 打印机的温度传感器数据

3D打印 挤出机 加热床 喷嘴
2021-05-20 14:47:35

我想通过串行连接访问 3D 打印机的床和喷嘴温度传感器数据。有人可以指导我朝着正确的方向前进吗?

谢谢!

编辑:来自打印机的响应:

Connecting to printer...
Connection response from printer:
6R7�P)��h>L�JO� � ��V�\��`�r��T �� SK�<ʪ� �>�Vw^$���|���R n�I, o�!����H>�
                                                                          mx�}M#
                                                                                 �LYԣPh���^@ ��rp � TP�j�~1�� V6     6 � f� 6�k#���&�H".��k K2���ek�(��&��^K�k2����Ul�(� ���~N�ʈ*.�>Z��k#d$�����(� ��
��(� ��� v��
���
Asking for temperatures (M105)...
Temperature response from printer:
^CTraceback (most recent call last):
  File "printer_files/serialaccess.py", line 15, in <module>
    response = ser_printer.readline()
  File "/usr/lib/python2.7/dist-packages/serial/serialposix.py", line 446, in read
    ready,_,_ = select.select([self.fd],[],[], self._timeout)
KeyboardInterrupt

代码向打印机询问温度值后,终端上不再有输出。我等了一会儿,然后用 control+c 杀死了它。很明显打印机正在响应连接响应,但我不确定它为什么不返回温度值。再次,非常感谢您的帮助,Demetris!

1个回答

假设您的打印机接受传统的 G 代码类型,可以M105通过串行端口发送来检索挤出机和床温打印机将响应ok T:XXX.X B:XXX.X哪里T是喷嘴温度哪里B床温。

您可以在RepRap wiki 中阅读有关特定 G 代码的更多信息

编辑:我正在编辑答案以包含使用简单的 python 脚本连接到打印机的信息。

以下脚本首先打开与打印机的串行连接。对于 Marlin 固件,当您第一次连接打印机时,需要一些时间来初始化和响应。这就是为什么在读取响应之前需要一些延迟。打印响应后,脚本发送M105命令,等待100ms,然后读取串行缓冲区的响应并将其打印在屏幕上。

注意/dev/ttyUSB0是串行端口名称,在您的情况下它可能会有所不同。也是250000连接的波特率;250000是我打印机的默认值,因此您需要将其替换为打印机使用的波特率。

import serial
import time

ser_printer = serial.Serial('/dev/ttyUSB0', 250000)
print "Connecting to printer..."
time.sleep(30)  # Allow time for response
buffer_bytes = ser_printer.inWaiting()
response = ser_printer.read(buffer_bytes)  # Read data in the buffer
print "Connection response from printer:"
print response
print "Asking for temperatures (M105)..."
ser_printer.write('M105\n')
time.sleep(0.1)  # Allow time for response
print "Temperature response from printer:"
response = ser_printer.readline()
print response