3D Printer Monitor Wemos D1 Mini ESP8266




I enjoy flying RC and 3D Printing

Intro: 3D Printer Monitor Wemos D1 Mini ESP8266

Monitor your 3D printer over a wifi connection. This is a Wemos D1 Mini and a 128x64 OLED combined together to display the status from your OctoPrint Server.

Requires the following:


  • Displays the print status from OctoPrint Server
  • Estimated time remaining
  • Time Printing
  • Percentage complete
  • Progress bar
  • Bed and Tool Temperature
  • Screen turns off when printer is turned off or disconnected
  • Screen turns on when printer is Operational or connected
  • Option to display clock instead of sleep mode
  • Sample rate is every 60 seconds when not printing
  • Sample rate is every 10 seconds when printing
  • Fully configurable from the web interface (not required to update Settings.h)
  • Supports OTA (loading firmware over WiFi connection on same LAN)
  • Basic Athentication to protect your settings
  • Video: https://youtu.be/niRv9SCgAPk
  • Detailed build video by Chris Riley: https://youtu.be/Rm-l1FSuJpI

Step 1: Solder Up the Wemos D1 Mini With the 128x64 I2C OLED Display

This step only requires connecting 4 wires between the Wemos D1 Mini and the OLED display.

  • SDA -> D2
  • SCL -> D5
  • VCC -> 5V+
  • GND -> GND-

Step 2: 3D Print a Case for Your 3D Printer Monitor

Since you are monitoring a 3D printer, you probably have the means to print the case for this project or create your own. My design is posted on Thingiverse.com here:


Fit your Wemos and OLED in the case. You may need to apply some glue to the outer corners of the OLED display to get it to stick into the case. The Wemos will be held into the case by the back panel.

Step 3: Download and Compile Source Code

It is recommended to use Arduino IDE. You will need to configure Arduino IDE to work with the Wemos board and USB port and installed the required USB drivers etc.

  • USB CH340G drivers: https://wiki.wemos.cc/downloads
  • Open the Arduino IDE and enter the following URL http://arduino.esp8266.com/stable/package_esp8266com_index.json into Additional Board Manager URLs field. You can add multiple URLs, separating them with commas. This will add support for the Wemos D1 Mini to Arduino IDE.
  • In the Arduino IDE, open Boards Manager from Tools > Board menu and install esp8266 platform (and don't forget to select your ESP8266 board from Tools > Board menu after installation).
  • Select Board: "WeMos D1 R2 & mini"

Download the Source Code for 3D Printer Monitor:



The following packages and libraries are used (download and install to your Arduino IDE):

Initial Configuration
You can update the project Settings.h file with your OctoPrint API Key or do it from the web interface. Get your OctoPrint API Key from your OctoPrint -> User Settings -> Current API Key.

NOTE: The settings in the Settings.h are the default settings for the first loading. After loading you will manage changes to the settings via the Web Interface. If you want to change settings again in the settings.h, you will need to erase the file system on the Wemos or use the “Reset Settings” option in the Web Interface.

Step 4: Web Interface

The Printer Monitor uses the WiFiManager so when it can't find the last network it was connected to it will become a AP Hotspot -- connect to it with your phone and you can then enter your WiFi connection information.

After connected to your WiFi network it will display the IP addressed assigned to it and that can be used to open a browser to the Web Interface. Everything can be configured there in the web interface.

2 People Made This Project!


  • Fix It! Contest

    Fix It! Contest
  • Tiny Home Contest

    Tiny Home Contest
  • Audio Contest 2018

    Audio Contest 2018

52 Discussions


Question 16 days ago

Does the printer have to have WiFi of can i use a wired printer (non WiFi to printer)

3 more answers

Reply 16 days ago

The software is designed to work with OctoPrint server and requires wifi.


Reply 16 days ago

does the printer have to be connected to wifi?


Reply 16 days ago

No, but your printer need to be connected to an OctoPrint server -- and OctoPrint needs wifi.


Reply 19 days ago

found it now, thanks for the fast help!


Question 21 days ago

This is the first Arduino project I've ever made so sorry if this is an easy question, but is there a way to have it cycle through the weather and the time when it's not printing but still connected to octoprint?

2 more answers

Answer 21 days ago

So I did some looking and I think I figured out how to do this. In the printermonitor file I changed,

const int numberOfFrames = 4;






ui.setFrames(frames, (numberOfFrames));

frames[0] = drawScreen1;

frames[1] = drawScreen2;

// frames[1] = drawScreen3;

frames[2]= drawClock;

frames[3]= drawWeather;

// clockFrame[0] = drawClock;

// clockFrame[1] = drawWeather;

ui.setOverlays(overlays, numberOfOverlays);

I turned off draw screen 3 because I don't care to much about the time printed.


Reply 21 days ago

You can try that. The time and weather display were simply an optional thing when it was not monitoring print jobs. You are going down the right path if you want to modify your own version to include the other screens. You may need to modify code in a couple of places.


Question 4 weeks ago

when I try to upload the code to the d1 mini board I'm getting this error:

invalid conversion from 'const uint8_t* {aka const unsigned char*}' to 'const char*' [-fpermissive]

what should i do?


4 weeks ago

I have somehow locked myself out after changing the password and I have reloaded everthing but im still locked out. How do I get back to the default id and pw?

1 reply

Reply 4 weeks ago

Connect it to your computer with Aruduino and the Serial Monitor up (baud 115200) -- hit the reset button and watch the Serial Monitor -- you should see what it thinks the user / password is when it boots up.


Question 6 weeks ago on Step 4


I reset my Wemos and saved the password to Chrome when it prompted me. Although, the UI defaults to port 80 and it has a five digit maximum port name. It won't except my entry /dev/tty/ACM0, which is the Octopi via ethernet to my Mac. I am having trouble configuring this. Is there a Mac work around?

4 more answers

Reply 6 weeks ago

Sorry, I don't understand why you need to provide the /dev/tty/ACM0 anywhere. Everything works over valid network hostnames or IP address. The port field is numeric 5 digit unsigned 16-bit integer with a max value of 65535. Could you share a bit more? Or maybe a screenshot?


Reply 6 weeks ago

Thank you for your quick reply! Here is the screenshot from my Configuration screen. I would greatly appreciate any insight as to why it may not be configuring. I did get the Weather API working. Thank you again.

Screen Shot 2018-08-03 at 8.25.06 AM.png

Reply 6 weeks ago

Are you able to pull up the normal OctoPrint web interface with from your browser or another computer? Also, you can blank out the hostname if you know the OctoPrint IP address that works. Also, the OctoPrint password is only there if you have haproxy turned on, you should not use that unless you have the extra layer of security on OctoPrint.


Reply 5 weeks ago

1st off, THANK YOU for your time and patience with my questions. I reset everything and pulled up my octopi with the ip address in the url. The issue I am now running into is that I cannot log back into the Printer Monitor UI with the user name and password I changed it too. It maybe be due to the ip address changing (but the weather API still works). Is there a way to get around reuploading the D1mini with IDE?


Question 5 weeks ago

Hello David! I absolutely love this idea and your write-up! I have one question for you. Is there any way to build this with a larger display? Something in the 4-6" range? I would have no idea how to do that or what display to use... Thank you!


Question 7 weeks ago on Introduction


I love the project. The only issue Im having is that when I changed my password in the PrinterMonitor UI it is no longer recognized in order for me to configure the API. I used the admin/password to get into it and then I changed just the password to a simple word I use often and then I could not get back in. I even tried many different variables of the word just incase I made a mistake. Any ideas? Im afraid I'll have to reset everything and start over. Please help.