If you went through the set of pictures I posted along with my post about my Ultimaker, you might have noticed a bracket for a Raspberry Pi in there, including the Pi itself. I bought one of those tiny computers (together with a tiny USB WiFi dongle) around the same time I acquired the Ultimaker, specifically for the purpose of using it as a wireless printing host taking care of sending the print commands to the Ultimaker and also offering information regarding the current state (progress, temperature etc) of the printer and print job. Ideally I wanted to be able to upload GCODE files to the Raspi via a web interface, and also use that to start, pause, stop the printjob and have a general idea what the Ultimaker is currently doing (the plan being to set it up in another room so that it does not bother us in living room or office with noise or PLA fumes).
I tried some existing web interfaces for this (namely Printerface, the web interface of Printrun and 3DPrinterInterface), but they either did not offer the back channel I wanted or I didn't get them to properly work (I don't blame the software here, I didn't have much patience to be honest). Given that it's been some time since I had some private coding session, I took that as a reason to hack something together myself. Studying the code bases of some existing printing tools, I quickly learned that it takes a bit more than just sending some lines over a serial interface and read some stuff back and be done with the printer communication, but that in order to get some solid, error-resilient communication stack including the necessary state queries I needed for my back channel requirements, I'd have to invest quite some time to get what I want. So instead of reinventing the wheel here as well, I decided to just build my web interface on top of Cura, basically offering an alternative UI on top of the existing printing code. Given that Cura is written in Python and works under both Windows (my development environment) and Linux (the target environment) I figured that should give me a good starting base, and I was right.
This Cura fork on Github includes my “Cura WebUI”, which currently allows me to
.gcodefiles to the Raspi and manage them via the UI
- select a file for printing, getting the usual stats regarding filament length etc
- start, pause and cancel a print job
- while printing, gain information regarding the current progress of the print job (height, percentage etc)
- read the communication log and send arbitrary codes to be executed by the printer
- move the X, Y and Z axis (jog controls, although very ugly ones right now)
- change the speed modifiers for inner & outer wall, fill and support
All this is done via AJAX with a little server component (which heavily borrows from the existing print dialog implementation), and it feels quite responsive I dare to say, even on the Pi :) I so far tested it on both my windows-based development box and the Raspi as server1), and Chrome on Windows and my Galaxy Note 10.1 as the frontend, and I'm quite happy with the results so far.
It also allowed me to play around with Flask, JQuery, Bootstrap, Knockout.js, Flot and the JQuery File Upload Plugin, so I not only have a nice web interface for my printer now, I also learned something in the progress and had an awful lot of fun while doing so I'll probably continue to work on the code, but my original goal – a wireless Ultimaker – is reached I'd say
Probable next steps: Webcam support and some electronic solution that allows me to just plug in one power plug for both Raspi and Ultimaker
Update from Dec 31st 2012
I have just made a major overhaul of the codebase. Since I had to realize that with the limited processing power of something like a RasPi it's just not feasible to even think about adding slicing support, the only thing used from Cura will stay the communication stack and GCODE interpreter code. I therefore refactored the codebase to only include those parts (with proper Credit of course!) and pushed it to a different repository.
Further development will continue there, but I'll leave the forked Cura repo with the added WebUI where it is now (with a statement where to find updates ).
Update from Jan 31st 2013
I nearly forgot to mention it here… Printer WebUI was renamed two weeks ago into “OctoPrint” (including a neat logo) and has consequently been relocated to here since last sunday. Let's hope that this will be the last move ;)
I recently gave in to that constant nagging in some weird part of my brain and bought a 3D printer for our household. I had already circled the Ultimaker since I had first heard about it (one year ago I guess?) but couldn't bring myself to spending so much money on something I don't actually need per se. Somehow my inner geek finally got the better of me though…
Anyway, I ordered the kit plus a spool each of blue and black PLA on November 9th with an estimated lead time of 14 days, but already got a shipment notification ten days later on November 19th. The package arrived safely two days later on November 21st – and I had to discover that the bottom plate of the frame was missing from my lasercut parts (instead I got the left side twice). Big thumbs up for the Ultimaker staff who resolved the issue by sending a replacement part immediately via Express on the next day (and thanks to Nils Hitze for “escalating” my problem ). In the meantime I asked on G+ what parts I could safely assemble already without the missing plate, got helpful answers from both Florian Horsch and Erik de Bruijn (thanks again!) and started with extruder (wednesday evening), printhead (thursday evening), X/Y sliding blocks (friday afternoon) and the Z-stage (friday evening).
On saturday I already feared I would have to spend the weekend not finalizing the build but instead relaxing or something similar when the DHL Express guy finally rang our doorbell in the early afternoon – I haven't been this happy to receive a package in quite some time. So the saturday afternoon was spent with building the frame and attaching all the preassembled parts and when it was already dark outside the big moment arrived, I powered that whole thing on for the first time, connected it to my PC (I didn't bother with ReplicatorG as mentioned on the Ultimaker wiki but instead went directly with Cura), heated it up and – it printed!
As suggested in the Ultimaker wiki, my first print was a 20mm box from a calibration set. That went rather well, so my next try was Ultimaker's mascot, the Ultimaker robot. That didn't turn out so well as starting with layer 20 or so the whole thing started to lean more and more to its right due to the layers not being stacked properly but with some offset. A bit of logical thinking lead to me checking the bolts on the pulleys of the x-axis which were to blame since one of them had come lose. Re-tightening with the supplied 2mm hex screwdriver did only help temporarily though, after another calibratiom print the next real printjob failed again with the same symptom. I decided to solve this after a good night's sleep, so on sunday morning I partially disassembled the x-axis again (the night before I had had issues to even properly reach the offending pulley as it was the one connecting the motor with the axis via the shortbelt, and that's a rather tight spot), tightened everything with a fitting Allen key I thankfully found after rummaging through my toolbox, reassembled the axis, tried the print again and finally everything worked! The result were some nice feet for the printer to which we attached felt pads (Phil's idea, helped greatly in dampening the vibrations).
Since then, I'm a happy owner of a 3D printer – and that thing really is addictive! I already ordered some more colors of filament and have some ideas for christmas presents. I also started on my first own creations since my mom needed a couple of things All in all, I don't regret the investment in that printer at all
So… since my last blogpost, among other things,
- we bought a lot of new furniture and home appliances (February/March)
- we moved into a wonderful new apartment in Obertshausen and therefore finally left the student flat we lived in over the last eight years (March/April)
- we bought a Roomba 780 that now keeps that wonderful apartment dust-free (April)
- we bought a new dedicated NAS (Synology DS212+) that also doubles as a mumble server from time to time (April)
- we bought a new HTPC (Zotac ID41) for the living room – we now actually have one! (April)
- we bought a pizza stone and made some awesome pizza on it (May, June, …)
- we bought Descent 2nd edition and started painting the miniatures (July or August?)
- we did a trip with a rented mobile home down to italy (August)
- we extended our NERF blaster arsenal (September)
- we installed a network-enabled control system thingy for the apartment's radiators (October)
and last but not least, I ordered a 3d printer laster week, an Ultimaker, and it's likely that this will be a new topic to blog about, which is why I'm now finally getting my arse up to write something here again
PS: More that happened can be found on G+, which is were I seem to be the most active these days…
So this marks the last day of the year 2011 – and I'm glad that it's finally over.
2011 was a pretty eventful year in my personal life, seeing both my mother and my father in the hospital (one due to an accident, the other due to cancer – both are fine again, phew!), me having major troubles with both teeth and sinuses in the second half of the year, and let's not forget the pretty stressy work life as well (although that nevertheless was kinda fun, at least after the first three months of the year that very nearly broke me).
At least the year ended on a happy note: We finally found a new appartment2) and will move there march/april 2012, we spent five awesome days in the Southern Black Forest, playing in an epic ton of snow, we had a nice and quite christmas and will celebrate the new year with friends. Also, I rediscovered LEGO as a means for relaxing, built some sets already *happily hugs parents and friends again* and will continue to do so (I ordered that one and got myself a couple of LEGO Technic sets for being busy until it arrives)
So here's to an awesome 2012 (because it can get only better )
I actually planned on doing a longer write up about another Indie gem I've been playing these days: Frozen Synapse. But since work is currently rather demanding and I don't seem to be able to write coherent sentences currently, I'll leave you with the trailer and the friendly hint that the game is currently on sale at Steam (50% off today).
Love the visuals, the soundtrack (I actually bought the Soundtrack edition and have been listening to those awesome tracks during work) and the gameplay, so if you're up for a nice tactical, turn based (and even “play-by-email” compatible) awesome game, this is your chance!
Update: I currently mostly frequent server UK1, if that is of interest to you ;)