Доступ к данным датчика температуры 3D-принтера через последовательное подключение

Я хочу получить доступ к данным датчика температуры рабочего стола и сопла 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. Ясно, что принтер реагирует на ответ на подключение, но я не уверен, почему он не возвращает значения температуры. Еще раз большое спасибо за вашу помощь, Деметрис!

, 👍6

Обсуждение

Это отклонение в сторону от темы. Речь идет уже не об инструментах и приложениях 3D-принтеров, а о программировании и разработке приложений для одного., @Tom van der Zanden


1 ответ


Лучший ответ:

3

Предполагая, что ваш принтер принимает обычный вкус G-кода, температуру экструдера и рабочего стола можно получить, отправив M105 через последовательный порт. Принтер ответит ОК T:XXX.X B:XXX.X где T-температура сопла, а B - температура рабочего стола.

Вы можете прочитать больше о конкретном G-коде в вики RepRap.

Редактировать: Я редактирую ответ, чтобы включить информацию для подключения к принтеру с помощью простого скрипта python.

Следующий сценарий сначала открывает последовательное подключение к принтеру. Для прошивки Marlin при первом подключении к принтеру требуется некоторое время для инициализации и ответа. Вот почему необходима некоторая задержка перед чтением ответа. После печати ответа скрипт отправляет команду M105, ожидает 100 мс, затем считывает ответ последовательного буфера и выводит его на экран.

Примечание. /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

,

Спасибо вам за ваш быстрый ответ! Я читал о командах прошивки на вики-странице RepRap. Я не совсем уверен, как взаимодействовать с принтером, чтобы отправлять эти команды. Я новичок в этой области. Я действительно ценю вашу помощь., @KDK

Я отредактировал ответ, чтобы включить некоторые основные сведения для подключения к принтеру., @Demetris

Спасибо тебе, Деметрис! Я работал с фрагментом кода, который вы предоставили. Я редактирую вопрос с ответом, который я получаю., @KDK

Я хочу получить доступ к температуре рабочего стола 3D-принтера. Я могу получить температуру с помощью последовательного подключения. Проблема, с которой я сейчас сталкиваюсь, заключается в том, что, как только я даю команду, я получаю значения температуры, однако задание на печать останавливается. Есть ли способ обойти это? Я хочу получать значения температуры по мере выполнения задания на печать., @KDK

Похоже, это совсем другая проблема. Пожалуйста, создайте новый вопрос, подробно описывающий вашу проблему. Это поможет вам ответить на ваш вопрос гораздо эффективнее., @Demetris