110 lines
2.6 KiB
Python
110 lines
2.6 KiB
Python
import serial
|
|
import time
|
|
import threading
|
|
import websocket
|
|
import time
|
|
import queue
|
|
|
|
#### Load gcode testfile
|
|
|
|
#f = open("circlesss.gcode", "r")
|
|
#gcode = f.readlines()
|
|
#print(gcode)
|
|
|
|
|
|
|
|
#### Serial treamer
|
|
|
|
def stream_gcode_serial(gcode):
|
|
# Open grbl serial port
|
|
s = serial.Serial('/dev/ttyACM0',115200)
|
|
|
|
|
|
# Wake up grbl
|
|
s.write("\r\n\r\n".encode('utf-8'))
|
|
time.sleep(2) # Wait for grbl to initialize
|
|
|
|
s.flushInput() # Flush startup text in serial inp
|
|
|
|
for line in gcode:
|
|
l = str(line.strip()) # Strip all EOL characters for consistency
|
|
|
|
|
|
print('sending '+ l)
|
|
s.write((l + '\n').encode('utf-8')) # Send g-code block to grbl
|
|
|
|
grbl_out = s.readline() # Wait for grbl response with carriage return
|
|
print( ' : ' + str(grbl_out.strip()))
|
|
|
|
|
|
# Close file and serial port
|
|
|
|
s.close()
|
|
|
|
print('job done')
|
|
|
|
|
|
|
|
|
|
#### Web Socket Streamer
|
|
|
|
# Global variables
|
|
ws = None
|
|
response_queue = queue.Queue() # Thread-safe queue for server responses
|
|
|
|
def receiver():
|
|
"""Receives messages from the WebSocket server."""
|
|
while True:
|
|
try:
|
|
# Receive a message from the WebSocket
|
|
for l in ws.recv().splitlines():
|
|
if isinstance(l, str):
|
|
response = l
|
|
else:
|
|
response = str(l, 'utf-8')
|
|
# print("Received:", response)
|
|
response_queue.put(response) # Add response to the queue
|
|
except Exception as e:
|
|
print("Error in receiver:", e)
|
|
break
|
|
|
|
def stream_gcode_websocket(gcode):
|
|
"""Streams G-code commands to the WebSocket server."""
|
|
global ws
|
|
ws = websocket.WebSocket()
|
|
ws.connect("ws://192.168.0.1:81") # Replace with your server's address
|
|
|
|
# Start the receiver thread
|
|
t = threading.Thread(target=receiver, daemon=True)
|
|
t.start()
|
|
|
|
# Wake up GRBL
|
|
ws.send("\r\n\r\n")
|
|
time.sleep(2) # Wait for GRBL to initialize
|
|
with response_queue.mutex:
|
|
response_queue.queue.clear()
|
|
|
|
for line in gcode:
|
|
l = str(line.strip()) # Strip all EOL characters for consistency
|
|
print('Sending:', l)
|
|
ws.send(l + '\n') # Send G-code block to the server
|
|
|
|
# Wait for server response
|
|
try:
|
|
grbl_out = response_queue.get(timeout=5) # Wait up to 5 seconds for a response
|
|
print('Response:', grbl_out.strip())
|
|
if(grbl_out.strip() != "ok"):
|
|
break
|
|
except queue.Empty:
|
|
print("Timeout waiting for server response.")
|
|
|
|
print('Job done')
|
|
ws.close()
|
|
|
|
# gcode = [
|
|
# "G0 X10 Y10",
|
|
# "G1 X20 Y20",
|
|
# "G1 X30 Y10"
|
|
# ]
|
|
|
|
# stream_gcode_websocket(gcode) |