Commit 5fc2fe09 authored by kliment's avatar kliment

Pronsole: Print all unknown responses

Updated readme
parent 961ad6b8
This is the beginning of a python-based host software for reprap printers. This is a python-based host software for reprap printers, in various forms.
Currently contains printcore.py, which requires pyserial to be installed. Printrun consists of printcore, pronsole and pronterface, and a small collection of helpful scripts.
Using printcore: printcore.py is a library that makes writing reprap hosts easy
pronsole.py is an interactive command-line host software with tabcompletion goodness
pronterface.py is a graphical host software with the same functionality as pronsole
USING PRONTERFACE
To use pronterface, you need:
python (ideally 2.6.x or 2.7.x),
pyserial (or python-serial on ubuntu/debian),
pyreadline (not needed on Linux) and
wxPython
Download and install the above, and start pronterface.py
Select the port name you are using from the first drop-down, select your baud rate, and hit connect.
Load an STL (see the note on skeinforge below) or GCODE file, and you can upload it to SD or print it directly.
The "monitor printer" function, when enabled, checks the printer state (temperatures, SD print progress) every 3 seconds.
The command box recognizes all pronsole commands, but has no tabcompletion.
If you want to load stl files, you need to put a version of skeinforge (doesn't matter which one) in a folder called "skeinforge".
The "skeinforge" folder must be in the same folder as pronterface.py
USING PRONSOLE
To use pronsole, you need:
python (ideally 2.6.x or 2.7.x),
pyserial (or python-serial on ubuntu/debian) and
pyreadline (not needed on Linux)
Start pronsole and you will be greeted with a command prompt. Type help to view the available commands.
All commands have internal help, which you can access by typing "help commandname", for example "help connect"
If you want to load stl files, you need to put a version of skeinforge (doesn't matter which one) in a folder called "skeinforge".
The "skeinforge" folder must be in the same folder as pronsole.py
USING PRINTCORE:
To use printcore you need python (ideally 2.6.x or 2.7.x) and pyserial (or python-serial on ubuntu/debian)
See pronsole for an example of a full-featured host, the bottom of printcore.py for a simple command-line
sender, or the following code example:
p=printcore('/dev/ttyUSB0',115200) p=printcore('/dev/ttyUSB0',115200)
p.startprint(data) # data is an array of gcode lines p.startprint(data) # data is an array of gcode lines
......
...@@ -42,6 +42,8 @@ class pronsole(cmd.Cmd): ...@@ -42,6 +42,8 @@ class pronsole(cmd.Cmd):
self.macros={} self.macros={}
self.processing_rc=False self.processing_rc=False
self.lastport = (None,None) self.lastport = (None,None)
self.monitoring=0
def scanserial(self): def scanserial(self):
"""scan for available ports. return a list of device names.""" """scan for available ports. return a list of device names."""
...@@ -393,7 +395,7 @@ class pronsole(cmd.Cmd): ...@@ -393,7 +395,7 @@ class pronsole(cmd.Cmd):
if not self.p.online: if not self.p.online:
print "Printer is not online. Try connect to it first." print "Printer is not online. Try connect to it first."
return return
self.listing=0 self.listing=2
self.sdfiles=[] self.sdfiles=[]
self.recvlisteners+=[self.listfiles] self.recvlisteners+=[self.listfiles]
self.p.send_now("M20") self.p.send_now("M20")
...@@ -440,7 +442,7 @@ class pronsole(cmd.Cmd): ...@@ -440,7 +442,7 @@ class pronsole(cmd.Cmd):
if not self.p.online: if not self.p.online:
print "Printer is not online. Try connect to it first." print "Printer is not online. Try connect to it first."
return return
self.listing=0 self.listing=2
self.sdfiles=[] self.sdfiles=[]
self.recvlisteners+=[self.listfiles] self.recvlisteners+=[self.listfiles]
self.p.send_now("M20") self.p.send_now("M20")
...@@ -460,7 +462,7 @@ class pronsole(cmd.Cmd): ...@@ -460,7 +462,7 @@ class pronsole(cmd.Cmd):
def complete_sdprint(self, text, line, begidx, endidx): def complete_sdprint(self, text, line, begidx, endidx):
if self.sdfiles==[] and self.p.online: if self.sdfiles==[] and self.p.online:
self.listing=0 self.listing=2
self.recvlisteners+=[self.listfiles] self.recvlisteners+=[self.listfiles]
self.p.send_now("M20") self.p.send_now("M20")
time.sleep(0.5) time.sleep(0.5)
...@@ -470,6 +472,11 @@ class pronsole(cmd.Cmd): ...@@ -470,6 +472,11 @@ class pronsole(cmd.Cmd):
def recvcb(self,l): def recvcb(self,l):
if "T:" in l: if "T:" in l:
self.tempreadings=l self.tempreadings=l
tstring=l.replace("\r","").replace("\n","")
if(tstring!="ok" and not tstring.startswith("ok T") and not tstring.startswith("T:") and not self.listing and not self.monitoring):
print tstring
sys.stdout.write(self.prompt)
sys.stdout.flush()
for i in self.recvlisteners: for i in self.recvlisteners:
i(l) i(l)
...@@ -712,6 +719,7 @@ class pronsole(cmd.Cmd): ...@@ -712,6 +719,7 @@ class pronsole(cmd.Cmd):
except: except:
print "Invalid period given." print "Invalid period given."
print "Updating values every %f seconds."%(interval,) print "Updating values every %f seconds."%(interval,)
self.monitoring=1
try: try:
while(1): while(1):
self.p.send_now("M105") self.p.send_now("M105")
...@@ -728,6 +736,7 @@ class pronsole(cmd.Cmd): ...@@ -728,6 +736,7 @@ class pronsole(cmd.Cmd):
except: except:
print "Done monitoring." print "Done monitoring."
pass pass
self.monitoring=0
def help_monitor(self): def help_monitor(self):
print "Monitor a machine's temperatures and an SD print's status." print "Monitor a machine's temperatures and an SD print's status."
......
...@@ -90,8 +90,6 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ...@@ -90,8 +90,6 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
self.stdout=sys.stdout self.stdout=sys.stdout
self.mini=False self.mini=False
#Commands to implement:
#settemp/bedtemp/extrude/reverse(control panel)
def do_extrude(self,l=""): def do_extrude(self,l=""):
try: try:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment