iMe: The best firmware for the Micro 3D printer

Please Login to Comment


© 2015-2017 Exploit Kings. All rights reserved.


iMe is firmware for the Micro 3D printer that attempts to fix the printer's biggest problem: limited software compatibility. iMe uses RepRap G-code protocol, so it allows you to use the Micro 3D printer with any 3D printing software that supports that protocol. It also features builtin backlash and bed compensation which makes creating good looking prints with other software possible since the G-code never has to be pre-processed beforehand.

The latest version of iMe is V00.00.01.25 released on August 4th, 2017, and an entire changelog for it can be found here.


  • Uses RepRap's G-code protocol
  • Open source (iMe's source code can be found here)
  • Homing uses the accelerometer to minimize grinding
  • Builtin backlash, bed, and skew compensation
  • Prevents moving the extruder out of bounds in the X and Y directions
  • Faster printing
  • Allows configuring the steps/mm for each of the motors


The easiest way to install iMe is with M33 Manager, which is available for Windows, macOS, and Linux. Just connect the printer to M33 Manager and click the 'Install iMe firmware' button to install iMe.

iMe is also fully compatible with M33 Fio, and it can be installed from there as well.


Every time the printer powers on it'll be in bootloader mode, so you'll need to click the 'Switch to firmware mode' button in M33 Manager to put the printer into a mode where other 3D printing software can communicate with it. Make sure to disconnect the printer from M33 Manager or close M33 Manager before using the printer with other software so that the printer's serial port doesn't remain busy.

M33 Manager will let you know which serial port the printer is using when it switches it into firmware mode, so in order to use the printer you just have connect to that serial port at a baud rate of 115200 with the 3D printing software that you want to use.

Known Issues

  • iMe has no known issues, but M33 Manager has various issues related to thread management


M33 Manager can be used on Windows, macOS, and Linux. In addition to installing iMe, it also allows manually sending commands to the printer in both bootloader and firmware mode which can be used to manage all aspects of the printer.
alt text
So far iMe has been tested on Cura, OctoPrint, Simplify3D, Repetier-Host, Printrun, MatterControl, and CraftWare.
alt text
alt text
alt text
alt text
alt text
alt text
alt text

Hi! I just downloaded the m33 manager app and im trying to connect it to my printer but I cant, when I press connect, it just says no devices found, even tho the printer is connected to the laptop, I tried pressing install drivers but it said failed to install drivers, help?

Has anyone been able to get this to work with a Micro + ?
Been trying to use octoprint but I cannot connect to the printer.

Any chance this will allow the M3D compatible heatbed to work with Cura or other 3rd party software? I think I've run into a bug using Octoprint where the temp limits out at 250 during a print. Want to try other software to see if it's Octoprint related.

Does this work with the Micro + ??

Will this firmware stop you from being able to use the official software anymore, or will you still be able to use the official M3D app in addition to your own G-Code app?

Hello, i have a m3d that i just got this going, but i have no idea what i am doing after. I use simplify 3d with an existing Monoprice Maker Select, planning on using Cura with M3D, when I install Cura, what profile should i use?

so ive got the new firrmware running on it and it will move x-y during calibration but not Z i can manually move Z but it still wont calibrate properly. in pronterface UI it just keeps sending back wait

im using Cura 15.04.6

Error :unknown G-Code Command
rs 1

Z refuses to calibrate down. this is my start G code

;Sliced at: {day} {date} {time}
;Basic settings: Layer height: {layer_height} Walls: {wall_thickness} Fill: {fill_density}
;Print time: {print_time}
;other temp:{print_temperature}
;ideal temp:{print_temperature}
; Calibrate z with offset
;M109 S150
;G30 ; probe the bed to find the z plane
;G1 Z0.53 ; raise the nozzle to a height that you have previously verified is a the desired height relative to the probe trigger point
;G92 Z0 ; set this position as the new Z 0 plane
;G1 Z4 F600; raise the nozzle
M109 S{print_temperature}
G90 ;absolute positioning
G92 E0 ; Zero the extrusion length
;G0 F{travel_speed}
M106 S255
; Print prime Line
G0 F2100 X8 Y104 Z0.270
G1 F600 X40 Y104 E10.0
G92 E0 ; Zero the extrusion length

at current it wont probe the Z plane it just stays where ever. it wont go all the way down. had it working before i took the machine apart to adjust a bad level but now it wont go down just prints like an 1" in the air. and its bed calculation when it was working sucks. it just probed the center and wouldnt move around the bed building a plane how do we get it to do a 4 point level checking the corners and creating a proper plane like Printrbot machines?

Don't know if its only my printer... Using Cura. Sometimes prints don't start. Using the pronterface Ui i can see that the M109 S(whatever) isn't executed correctly. It heats up to the desired temp, but doesent send back the information that temp has been reached, and therfore gets stuck. You can't send any commands to the printer in this state. Somebody else with this problem? Does it also occur with Octoprint?

Just seen that there's a new Firmware out since August. i'm testing it right now. Think it will solve my other problem, that complex prints abort sometimes... Will report. Thank you Donovan.

Has anyone tried this on a M3D Pro yet>? i'm willing to do it....
Why wouldn't it work??

The M3D Pro uses a STM32F070CB microcontroller and not an ATxmega32C4 microcontroller like the Micro 3D printer uses. So the main reason that iMe wont work with the Pro is because iMe isn't compiled for that architecture. To get it to compile for that architecture you'd have to rewrite all of iMe's ATxmega specific stuff to the equivalent STM32 stuff. To do that you'd need to know what peripherals all the pins on the Pro's STM32F070CB microcontroller go to, and you'd need to know how all those peripherals work. That would require a lot of reverse engineering since M3D LLC doesn't provide any documentation about the inner workings of any of their products.

Creating iMe and getting it to work as well as it does on the Micro 3D printer was no easy feat, and getting it to work on another closed source printer will be just as difficult.

Hi! First, thanks for the firmware it's great to be able to connect to the M3D with Octoprint (and others!).

I appear to be having an odd issue with the printer hanging after some commands are executed. I'm running iMe v00.00.01.25 and using M33-Fio to run the connection to the printer from a Raspberry Pi running Octoprint 1.3.4.

After configuring Fio, I can connect to the printer, and watching the debug log see "normal" looking commands go back and forth to the printer. If I then go to the control panel and issue a command (lets say move +Z one mm) I can see the command issued, and then see the printer execute the command. If I then go back and issue the same (or any) command, the printer appears to hang and is then non-responsive from that point on. Powercycling the printer, or sometimes disconnect and reconnecting the printer will bring back communication, but this will follow the same pattern. I've tried connecting with both AUTO baud rate, and forcing it to 110k baud.

Here's a same from the debug log on a good move:
2017-08-27 07:28:27,643 Original Sent: N1 G9116
2017-08-27 07:28:27,643 Processed Response:
2017-08-27 07:28:27,645 Processed Sent: N1 G91
2017-08-27 07:28:27,646 Original Response: ok 0
2017-08-27 07:28:27,647 Processed Response:
2017-08-27 07:28:27,648 Original Sent: N2 G0 Z1 F90
2017-08-27 07:28:27,649 Original Response: ok 0
2017-08-27 07:28:27,650 Processed Sent: N2 G0 Z1 F90
2017-08-27 07:28:27,651 Processed Response:
2017-08-27 07:28:27,653 Original Response: ok 1
2017-08-27 07:28:27,654 Processed Response: ok 1
2017-08-27 07:28:28,691 Original Response: ok 2
2017-08-27 07:28:28,692 Processed Response: ok 2
2017-08-27 07:28:29,667 Original Response: wait
2017-08-27 07:28:29,669 Processed Response: wait

And heres what i see when I issue the same command again, (it seems to go out of sync when looking for the extruder temp?):

2017-08-27 07:28:34,566 Original Sent: N5 M105*34

2017-08-27 07:28:34,571 Processed Sent: N5 M105
2017-08-27 07:28:34,575 Original Response: rs 3

2017-08-27 07:28:34,576 Processed Response:
2017-08-27 07:28:35,557 Original Response: wait

2017-08-27 07:28:35,558 Processed Response:
2017-08-27 07:28:35,560 Original Response: rs 3

2017-08-27 07:28:35,560 Processed Response:
2017-08-27 07:28:36,558 Original Response: wait

2017-08-27 07:28:36,558 Processed Response:
2017-08-27 07:28:36,561 Original Response: rs 3

2017-08-27 07:28:36,562 Processed Response:
2017-08-27 07:28:36,611 Original Sent: N0 M110*35

2017-08-27 07:28:36,612 Processed Sent: N0 M110
2017-08-27 07:28:37,558 Original Response: wait

2017-08-27 07:28:37,561 Processed Response:
2017-08-27 07:28:37,563 Original Response: rs 3

If you have any insight into what's going on, I would really appreciate it, I'm not sure what I can try next.

I haven't been able to recreate your issue, so I'm not sure what's causing it. Make sure to keep the baud rate at either auto or 115200.

You can try switching to M3D LLC's firmware and see if that helps. You can find buttons that do this in the Advanced section of OctoPrint's Control tab.

Does iMe support the new 2017 M3D "Micro+" model? I have one of these, and could not get iMe to detect my printer.

iMe wont work with Micro+ or M3D Pro printers. It only supports the Micro 3D printer.

Thanks so much for this! I followed your instructions now a print that was taking 3 hours takes less than 1. Also my M3d was pausing a lot during prints and now it no longer does! Genius!

Now that the encryption keys for the M3D Micro+ has been broken, is there any plans of adding iMe support for it?

M3D Micro+ is still so closed and can't be used with easier to use programs. Working for a school district, we love the M3D hardware, but the software leaves a gaping hole in the product. Ideally I want to deploy these to classrooms with Raspberry Pis attached so they can be printed to wirelessly from Chromebooks. However it doesn't look like this can be done with the current firmware available from M3D :(

Probably not. There hasn't been much interest from the community in reverse engineering the Micro+ or the Pro, so I doubt that anyone's willing to put in the time and effort required to get iMe running on either of those printers.

Thankyou for your excellent work on this firmware. I think im struggling with a hardware failure not a software problem. My printer would hang every time id try to print from the M3D official software saying it was checking height, it would also never calibrate. I installed your firmware to try another piece of software to see if it was something wrong with M3D's software or my Hardware.

Anyways on running the calibration tool, I keep getting

Receive: Error: Accelerometer isn't working

The calibration would eventually complete and say it was successful but the weirdness continued. Can you shed some light as to how the calibration process works?



Make sure that your printer's accelerometer daughter board is firmly in place and that the connection that connects it to the main board isn't loose. You can find it by taking off the extruder's front cover and looking to the right. There's two notches in the plastic that it's supposed to sit between. You can see it in the top right of this picture.

The calibration process works by slowly lowering the extruder until it detects that the extruder has touch the bed. It detects that by monitoring the Y acceleration output from the accelerometer until is changes due to the extruder's housing tilting slightly backward when it can't move any lower due to the bed.

There's two different calibration processes:

  1. Calibrate bed position/calibrate bed center Z0: All calibration values are relative to the bed center's Z0 value, so this value is very important. It just detects where the extruder's touches the bed in the bed's center and sets the extruder's current Z position to 0. If the printer is unplugged while it's moving or an emergency stop is performed, then the Z values stored in the printer's EEPROM wont be valid anymore. In those cases you'll be asked to recalibrate.

  2. Calibrate bed orientation: This detects how much higher or lower each corner of the print bed is compared to the center of the bed. This sets the 'Front right orientation', 'Front right orientation', 'Back right orientation', and 'Back left orientation' values in the printer's EEPROM. You shouldn't have to perform this calibration very much since the corners of the bed don't change very much in relation to the bed's center over time.

Here's all the other settings that you can set to affect the bed's calibration:

  1. The 'Front right offset', 'Front right offset', 'Back right offset', and 'Back left offset' values in the printer's EEPROM allow you to manually specify an additional vertical displacement that gets added to the orientation values.

  2. The 'Bed height offset' value in the printer's EEPROM allows manually specifying a vertical displacement that gets added to the bed's center Z0.

  3. The 'Calibrate Z0 correction' value in the printer's EEPROM is useful if your printer's accelerometer is constantly incorrectly detecting the print bed by a fixed amount. This value is added to what the accelerometer's output whenever the accelerometer is used.

Does the firmware has acceleration setting for motors?

No, the motors all reach the specified velocity as quickly as possible. The Micro 3D printer is too slow for controlled acceleration/deceleration to be noticeably beneficial.

Hi! I have an M3D where the X backlash is 2.3 (really!) and until I get a new X-motor, is there any way to make iMe accept that value? It keeps wanting to force it to 2.

It's M33 Manager that's enforcing a max backlash X limit of 2, so you'll need to recompile M33 Manager after changing this line to be able to allow it to set a higher X backlash.

M33 Fio also enforces the same limits, so if you use M33 Fio then you'll need to change this line, these lines, and this line in M33 Fio to be able to allow it to set higher backlash values.

what do the settings need to look like in repetier? baud rate volume ect?

does anyone know what the receiving cache size is? or the communication method. i cant seem to get the printer to work with repetier.

Here's the settings I used to get it to connect to the printer. M33 Manager should tell you what serial port to use when you use it to switch your printer into firmware mode. Baudrate is 115200, protocol is ASCII, and cache size seems to work when set anywhere from 50 and 85. iMe's cache is big enough to hold 5 commands, but there's no way specify that since Repetier Host's cache size setting is in bytes and not commands.


still no luck with repetier but octoprint works great. ill just have to use a raspberry pi instead. thanks for the help anyways.

update:i can print with repeteir just not small parts (something the m3d software seems to do a lot better)

Did Repertier hosts log output show anything when you tried connecting it to your printer? Were you making sure to use M33 Manager to switch your printer into firmware mode every time that your printer was powered on?

Also OctoPrint works on Windows, macOS, and Linux, so you don't need to use a Raspberry Pi if you don't want to. The OctoPrint + M33 Fio installers that I mention in the Installation section of the M33 Fio post are available for all those operating systems.

I did switch to firmware mode each time and all the log showed was waiting

Baudrate should be 115200. The printer's width is approximately 109mm, depth is approximately 113mm, and height is approximately 116mm.

All the slicer specific settings are up to the users to decide. iMe will only get you as far as being able to use the printer with third-party printing software, and it's up to the user to experiment and decide the best slicing settings for each software that they want to use.

Hello, I have a old Laptop running Linux and I want to use it as 3D-Printer server with Octoprint. The problem is that Octoprint cant connect to the printer, and I have tried installing M33 Manager and Fio and iMe. I seems that it doesn't work since it's all 64-bit, and my PC is 32-bit. Do you have any 32-bit support to make this work?

Does M33-Fio support M303, i.e., PID auto tune?

@donovan6000: Just wanted to say "Thank you" for your great work on iMe & M33-Fio!
Thanks to you, I've now fully liberated my M3D Printer ;-)

M33-Fio is simply awesome! It really make using the M3D a great experience now. And iMe seems to be 100% stable for me, don't have any problems using it with M33-Fio.

Thanks la lot for that!

Thanks Nold. Good to hear from you again after all this time and thanks for helping out when M33 Fio just just getting starting!

Totally agree! I have zero complaints. I'm thoroughly impressed

I installed IMe and craftware wont recognize my printer I go to add printer manualy and it recognized it but it wouldn't print so I went back to m33 and clicked install m3d software and now i cant get m33 or the m3d software to recognize the printer what do I do?

Okay, so I got fed up by the M3D software for fking up my attempted model design prints and I came across this as alternative to get my stuff over to Cura for much finer control over what the f the printer is doing at whats speed at what place.
Here's what I did.

  1. Uninstall M3D software.
    2.As usage sections tells, download, install M33 manager, connect to printer, install iMe firmware, switch to firmware mode, disconnect M33. Oh it did the bed position calibration too.
  2. Cura - profile load, pick my object, usb print > suprised how little it shows about whats going on, only temperature.
    Anyway, it started printing, didnt start the fan. Started printing.. with brim. Seemed kinda awkward how it did it, like dragging the nozzle and only barely letting some filament out, because it was so down to bed. Few lines into the bring there were clumps coming out onto the brim.. finally when brim part was over and it started doing diagonal moves, no filament was exiting, got to figure out now did the thing glog up thanks to having no fan on at all or what.. sigh. How is filament changing and stuff like that expected to be done with this firmware? The M33 manager doesnt seem to have any menu or items for it ..
    Before Cura, i tried simplify 3D too, this didnt understand where the printhead was at all and just started printing from where it was left by M33 manager - 3cm's up in the air, where It was left after i tested manual movement before, after calibration.
    The Usage section, I feel, needs a lot of additional info given that the users who will try it probably come from very little expert background and from M3D software that provided the buttons to do things and so on.
    a) So what else is needed to do before you use Cura or Simplify 3D, really? Do we need to calibrate and set the printer head each time in the M33 manager?
    b) Anything specific we need to do in "machine settings" in Cura? PLA profile.ini did not seem to reach into machine settings, only the print settings. "Enable cooling fan" was ticked and minimum and maximum were set, yet it did not turn on..
    c) Filament changing, also missing in Usage section, what is the intended workflow for that, back to M3D software? Custom commands we dont know?
    Thanks for the maker but let us improve the guidelines together, from what I've ran into.
    I have kickstarter backer machine and running windows 10. Also Cura version was 15.04.06. Simplify version 3.0.2

Don't know if your still into it, but i ran into the same issues with Cura. No fan running, no filament, z was too deep...
After a week of struggeling i solved those issues. I think with the old micros we face some problems with auto z calibration, our printhead seems to be a bit flexible so he tends bending upwards before the printer recognizes that the nozzle already hit the print bed. i prefer calibrating it by hand. Check out some videos how to calibrate z using gcode and two sheets of paper.

For the other issues i had to do some changes in start and end gcode of the micro. A ";" in gcode means a line is ignored by the printer. In my gcode there is also a calibration routine where you can specify an offset. This offset depends on your machine i assume, you have to check it out by yourself. Remove the ";"s and it will calibrate z before each print.

In Cura, if you go to file>preferences... you can change the printing window type to "Pronterface UI". You get some more information whats going on during print, and also can execute some gcode. For calibrating or loading filament or so...

So heres my start an end gcode. Put it in the Sart/End Gcode Tabs. There are two different sections ones for the start and ones for the end gcode. Its tested and runs fine in Cura 15.04.02 and 15.04.06.

Happy printing

Start gcode

;Sliced at: {day} {date} {time}
;Basic settings: Layer height: {layer_height} Walls: {wall_thickness} Fill: {fill_density}
;Print time: {print_time}
;other temp:{print_temperature}
;ideal temp:{print_temperature}
; Calibrate z with offset
;M109 S150
;G30 ; probe the bed to find the z plane
;G1 Z0.53 ; raise the nozzle to a height that you have previously verified is a the desired height relative to the probe trigger point
;G92 Z0 ; set this position as the new Z 0 plane
;G1 Z4 F600; raise the nozzle
M109 S{print_temperature}
G90 ;absolute positioning
G92 E0 ; Zero the extrusion length
;G0 F{travel_speed}
M106 S255
; Print prime Line
G0 F2100 X8 Y104 Z0.270
G1 F600 X40 Y104 E10.0
G92 E0 ; Zero the extrusion length

End Gcode

;End GCode
G91 ;relative positioning
G1 E-0.5 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure
G1 Z+0.5 F{travel_speed} ;move Z up a bit and retract filament even more
G1 Z+6 F{travel_speed}
M104 S0 ;extruder heater off
M18 ;steppers off
G90 ;absolute positioning

i have this G code loaded but it keeps my Z floating wont home Z and its sending everything way to the right

so i finally got it working, but im having print error in that my Z is still too high and i need a different bed leveling system, right now it probes the center 3 times, is there a way to change that so it probes about 20mm from each corner to figure out true level? like a printrbot doe with its 3 point level? i personally run 9 point level on it. if we could get a 4 point level going that would be the cats meow. that i think would fix why it looks like its swooping. if anyone knows how to change that let me know.

Start and End gcodes above now also tested in the new Cura 2.6.2 and its working almost fine.
Start and End Gcodes are added in the Printer settings. Simply override the settings written there.

Printing with a raft unfortunateley switches off the fan during each raft layer regardless of any cura settings putting it to 100%.

Also you dont have the Pronterface Ui like in 15.04.6 so you cant execute Gcode manual for calibration or changing filament, but with everything set you can print right away.

I will stick to old Cura because of the pronterface ui, but the new infill patterns and some other settings might be worth a look. I.e. you can print infill at a different layer height which might be worth a look.


Okay, since the maker seems to be away, here's little of what i've learned in the meantime. The way I understand it right now.
This is how I got my micro 3d running with Simplify 3D.
After installing the firmware, switch to firmware mode. Do the calibrations in M33 manager.
Now, Simplify 3D (v 3.0.2). You need to open "machine control panel". Connect to the printer (disconn in M33 beforehand). Open Jog Controls tab, press "home all". This should mean everything is put to 0 coordinates. For idno what reason, i'm no expert, Z (hight) is always forgot after each print, if you press home all after finishing printing.
So what I do before printing is:

  1. Home all, then manually lower the Z until it slightly touches the print bed, now raise it using 0.1 button until u can see a white paper behind your printer if you look from bed level.
  2. Now press "Zero Z" so this is now used as bed level height. CAREFUL NOT TO SET IT TOO LOW OR YOU RUN THROUGH YOUR BED SURFACE WITH THE BRONZE NOZZLE WHEN HOMING & STARTING PRINTS (my guess is, that firmware fills in the unevenness of your print bed, from the info it got from calibration)
  3. Start printing. For idno what reason, i'm no expert, it will heat up the nozzle and then gets stuck, spamming "wait" in communication. This is where you must press "Force next" button and confirm you want to continue, communication tells that firmware got unresponsive and then starts to do it's thing, doing home all and then continues the printing job until the end.
  4. When it finishes, it turns off the heater but not the fan, for idno what reason, i'm not expert. Something extra you could/should do under "process" I guess, dno why it doesnt happen by default.
    Anyway, what else I learned, because it's shitty printer, you need to fart around with the print settings to get stuff come out right. I'm not really sure that those little crappy printers are all made equal so just telling you settings will probably not be a good idea because yours might be crap in some other dimension or so.
    I'll tell you that I did have to increase outline overlap to 40% @ infill, default printing speed @ other to 14mm/s, so maybe go from there and start adjusting. (all printing settings are in the "Processes" - leave print preview, it's in the model view)
    Now atleast i'm getting solid objects finally out of this little sad printer. Oh I do have custom made bed heating from whenever I got this printer so maybe that makes my life bit easier and if you have no bed heating - you maybe need to mess around a bit more with the first layer settings. Havent had time or wish to go figure out how a newb should act with cura + this firmware, if you have - put it down here!
    Hope this helps someone.
    And thanks for the firmware maker, it's fiddly and somewhat poorly tested/documented in my experience, but atleast I now get usable models for my part designs.

Additional info and correction. After setting Z in simplify3D once, you dont need to do it each time. I believe i pressed Zero Z myself because it didnt go down on "home all" like I thought it would, for some reason. It does go down when printing starts. So just set it once and keep that if that works well.
Also, for fan, in Processes under Scripts tab, at Ending script, add M106 S0; turn off fan
To turn off the fan after printing is done. I also added G0 Y90; go to y 90mm
So that the head would not sit where it ended and get stuck to the model when the plastic cools down.

hm. I cheered too soon. Although it's connected now and it says it's printing, the M3d just sits there and does nothing.

I installed iMe and Cura, but now I'm a bit confused. Cura still can't find my M3d printer. How do I use Cura now directly on the M3d? Or do I still save the Gcode and upload it using the official software?

P.S. I accidentally turned on the official software and while re-calibrating the nozzle grinded itself into the printbed.. And finally totally got stuck. I had to disconnect it completely to get it normal again

Make sure you switch the printer into firmware mode using M33 Manager. You might have to manually set the printers serial port in Cura by changing the Machine > Machine Settings > "Serial Port" and "Baudrate" settings. It's only been tested on Cura V15.04, so you'll have to experiment a bit or if your using Cura V2.

Make sure you avoid opening M3D's official software when using the printer with any other software. M3D's official software attempts to constantly communicate with the printer's serial port even if it's busy, so it really messes up things when other software is using the printer.

Great, thanks! Will do that (probably) tomorrow. Yes, using the latest Cura version, so if it doesn't work I will switch to V15.04

Started my pc again. It worked! Thanks!

Started my pc again. It worked! Thanks!

Started my pc again. It worked! Thanks!

Started my pc again. It worked! Thanks!

Started my pc again. It worked! Thanks!

Using it with cura get the temperature fine but dont get filament extruded. Where i can set and check the extrusion values ??
Thks for your work and help.

You can configure the steps/mm for the extruder's motor with M33 Manager, but the default values should be working fine. There's most likley a problem with the Cura settings that your using. Here's the Cura profiles that are included with M33 Fio.


after apparently solving my underextrusion problems, I now have another issue: it seems that sometimes the heater just stops heating while printing, so the printer stops extruding.
I noticed this because I canceled a print that suddenly failed (I was close to the printer so I saw it): while printing, it just stopped extruding; after cancelling the print (PLAT @ 215 degrees celsius) I had the idea to try to manually tell the printer to heat at PLA temp, and it started at a little bit less than 150 degrees, very strange I thought, considering that I had stopped the print just a few seconds earlier.
Anyone has an idea? Could it be the heater dying? A firmware bug?

Giovanni Romeo

That sounds normal. The nozzle doesn't retain heat very well, so it can cool down very quickly in a matter of seconds when the heater is off.

Ok, but this does not explain what happens after I manually heated to PLA temp: after I stopped the print process, I manually heated to PLA temp, and as soon as the nozzle reaches the right temp, a blob of filament pops out from the nozzle, like if it was stucked inside. under pressure (sorry for not having written about this behavior before).


Sorry if this is off topic, but how new is your printer? It's unrelated to the problem that your having, and I'm just curious to see if M3D LLC has updated their bootloader recently. I'd also like to get the bootloader ROM if it's newer that the one my printer has, VB004.

If you could run the command M115 in M33 Manager's console when the printer is in bootloader mode and post the response here. The response should be a list of hexadecimal numbers similar to "0x42 0x30 0x30 0x34:. If you get the response "PROTOCOL:RepRap FIRMWARE_NAME:iMe..." then your printer is in firmware mode and you'll need to switch to bootloader mode.

Hi, no problem. The printer has been ordered on august 25 and arrived ~7 days later.
Now I'm at work since it's morning here in Italy, I'll run that command when I'll be back home. By the way, if the printer is in firmware mode, how do I switch to bootloader mode?

Thanks! The printer will always start in bootloader mode when powered on since that's what the microcontroller's fuse bytes are set to do to. We can't change the fuse bytes or overwrite to bootloder without an external programmer because that's what the microcontroller's lockbits enforce, so it'll always be in bootloader mode when powered on. Bootloader mode is the only way to update the printer's firmware, so the way that the boot process works ensures that the printer can never be bricked.

M33 Manager's button that switches the printer into firmware mode will change to a button that switches the printer into bootloader mode if it detects that the printer is in firmware mode, so ithere shouldn't be any problems with putting the printer into bootloader mode.


do you mind if I'll do the bootloader version check tomorrow?
I'm quite busy at the moment.


I'm in no rush, so take all the time you need.

Your nozzle might have some filament building up on the inside that could be obstructing the filament being extruded and could eventually lead to a clog. I use piano wire to clean out the nozzle.

I'll try with a paper clip... I have a piano, but no spare wires :-)

The unclogging didn't the trick... There was some pla inside that I removed, but underextrusion is still there.
Plus the m3d stops extruding after a few seconds, but manual extrusion always works.
M3d support says it could be the heater calibration that screwed up: I don't understand how a factory calibration could screw up after less that a month... They suggested to return the printer to them to have in repaired, but I'll have to pay round trip shipping (and custom duties, again...), for a grandtotal of ~160$ !!!
I'm very disappointed.

Hi Giovanni,
Actually that is not quite correct. You won't pay custom duties for repairs, as those printers will ship under a different customs code.
Anyway, shipping costs...
As a European distributor for M3D we can do a lot of repairs, but unfortunately the heater issue cannot be solved without returning it to factory.

Hi, thanks for your response. They're sendind me a new nozzle for free, hoping that this will solve the problem. If this will not work, I'll have to send the printer back for repair. In the meantime I'll try to clean the nozzle with acetone. Shipping with dhl to the US will cost 134€... Sh*t... I hope not to pay customs as you said. Anyway it's good to know that there is a European distributor...

Heater problem are not very common, have seen it only once so hopefully changing the nozzle helps with the extrusion.

FIY, you'll find our webshop here: www.3dprinthings.eu.
We have M3D filaments in stock including Tough filament but also the BuildTak for Micro. Nozzles, fans etc. available upon request although you will not find those on the webshop now.

Keep us posted!

Sure I'll do!
Your webshop is in a language I don't understand... It seems there's no option to change language, at least on the smartphone version.
I think I'll use Google traslate

Oh and before you send the printer back to the US, I may have a solution for you to reduce shipping cost for you substantially, just have to check with M3D if they agree.


It would be awesome!

Hi Giovanni, can you PM me with your Micro's serial number, address and email you used to purchase The Micro? I can offer bulk shipment with our printers to reduce cost for you. It's ok for M3D.

Hi Frederik,

first of all, THANK YOU for you time!
I'm still waiting for the replacement nozzle (it arrived in Italy, so it should arrive within this week I hope): I'll try changing it, if it does not work (I mean if the problem persists), I'll PM you all those infos.
Many many thanks,

Hi all,

the new nozzle has finally arrived, I mounted it and the micro is printing again like brand new!
Now I'll try to inspect the "old" nozzle to understand what was going on with it.


Awesome! Glad to hear it wasn't a heater problem.

Believe me: I'm gladder!!!

I just got the m3d today and dont know shite about iMe or M33 and the install.bat is failing left and right.

M33 Fio and iMe are two separate projects with different goals. Neither of them rely on each other, so you don't need iMe to use M33 Fio and you don't need M33 Fio to use iMe.

M33 Fio is a plugin for OctoPrint that allows it to work with the Repetier-Host protocol that M3D's printer firmware uses, which thus makes OctoPrint work with the Micro 3D printer.

iMe is firmware for the Micro 3D printer that uses RepRap protocol instead of Repetier-Host protocol, which makes the Micro 3D printer work with a bunch of third-party 3D printing software, like Simplify3D, MatterControl, etc.

What errors are the install.bat file is showing?

Also, since you recently got your printer, be aware of M3D's warranty policy which indemnifies them from liabilities that result from you using third-party software like M33 Fio and iMe.

does this only work if you have a rasberry pi? I tried to download using the .bat file and at the very end it says it fails because of some c++ file missing. the error doesnt stay on screen long enough for me to figure out the exact issue

I don't own a Raspberry Pi, nor have I ever tested M33 Fio on a Raspberry Pi. M33 Fio and OctoPrint work on anything that runs Python, which is Windows, OS X, Linux, etc.

You can launch the install.bat file from a command prompt being run with administrator privileges to keep it on the screen long enough to see what error it's giving you. Just right click on the command prompt an choose to run it as administrator. Then navigate to the install.bat run with the command prompt and run the install.bat file.

Also this thread is for iMe and not M33 Fio. So try to keep your M33 Fio questions in the right thread ;)

Hi Donovan,

yesterday I updated my M3D's firmware with iMe V00.00.01.18, I've then done a complete bed calibration and finally started to print a RPi3 case (http://www.thingiverse.com/thing:922740) with 250 microns layer height and 60% infill. Strangely enough, the raft and the outer shells (is that the correct name?) printed correctly, almost perfect, but the top layer was not completely solid, particularly in one corner of the print (please note that in the same corner, the outer shell was perfect). It looks like the top layer has been printed like the infill.
Do you think it could be a wrong slicer setting? Extruder gear problems (but if that's the case, why only on the top layers and not on the outer shells)?

Raspberry Pi 3 (B/B+), Pi 2 B, and Pi 1 B+ case with VESA mounts and more

It's probably resulting from either wrong slicer settings or limitations of the slicer. You can try increasing the top/bottom layer counter to see if that helps. I know that Cura has issues with parts of the model that are thiner than the nozzle's size, so that could be part of the problem.

Does the visualized G-code look like it has any problems around the top layers? You can see it in the OctoPrint's Gcode Viewer tab.

Hi, I'll look at the visualized gcode asap... I should have done it before printing...

Apart from that problem, I'm facing another issue (I don't know if it's with iMe or M33 Fio): every time I turn on the Raspberry Pi with the octoprint, and I connect to the printer, I get the following error "Invalid bed center Z0. Calibrate?", and I need to wait for the calibration stuff to happen. Also, the very same thing happens if I disconnect and then connect again from the M3D using the connect/disconnect button in the Octoprint GUI.

One more problem, this time with the bed of the M3D: I noticed that the center of the bed is higher that the four corners (it's almost 1mm higher), this implies that even with the bed correctly calibrated, the first one/two layers of the print (usually the raft) get printed only in the four corners and not in the center part of the bed: any idea how to calibrate that?
Many thanks!

The "Invalid bed center Z0" message indicates the the Z position stored in the printer's EEPROM isn't valid. This can happen if the printer's power gets disconnects while it's moving Z positions since it invalidates the Z position in EEPROM before moving and revalidates when the movement is finishes. It could also happen if the write limit for the validation address used in the EEPROM is at its limit. I think the Atmega32C4 microcontroller that the printer uses has a EEPROM endurance of 1000000 cycles, which means that this limit would be reach after 11.5 days if the printer's Z position changes once a seconds.

M3D's official firmware does this Z position revalidation immediately after a movement is finished, but it can take iMe up to 1.8 seconds after a movement is finishes for it to be revalidated. This is because iMe saves the X, Y, and Z positions (17 bytes) while M3D's official firmware only saves the Z position (5 bytes). The microcontroller's EEPROM write speed is pretty slow, so saving those 17 bytes immediately after a movement is finished would create a noticeable delay which is why iMe revalidates them in stages that can take 1.8 seconds to save all 17 bytes. You could always switched back to using M3D's official firmware if iMe is giving you too many problems.

The bed calibration detects the vertical displacement of each corner with respect to the center of the bed. So it knows that the real Z0 is in the center of the bed and that each corner's Z0 is actually the real Z0 + corner's vertical displacement. It uses all 5 points, the center and each corner, when the bed compensation is preforming height adjustments.

Hi, thanks for your reply.
I have an idea about the invalid z0 I've experienced a couple of times: in fact in my previous post there was a missing information, I didn't tell you that those errors all come out after I used the emergency stop; since iMe saves those coordinates at intervals (if I underdstood it correctly), then using the emergency stop there's a chance that those coordinates are not saved. If I'm right then it could be useful to save x y and z after an emergency stop.

Regarding the bed center z0, is there a way to manually adjust its offset?
Many thanks,

An emergency stop will immediately halt the current movement and prevent it from finishing, so it never revalidates the X, Y, or Z when an emergency stop happens since it doesn't know it's X, Y, or Z position is anymore. I tried to think of a way to determine the unknown positions caused by an emergency stop, but it was difficult to do with how the bed compensation is currently implemented.

Z0 isn't directly saved anywhere, so it's difficult to adjust without affecting other things. You can manually set Z0 with the 'Save Z as bed center Z0' button, which saves the current Z as the new Z0. However that will change all the other calibration settings since they are all relative to Z0, so it's recommended that you first calibrate Z0 accurately before calibrating anything else.


this is going to be a long story... I've spent hours trying to manually calibrate Z0, with no success... Now the filament doesn't adhere to the bed in its central zone: I tried to print a small box 20mm x 20mm x 1mm (1mm is the height) with no brim or raft, just to see if the first layer adheres or not, and it doesn't, no matter how I set Z0, so I think I'm doing something wrong. Here's what I've done, tell me if it's wrong (maybe I need to switch to absolute mode??):

1: moved x and y to the center with the home button for x/y.
2: started moving down z with the "down arrow" button, selecting 1, 0.1 or 0.01 "steps" in order to have the nozzle just over the bed, using a sheet of thick paper to "measure" the distance between the bed and the nozzle.
3: when I think the distance is correct, I've clicked the "Save Z as bed center Z0" button

Is that algorithm correct?


Those steps are correct. You can even verify where Z0 is by running the following commands which will move the extruder to the Z0 height.

G0 Z0 F90

It could be that the paper that your using is too thick. I'm not entirely sure what the ideal Z0 distance from the bed is, so it takes some experimenting. I try to get eye level with the bed and try to lower the extruder until the tip of the nozzle touches the bed enough that the tip fully blocks my line of sight with the wall behind the printer.

You can also disable M33 Fio's Preparation pre-processor stage in the M33 Fio tab of OctoPrint's settings to speed things up a bit since that'll skip the nozzle priming that occurs at the beginning of a print (when it moves the extruder into the front left corner).

Also the absolute/relative mode buttons are pretty useless. All the movement buttons switch to relative mode automatically, and I only included those mode buttons since M3D's official software also has them.

Thanks, I'll give it a try.
Also, I'll ASAP switch to external spool to exclude underextrusion problems due to the excessive friction caused by the internal loading mechanism.



good news first: I switched to external spool, and the underextrusion problems almost disappeared. Plus after a few hours spent trying to calibrate Z0 (and "swearing"...) I think I finally got it. I printed a test cube, and it has been printed very well.
Now I'm trying to print the M3d "official" spool holder(they call it "one piece spool holder"). As you can see from the photo (https://goo.gl/photos/JtujyW7Qx6SCQDri6) it ended with a partial disaster, the first layer of the shell did not adhere to the raft (is that the raft?) and the filament ended into the fans making a loud noise and blocking them: I canceled the print job immediately.
Here's what happened:

  1. The very first layer, (by the way I printed with wave bonding) almost did not print, and that's what happened most of the times when I use wave bonding, maybe because the up and down movement of the wave bonding goes a little bit too down;
  2. the second layer (part of the raft) printed quite perfect, except for a corner which warped;
  3. the third layer printed good for the most part, except for a few "stripes", mostly in the top-right corner of the object
  4. the fourth layer, which is the first with the shell, did not adhere at all...

Do you have any idea?
Many thanks,

Try lowering the raft airgap in the manual section of the slicer settings to decrease the distance between the raft and the object. Or you can print without a raft and without wave bonding. I rarely ever use a raft anymore, and I've only ever used wave bonding once just to make sure that it works XD


I lowered the airgap and calibrated Z0 again to be little bit closer to the bed.
I tried again to print the M3d "official" spool holder and this time it's been printed.
Well as you can see from the two photos (https://goo.gl/photos/eofhKcyz8VtdWw1MA) it looks like I'm having poor extrusion. When printing this spool holder, I was using a temporary external holder and there was actually a little bit of friction. Anyway, since I was near the printer when it was printing the first bottom solid layers (after the raft), I noticed something strange: I could hear the nozzle almost scratching (maybe the word scratching is not the right one, let's say "touching") the layer underneath (this happened for all of the solid bottom and top layers): so I thought: maybe it's not underextrusion itself, but the layers are printed too close each other and the filament cannot extrude well: is that possible; if it's possible, how can I fix that?

Many thanks,


Comments deleted.

First of all, thanks for the response. When you say to calibrate z0 before anything else, you mean the four corners? Or is the registration another calibration affected by z0 other thanks the four corners?

Your correct, I'm just talking about calibrating the four corner after Z0 is calibrated.

What is suggested speed for printing?

If using MatterControl you May want to scale the max speeds down a tad. I am running mine at 850mm/permin 14mm/s works well and most of the Studdering movements are gone this way. For some reason if I run mine above 900 I get overtravel (or belt slips most likely) and the end model will be shifted on different layers.

I tend to stick with the speeds used in the Cura profiles that M33 Fio provides, which are:
16mm/s or 960mm/min for PLA, ABS-R, and tough filament
20mm/s or 1200mm/min for ABS

iMe also enforces speed limits on each of the axis to prevent moving too fast, just like M3D's official firmware does. So iMe will reduce the speed of any command that it receives if it's faster than the set speed limit. This speed limits can be changed, and their default values are:
X speed limit 1500mm/min
Y speed limit 1500mm/min
Z speed limit 60mm/min
E extruding speed limit 102mm/min
E retracting speed limit 360mm/min

My speed 1200 1200 mm / s in the printer protection
1500 fails ....

Hello Donovan!

I just got my Octopi set up on my pi 1B and installed iMe throught M33-Fio but it didnt install the latest version,

Do i need to install the m3d driver or can i just plug in the usb cable, run m33 manager and install the latest version?
(ive done a factory reset on the netbook i got with the printer and its so horribly slow that i dont want to install anything on it before i get an ssd)

Thank you for the amazing work you do on these soft- and firmwares!

M33 Fio V1.7 should include a button to latest version of iMe, V00.00.01.18, in the Advanced section of OctoPrint's Controls tab, so you can either update M33 Fio to the latest version or use the 'Install firmware from file' button to install this file. So there's no reason to use the netbook.

I downloaded the 1.18 and updated the firmware by inputting the hex, i guess im too thick to do it using the built in update function cause i cant see the newest version.

Ive got 1.6 installed but it says 1.7 is available but i cant figure out how to get the newest through the interface.


I just realized im running your unlocked firmware on the netbook as well, since it was so slow i wanted to see if there was some way to decrease the amount of ram the system dedicates to video since wasting almost 256mb of the precious single Gb in there is really useless on a machine than wont be running any games, guess there wasnt an option for it though.

OctoPrint's plugin updater has always seemed kinda hit or miss for me, so I'm not surprised that it's having issues for you too. You could probably uninstall M33 Fio and reinstall it to make sure that it's the newest version. Not much really changed from V1.6 to V1.7 aside from including different versions of iMe, so you don't really need to update M33 Fio since you already have the newest version of iMe.

Awesome that using one of my modded bios :) It's too bad that there wasn't any GPU memory settings though. Bios developers never seem to implement the settings that we want lol.

Cool! Ill stick with 1.6 till there are some features i want in a newer version.

About the bios, yeah but it was worth a shot :)

Thanks again!

Any idea to solve the ripple on surface? especially on the curved surface.

Make sure your bed is accurately calibrated. Run a G32 command to automatically calibrate your bed center Z0 and bed orientation to see if that helps.

I did that already but no luck. I connect M3D with Raspberry B running OctoPi, is that an issue?

I don't think that'd cause this issue, but you can print with different 3D printing software just to make sure though. Can you upload the G-code file that your trying to print?

I think the question here is about G30 Calibration
nozzle strongly pressed ......

Is there any chance of getting M109 - Set Extruder Temperature and Wait - actually implemented? Simplify3D would like to use it. Thanks.

Ack! My apologies. I didn't read the code carefully enough. I got that M104 and M109 are handled by the same case branch, but didn't notice that they are both treated as M109 - with the wait - rather than M104 - without the wait. (At least it now looks that way to me. I can't really check as my printer is in for repair, which gives me too much free time to wander around the code.)

M104 and M109 are treated differently in the code. The second parameter passed to the 'setTemperature' function is if it should wait, which is true when the temperature is greater than 0 and the command is M109.

Everything about iMe has been optimized to reduce the size of the firmware, so a lot of the code gets reused in similar cases such as M104 and M109. Keeping iMe small enough to fit into the microcontroller's 32KB of flash hasn't been easy. In comparison, M3D's newest official firmware is 32762 bytes in size which leaves only 6 bytes of free space, and the newest iMe firmware is 32350 bytes in size which leaves 418 bytes of free space.

Hang on. Does that mean that from a cold start it will NOT wait no matter what I request?

No, let me reword it. It'll always wait if the temperature specified in the M109 command isn't 0 no matter that the current temperature is. It doesn't wait if the specified temperature in the M109 command is 0 since it'll probably never actually reach 0°C unless your printing in a freezer.

Here's all the M104 and M109 case.
M104 S0 (Wont wait)
M104 S200 (Wont wait)
M109 S0 (Wont wait)
M109 S200 (Will wait)

Got it. Thanks. With a little luck my printer will be back soon and I will have better things to do than ask you dumb questions. :-)

This will change the printer's firmware ? is it reversible like i can go back to original firmware when i want ?

Yes, this will change the printer's firmware. M33 Manager includes a button to install M3D's official firmware which you can use to switch back.

Does octoprint/m33 take care of the bootloader issue? I run completely headless over the network and won't be able to push a button in M33 manager.


Unfortunately there's no way to overwrite the printer's bootloader, so you'll always need some way to put the printer into firmware mode. Putting the printer into firmware mode only requires sending Q to it, so if your using Linux then echo 'Q' > /dev/ttyACM0 is all you need.

Also M33 Manager can be compiled as a command line program by setting this line to FALSE, which you can run with the command line argument -f to put the printer into firmware mode.

Hi Donovan,
if all is needed to put the printer in firmare mode is sending it a 'Q', then could it be possible to add a button to the M33 Fio plugin that does just that?

M33 Fio already does this automatically when OctoPrint connects to the printer, so your printer will get put into firmware mode every time it connects to OctoPrint.

Whoo, I didn't get it! Thanks,

awesome, thanks! :)


Hi there,

I'm trying to use this firmware with my Micro, but the calibration is way off. I've tried calibrating it through the M3D Fio software (using paper), and through the G32 g-code, but everytime it will only use a portion of the print area (often around half), and will try to print from about a centimeter above the bed. Is there anything you'd recommend for me to get this working?

So excited to use this!!!!

Currently I am working at MatterControl With firmware IME 010 is simply amazing. And most importantly do not need a piece of paper that would be calibrated. Donovan6000 I hope that you are not abandoned Projects IME. Thank you in advance )))

did you not get stuttering?

Feature IME firmware M3D micro

This is due to how the bed leveling compensation works. It breaks up every movement into 2mm sections and determines the Z value that it needs to move to for that section to compensate for the bed's leveling. The Z motors moves much slower than the XY motors, so the XY movements are slowed down to guarantee that all motors stop at the exact same time. The amount that an XY movement is slowed down is proportional to the distance of the Z movement, so the irregularities that occur during XY movements are a result of the Z value for each section differing.

The firmware makes it so that all XYZE movements end at the same time, so the intermittent movements shouldn't be negatively affecting print quality.

Would increasing the z movement speed help? The stuttering actually do make an impact on the print. The wall finishes is rough and not as smooth as if it were to move smoothly.. thx

Also, when I move just x or y only, the motor movement seems jittery as if the current applied is not optimal.

Using OctoPrint on my B+, got the Fio loaded, testing a filament clip I printed earlier via the native M3D software on the OctoPrint/M3D Fio combo.
What I have to say is that the OctoPrint/M3D Fio software literally takes more than 4 times longer to print this simple piece compared to the native software.
Now, I read somewhere online that this is because how the F commands are misinterpreted by the preprocessor.
Will this custom firmware fix this issue since it changes it to Reprap GCode interpretation?
Also, is it possible to restore/flash the factory firmware back into the M3D in case there's a need to revert back to the standard M3D software?


If you want to reinstall the M3D's original firmware, just open up the M3D software and once your printer is detected, it will ask you to update your firmware. Just hit ok and it will install all of the original firmware no problems.

Hope that helps

height different layer.

It's difficult to determine what caused the difference in print times since your time comparisons weren't done on the same device and possibly weren't done using the same G-code. Based on what your saying, the time differences could have been caused by any of these or a combinations of these:

  • The computer running M3D's official software might have more processing power than the Raspberry Pi B+
  • The slicer, slicer version, or slicer settings used the slice the model might have differed
  • The printer's firmware might of been changed when using the different software

As far as I know, all M3D's official firmwares newer than and including V2015122112 use feedrates in mm/min, which is the same units that RepRap firmwares use, so I doubt that the time differences were caused by the G-code's F values unless you were using a firmware older than that. iMe also uses feedrates in mm/min, so probably wont speed anything up.

M3D Manager lets you install firmware from a file, so you can use that to go back to M3D's official firmware. You can also connect the printer to M3D's official software and it'll install M3D's official firmware, but doing it that way will probably change some of your printer's settings since M3D's official software will set the backlash speed to 1500 and the back left offset, back right offset, front left offset, front right offset, and bed height offset to 0 if it thinks that your printer is using a firmware older than V2015080402. M3D's official software will see iMe as V1900000009, which it'll interpret as being older than V2015080402.

Thank you so much donovan for building this.
O am happy to see the community behind M3D thriving despite of the rigidity of the Micro3D people and their well.. lacking... software.

Installed it and printing a cube. Somehow the target printer hot end temp is 205 but M3D Fio reports it is 192.2C. Any idea what may be wrong?

Just released a new versions of iMe, V00.00.00.09, that fixes the heating issue.

iMe uses the same algorithm for reading the heater's temperature as M3D's official firmware does, so experiencing temperature variations of ±15℃ is pretty normal.

Question temperature closed. iMe 1900000009 very good.

That's not what I saw with both official and M3D Fio though. Once it starts to print the temperature is rock solid, with variation just a couple of degrees max.

iMe 1900000009 very good. Prints better than 20160404. I recommend to try

Damn. Just when I ordered my OctoPi and everything.

Hi Donovan, hat off for what you guys have achieved so far! Will certainly test it here.
Did you know that the people from the Dutch based startup Printr are also looking into a 3rd party solution for M3D? They've developed the Katana slicer, Formide cloud platform, and the standalone device The Element. So far M3D is not supported, but that was their goal, and they are still working on it.

this is awesome!