3D Printer Monitor for OctoPrint Wemos D1 ESP8266

by Qrome Apr 29, 2018
Download All Files

Thing Apps Enabled

Please Login to Comment

Great instructions and very easy make. Thank you!

Great idea!!! But one small question: Is it possible to change the language for the weather forecast on the oled display? It only changes on the web interface so far...

Thanks for the answer.

Even if you specify the language on the data service call for the weather -- they still only send back the weather condition in English. It would require a file translation in the project -- you would have to know all the possible weather conditions. Sorry.

Ok, thanks. Maybe I'll try it...
Edit: I found this guy https://www.thingiverse.com/thing:3755795 who made a translation (in this case to german) for all texts, so you can change it to any other language

Portable 3D Printer Monitor for OctoPrint
by NeoRame

I can not get this to work... I have tried different D1 mini boards and both sizes of the OLEDs. I followed the video tutorial to the t. I would love to get this working its such a great idea. Any input is welcome if anyone had luck with this one I would be willing to pay ($25) someone that can just do the board and the larger OLED, I have a case already printed.

@Lamon_J -- how close have you gotten? Does it compile?
I would be happy to help you load up a board... no charge, if you want to pay for shipping. Send me a private message here and I can help you out.

First, great idea!
I no longer use OctoPrint and wanted to ask if the display is also compatible with a Repetier server?
(Unfortunately, my English is very bad, so translated with Google Translate.)
Thanks a lot!

Yes, the branch for V3.0 will compile for Repetier server. View the Readme.md and the Settings.h file. The branch is here:

Thanks a lot!
I will then install and test it!
Would be very nice if that works.

Comments deleted.

Oops! i thought I was looking at the NodeMCU Remix! LOL

I just put this together and it worked right the first time! I updated to the latest software version from your GitHub and the current Arduino libraries (unlike the versions shown in the video), and followed the instructions to configure it in the video. Thanks for a great little project.

Thank you for sharing your experience. Yes, the latest version should handle the latest library versions. Thanks for the update.

I followed the setup instructions exactly and the screen would not light up for me. Here is what I did to get it working. I'm only noting deviations from the instructions, the rest of the instructions were spot on.

When soldering the wires do not follow the diagram. Solder the SDA pin from the monitor to D2 on the Wemos board and the SCL pin to D1.

When installing the esp8266 board in Boards manager do not install the latest one. Version 2.4.1 worked just fine for me, version 2.5.0 wouldn't work at all. When you choose your board choose WeMos D1 R2 & Mini. When installing the additional libraries I just installed all the latest ones and don't seem to have any issues there.

In Arduino IDE go to the Settings.h tab (It's probably the one you're in already), hit control+f on your keyboard and search for SDA_PIN. Now change the line so it says "const int SDA_PIN = D2;" (no quotes) and change the line below it it to "const int SCL_PIN = D1;" (no quotes) to tell the software to look at the new pins.

You should now be able to continue on with the project and hopefully everything works for you.

Thanks for sharing your experience, however, I have to say that it is NOT the norm and there are 1000's installing and running it with The ESP8266 2.5.0 core as well as using the pins that are included in the instructions. It has been my experience that people that have had issues with display have one or more libraries installed that are old. There will soon be changes to the code that will require ESP8266 core.
Glad you got it working.

I'm not really sure why I was having issues. I followed the video to the letter with the only change being I installed all the latest libraries and the the latest ESP8266 from the get go. This is a new PC so it was a new install of IDE, and the only libraries, etc are the ones for this so I'm not sure about anything being old.

Maybe I'll go through it one more time with the stock instructions and see if I can make it go.

I do love this thing already too! Great job on it.

OK, I think I figured out the issue. For my install of Arduino IDE the ESP8266 version 2.4.1 came with flash size set for "4M (1M SPIFFS)" by default. Version 2.5.0 defaulted to "4M (no SPIFFS)" so I changed that, rewired the pins to match your drawing, changed my Setting.h file back to stock and BINGO!

I probably would have left it the way I had it before but since you said there are changes coming that will require 2.5.0 I figured I better try to figure it out. Now I can't wait to see what those changes are.

Again, great project, thanks for responding and prompting me to get it working properly.

Does anyone have a remix that slightly bigger where the screen slides in? My screen seems to hit the inside vent walls on the sides. I'm not sure if perhaps i have a slightly different screen, but the screen is like 2mm or so too big to fit side to side.

Can you help me ? Im using nodemcu v2 and when i upload the code, the lcd dont turn on and the serial monitor say this all time:

Settings File does not yet exists.
File open failed!
Settings File does not yet exists.
File open failed!
Settings File does not yet exists.
Exception (9):
epc1=0x40227126 epc2=0x00000000 epc3=0x00000000 excvaddr=0x40101f16 depc=0x00000000


ctx: sys
sp: 3fff28a0 end: 3fffffb0 offset: 01a0
3fff2a40: 3ffe8dab 00000000 00000000 4022712d

Please post coding questions over on GitHub where the code is hosted.

Make sure you compile with 1M SPIFFS enabled -- the application uses SPIFFS to store the settings.

Thank you !!!

This is great, thanks for your work.

I posted it on another forum and a question came up, does it beep?

This is actually useful, a cheap buzzer shield and print finished sounds, failure sounds. thermal runaway continuous beeping etc

I might be able to handle a TinkerCad file if you are able to post that. Thanks.

The STL files are the output files of TinkerCad -- sorry there isn't any other file for you to work with. You can import the STL into TinkerCad and work from there.

Any chance you could post a step file or the original cad file for the enclosure? I'd like to make a version of this for a simple display using the same oled and it would save me tons of time. Thanks !

Sorry, there isn't a step file. This was created in TinkerCad.

I'm struggeling to make the OLED work. Everything else works fine.

I use the Wemos D1 Mini and a 0.96" OLED (https://www.ebay.de/itm/0-96-OLED-Display-Weis-I2C-SDD1306-128x64-Modul-Arduino-Raspberry-Pi/162465864403?hash=item25d3b85ad3:g:prsAAOSwCtNbv1n1:rk:2:pf:0).

SDA is connected to D2
SCL is connected to D1
With the I2C Scanner I identified the 0x3c as the I2C address.

Unfortunately the OLED Screen does nothing. As a power supply I also tried a phone charger.

Can anyone help me? Point me to a direction where I can try something else?

Either try wiring it like it shows in the README.md file or update the Settings.h file to the SDA and SCL pins you set it up for.
I would expect it to work then.

I tried both without any luck :(.

SCL is meant to be connected to D5, its the clock from what i understand. I had the similar problem, but i was connected to D5 for the clock, and i got very confused while fault finding as the pin-out diagram for the board sais that SCL is on pin D1.

My problem was that i was using the latest Board Library, i dropped it back to the same version that's used in the video tutorial and everything worked.

Thanks for the update. As far as I know, I am using the latest version for the board and it works for me there as well. Thanks.

Hello, I can not log in to the web UI after the first start. I did it step by step as Chris Riley showed it in his video. I am connected to the network, the display also works.

Username: admin
password: password

will not be accepted.

I hope you can help me

Connect to the wemos with the Arduino IDE and open the Port Monitor while it is booting up. It will display what it thinks the user / password is. Also, make sure your browser has not stored the user / password incorrectly and is pushing the wrong values.

Comments deleted.

first off, what helped me succed was to momentarily connect D3 to ground, took me a while to figure out.

second, how about making it able to connect to several network, and automatically detect and switch between them, would be cool to have it as a portable unit to bring around and, maybe like a pocket watch thing, im going to design something like that nomatter what, have no idea how to code though, so maybe you or someone would find the idea interesting :D

really awesome project! love, just ordered a additional set of D1's and screens!

Sorry, you are asking for Arduino help on the wrong project. From your screenshot I can see it isn't even this project you are working on.
Also, this can be solved if you simply go and change the type where the font is defined.

What a great design, thank you for sharing the 3d model and the software.
It took me a while to get things working, I hope this reply can help others.
Looking at the pin layout, the OLED has a SCK connected to SCL (D5). To my understanding I2C only uses SDA and SCL. On my wemos (v3) the pint layout is as follows
SCL = D1 (5)
SDA = D2 (4)
How I did it: display(0x3c, 4, 5); //display(I2C address, SDA, SCL)

Now the screen works perfectly

what mean D1 (5 ) ? it's D1 or D5 ?

On Settings.h


this is the default settings. i also have an old v3.0.0, i can upload program on board but the screen doesn't work.

You can change the pins to match what you have. Don't use D4 -- it is tied to the internal LED.

Will this fit a D1 with battery shield attached? Would be nice to make it portable

Is there enough room to fit the battery shield? I would like to be able to run this thing completely wirelessly

It could be modified to fit the Wemos battery shield. I know lots of people have used a non wemos (small) battery shield without problems.

Hi my dear

Thank you for such a WONDERFUL project.
I have encountered a small flaw at the enclosure, the rail were the wemos slides on the left side touches the reset button and sometimes you can not turn on the esp with that button pre pressed. I solved it just sanding a small portion of that entrance and now it slides all the way through without touching anything. I hope is useful. Agan THANK YOU!!!

i am still getting json error while compiling:
All libraries installed, json is the version you wrote (5.13.0), no idea what i am doing wrong :(

OctoPrintClient.cpp:128: error: 'jsonBuffer' was not declared in this scope

JsonObject& root = jsonBuffer.parseObject(printClient);

Would you please help somehow ?

That is the error that comes when using the Beta version of ArduinoJson (6.X) -- make sure there isn't something isn't being pulled in or that you really have the 6.X removed from the library.
You need to use the correct version of ArduinoJson -- don't use the Beta version as it has breaking changes in it. This is from the Readme.md file.

ArduinoJson.h --> https://github.com/bblanchon/ArduinoJson (Version 5.13.X)

That fixed my issue, thanks!

Ohh, you know where the problem was ?
I had multiple ArduinoJson.h libraries on multiple places, and it just decided it will use the newest one :(
As i am Arduino is completely new to me, i looked from where the library is loaded and just overwrote them with v 5.13.1

Complied successfully!

OH, that is great. Glad you got it all working.

Thank you for such an awesome project. I have set up several of these to monitor multiple printers using Astroprint. Working beautifully. I wonder whether it is possible to have the scrolling displays show an extra screen with the printer name so when I have several of them I can see at a glance which is which printer.

Thank you.

Neil, thanks for the comments. Glad you are enjoying the project. I will look into adding an additional screen to display the Printer Hostname. Maybe add it as an option. Thanks.

Fantastic. Thank you.

This is a great project and I use it very often but I’m wondering if it would be difficult to alter the script so I can make a dedicated clock and weather station? I’m not very skilled with the programming side

It's perfect. Thank you very much!

To the design I had to enlarge the size by 2 mm because I did not get the plate with the screen.

Thanks for your job!

Many thanks

The project is very nice and I have successfully completed it.
I asked if it was possible to insert a small buzzer that warns a few minutes before the end of the print.

I printed it out. It looks good but the side vents are very weak, like supports. They started breaking within a few seconds of handling it. Also, as a personal preference, I would put screw holes to hold the screen in. I don't like using glue.

Would a wemos mini lite work? Not that the regular mini is expensive but a friend has a couple mini lites hanging around and I'm hoping I can just "borrow" one of those.

I don't know. It would be interesting to find out. My I don't know if they have enough memory, but it would be cool to find out.

What is the optional top button for and where does it get wired to?

Jeff, I use this box for a few projects and shared that version for makers that may want to use it. As for the Printer Monitor application, it is not used.

This is AWESOME! You should add a "Donate" button in the github readme. Without sounding harsh, I wouldn't "tip" for this design - as simple cases are easy and I must have made myself loads dependant on my needs, BUT, the code itself, that's where the genius is in this little project IMHO. It's awesome.... I have some Wemos kicking around and even had the screen already - although I have just ordered a blue/yellow screen just because I like how it looks in one of the pics. Really nice work

Thanks! The code is where all the time is spent. :)

Add a PayPal Donate link to the readme.md in github and I send money for a beer as they say. Does using "Tip Designer" deduct a % or anything? Or would you get the exact same amount as if someone were to donate manually via a direct link?

Thanks, I just added it to the README.md file https://github.com/Qrome/printer-monitor -- near the bottom.
The Tip Designer on thingiverse is a little odd... they do take a small percentage, and that is fine, but they hold on to it for a month or more before they put it into your Paypal account.

Sorry for the delay in a response .... thanks for adding a donate link on github. It's not much, but I've just donated $10.00. Amazing work on the code

Thanks for the kind words and donation!

I have the wemos d1 mini V3. The board might me a bit smaller than the one you use and does not stay in place. :(

I keep getting this error message. Anyone know a fix?
Arduino: 1.8.5 (Windows 10), Board: "WeMos D1 R2 & mini, 80 MHz, 4M (1M SPIFFS), v2 Lower Memory, Disabled, None, Only Sketch, 921600"

C:\Users\kylem\OneDrive\Desktop\printermonitor\printermonitor.ino:28:22: fatal error: Settings.h: No such file or directory

include "Settings.h"


compilation terminated.

exit status 1
Error compiling for board WeMos D1 R2 & mini.

This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.

Please post issues with code on the github -- where the code is.
Make sure you have all the code including the Settings.h file in that printermonitor directory. My guess is you only have the ino file in there.

All the files you see in this image should be in the code directory printermonitor:

What's the difference between the 3 screens?
And you only buy one right?
And is there a specific type of cord I'll need?
Thanks :)

You only need one screen. It just needs to be the I2C serial. There are different colored screens so you have options. You only need 4 wires to solder it up. You can watch the video here and that might answer your questions. https://youtu.be/Rm-l1FSuJpI

David, great design!

About your double station, does it need two Wemos D1 Mini or just one to drive the two screens? When not printing, do they display the same info?



Run the 5v+ line over to the other 5V+ pin so they share the same power. Do the same for ground. That way both boards are powered from the same USB.

They each have their own IP and own configuration. Each one has their own Wemos D1 mini. They can share power. You can have one go to sleep if you want when not printing or what ever you want. The latest software also can display the weather.

trying to set up a double now. How would you share the power to run both mini's off of one usb?

Sorry, my reply was above. Basically run the 5V power and Ground from one board to the other -- they can share the same power.

Thanks so much!

I'd like to make this for my nightstand to monitor prints that are running overnight. It would be great if the display could dim when the lights are off. Is there a way to wire in a photo sensor that could dim the display?

Also, one of the images shows a button on the top of the case wired to the board. What function does that serve?

I use the station box for several projects. On some of them I have a button on top. For the Printer Monitor it is not currently needed. There are several different models included and only one of them have the button on top.

Dude if you could make this display weather and time while you are not printing that would be awesome. It would be perfect for sitting on your desk so its not blank when you arent printing. Or make it have an alarm clock with a button on the top so that you could have it on your nightstand. So many options. I am eagerly awaiting the weather that you show in your one picture. Awesome work!

I entered my WiFi Network wrong (didn't realize network name was case sensitive) on the initial web interface and saved it, and now I can't connect to the Wemos anymore and access the IP though web browser. How can I fix this?

If the device cannot find a network to connect with it should go back into AP configuration mode. What do you see on the screen when you turn it on? Does it say connect to AP OctMon-xyz? What version of the code are you running?
Can you connect it up to your computer and with the Arduion IDE run the Serial Monitor tool on port 115200 -- this will display all the debug information as to what is going on.

Comments deleted.

When I plug in it first says "Printer Monitor by Qrome V1.7" and then goes to the "Please connect to AP OctMon-xxxx to set up WiFi connection" When I attempt to connect to the WiFi network from the Wemos board, the wifi will keep dropping out and never let me get to the IP address via web browser. When I try and use the Serial Monitor tool in Arduino IDE, I can't see any info. I'm not sure what command to enter. Sorry for the n00b questions.

Also, I am showing COM 15 in device manager and thats the COM I'm using in IDE as well as the 115200 baud rate.

If you are using your phone to connect to the AP -- go into your networks and select "Forget Network" -- so that it will act as if it is the firs time connecting. Or try connecting to it with a device that has never connected with it.
For the serial monitor to to work it has to be already plugged in and set to 115200 for it to work. You could also initialize the serial connection by compiling and loading the firmware again on it over com port 15. Have the Port Monitor on during that time.

It sounds like it is going into AP mode as it should it is just your device that you are trying to connect to it with.

I was using a PC, but also tried a Mac and iPhone. It's the same on all devices where it will say something like the site can't be reached 192.168.4.x took too long to respond.

I did notice on the Serial Monitor when I was trying to connect with my phone just now this message came up:
WM: Request redirected to captive portal
WM: Handle root

I have another board coming tomorrow b/c I wanted to make the big brother of this version so I will see if I run into same issue.

Once you have connected to the AP point pull open one of the browsers and put this IP in manually:
This should pull up the WifiManager page manually if you are connected to the AP. I typically use the top option and have it scan for visible networks -- then you don't have to type the network name in.

Sometimes on phones it detects that there isn't internet access so they sometimes will quickly jump back to the other known network. You can try temporarily turning off the data service on your cell phone and try and connect manually to the AP with the IP specified above.

I'm wondering now if the wifi module in the wemos is going bad. Most of the time I can't get my laptops or phone to even see the OctoMon-xxxxaf wifi network anymore. I had the thought that maybe the board was bad when it arrived in a box underneath a full roll of pla with no cushion. eek

So I went home for lunch and tried everything from square 1, this time using a Mac instead of PC. It failed to connect a few times, then suddenly worked. It's running as expected now. Probably just user error. Thanks for all you help Qrome.

Also, I was looking at some of your other designs and you must fly FPV too! Def gonna print your wall quad hanger :)

Yes that's how I had it installed but the antenna + pcb is thicker than the cutout you have. Thanks

Great project! I got mine up and running right away. One thing if you could make a revision to enlarge the cutout for the wifi antenna in the bottom of the case( 1 mm more). My revision of the board must be a little taller and longer as it hits and does not fully seat.

Thanks, I designed the box to have the LED with the wifi chip on the top so that the light would come through.

Awesome project - just printing mine. I found it useful to replace "AM/PM" with initials of printers as I use 24h format anyway. Handy when have multiple printers.... would be great to have that feature also in web-interface not to have to hardcode it for each. :)

Thanks. I think a way to name and identify the printer is a good idea. I use the AM/PM so I don't know if I want to replace that but maybe there is another way. I will think about it a bit.

How can I show the weather and temperature? thanks

I use this configuration and box for a few different projects. The 3D Printer Monitor does not currently display weather.

That's ok, it would be awesome if you'll add weather and temperature informations when printer is offline instead of only current time. Thanks for your great job!

i keep getting error

Arduino: 1.6.8 (Windows 10), Board: "WeMos D1 R2 & mini, 80 MHz, 4M (1M SPIFFS), v2 Prebuilt (MSS=536), Disabled, None, 921600"

WARNING: Spurious .github folder in 'ArduinoJson' library
WARNING: Spurious .github folder in 'WiFiManager' library

'readSettings' was not declared in this scope

Make sure you have installed the supporting library files mentioned in the README.md file.

Does not work for me.

no matching function for call to 'base64::encode(String&, bool)'

is the error i get in arduino 1.8.4

and where do i get:

Base64 encoding is part of the ESP8266 core -- you need to update your library.
The OLEDDisplayUi.h is part of the library for the esp8266-oled-ssd1306 library and the link is in the readme file. Here it is again: https://github.com/ThingPulse/esp8266-oled-ssd1306

Where do we add the user credentials for Octoprint? I'm getting a HTTP/1.0 401 Unauthorized response.

Version 1.5 has been released and supports Basic Auth for those that are using additional authentication to the OctoPrint server.

Great, thanks!

Currently, it does not support the Basic Auth to the OctoPrint server. It uses the APIKey.

I will add it to the list. It isn't impossible to do but will have to implement it and test it. The authentication credentials would be sent in every REST api call to your OctoPrint server -- those are usually plain text as well.

So accessing using user credentials via HAProxy will not work? https://printoid.net/access-octoprint-from-the-internet/

What size screws are needed to attach the LCD and the rear panel?

The whole is 2mm but after printing is probably smaller. I use simple 8 - 10 mm long self tapping 2mm screws. Most any small screw will tap it.

Would it be possible to amend you guide on GitHub to explain the install a little more? I follow everything up until where you list the packages. How do I get those and your project onto the board?

Sorry, but I'm super green with Arduino.

rwwills, sorry, that area of the install assumes a little. I just did a search for "arduino how to install a library" on google and YouTube and there are a ton of simple examples on this topic. If you want to watch it on a video there are lots of them. Here is a link directly to Arduino examples with images that I think is quite good. Basically, the Arduino IDE will give you an error stating it can't find the library for something.h and you can then search it through the Library Manager or on the web to find the library. https://www.arduino.cc/en/Guide/Libraries

So I got all of the libraries. But is there anything I need to put under the loop area? I've attached what I've got in there so far. I'm trying to figure out if I've got an issue with hardware or software since I cant get anything on the screen now. I feel like I need something down in the loop.

Wow, not sure what you are doing. Are you writing your own version? Have you downloaded the Printer Monitor software from GitHub? The only thing you need to do is edit the Settings.h file from the download.

Click on the green button for "Clone or Download" -- then download the project as a zip file. Extract it to a folder on your computer then open the printermonitor.ino -- all the code is there and if you have the supporting library files downloaded it should compile.

Wow. No I was just working way too hard. Your readme says to include those resources and so I was adding the includes. I didn't realize I just needed to open the ino file. haha

Ok, cool, let me know how it goes.

Does this have to be on the local network to the Octoprint instance or can I access my Octoprint remotely if already using DNS?

It needs to be able to use a network connection to your OctoPrint server. You can do it remote if you setup your router and port forwarding. If you can access your OctoPrint server remotely, then yes, it will work.


I've got the electronics all but working - the web UI is saying "Error: Response: HTTP/1.0 401 Unauthorized" but I have given it the API key for my OctoPrint.
any advice?


I have updated the latest version to support the Basic Auth -- you can now add the OctoPrint user/password to the Settings.h or just update it via the web interface. It has been added to version 1.5.

The default user and password for the web UI is admin / password. 401 is saying you didn't provide the credentials.

I can log into the Web UI, but the monitor isn't detecting my Octoprint despite having the API Key.
All I can see for a user and pass when opening Config is to change the monitors' webui credentials, not to give it octoprint credentials?

Make sure you use the IP address for the octoprint server in the configuration page -- I have seen it not able to resolve names.

No the credentials are for the web UI. The only thing needed for OctoPrint is the Apikey.

I've given it the API key, and tried a refreshed API key too, it's giving me this and the screen stays in Offline mode?

Ah, it looks like you are using additional authentication on your OctoPrint server. That response you see there is telling you that the request to the OctoPrint server is not authorized. When you pull up your OctoPrint web interface are you always prompted for your user / password to use it?

I am! It wasn't always that way though, I used to be able to pull it up without that additional log in prompted by the browser, I only had to log in (using the actual interface's log in box) to control the machine.
Is there an easy way to remove that additional layer of authentication?

Show off your printer and prints and get help with your printer!

Good work,i'll try it for AstroPrint.

Is it possible to show data from Plugins like the Temperature meassured/published by the Enclosure Plugin for example?

Try this, turn on your printer and make sure OctoPrint is connected so it says "Opperational" -- then from your browser form the following URL and replace the items needed. The response will give you the known sensor data from your printer.


Replace [YOUR_API_KEY] with your api key.
Replace [OCTOPRINT_IP_ADDRESS] with the address to your OctoPrint server (you may also need to add the port if it isn't the default 80).

Hitting that URL will give you the data. Look at tool0 and tool1 -- see if those values look right for your enclosure and nozzle. If so, then it could be modified to display that as well.

If the temperature sensor is reporting on the normal REST API call (and it probably is) -- then yes. Right now tool0 is the temp of the extruder nozzle and tool1 would probably be the enclosure temperature. The code could be updated to display tool1 temp. Here are the details on the REST api call that the 3D Printer Monitor is making: http://docs.octoprint.org/en/master/api/printer.html

Seems like it doesn't report to the API :(
I'll ask the developer of the Enclosure Plugin.

Would be great if you could add an option für the 24h clock format.

Ok, I added the 24 hour clock as an option. It is in the version 1.3 here: https://github.com/Qrome/printer-monitor

Amazing! Thank you!

I will add the 24h clock format in the next update. Thanks.

Can you please tell me if it wants any changes because I bougt a screen that has 2 extra pins a RES pin and a DC pin and it doesnt work

Correct, the instructions tell you to use an I2C style display -- this is what the code was written for. You can probably update the code on your own to use the SPI Seirial, but it will not be part of this project. Sorry.

Is it difficult ? I dont know too much

If you are new to the coding then it could take some time. If you have the "Adafruit SSD1306" library installed in the Arduio IDE then you should see some coding examples under File -> Examples -> Adafruit SSD1306 -> ssd1306_128x64_spi -- this is the SPI example. I would start there. Good luck.

It also works for Astro Print with out any changes!!!

That is very interesting. That tells me they have duplicated the REST API that OctoPrint uses. I went over the AstroPrints site to get their documentation -- but they require a special approved developer account. I filled out the form. We will see. So you have confirmed this? That is cool.

I am pretty sure that Astro print is a spin off of Octo Print. It worked when I played with it. I just changed 1 setting. I told it to not change the API on reboot. The print port was the same as octo print. Personally I prefer astro print other than the fact that you can't install it on top of an Raspbian image easy.

I was able to get hold of one of the developers from AstroPrint -- they are not going to share any documentation on the REST API however he shared that it is probably the same since they branched their code off OctoPrint almost 4 years ago. So... this is why it probably works. It is probably still using the same REST API that OctoPrint is using. Thanks for the update.

How do I add the weather to the 3d printer monitor?

Sorry, some of the screenshots show some of my other projects that I have not shared yet that work with the same station. Currently I have only shared the 3D printer monitor.

I have a question.
What can i do with the button? I can't find it in the source code.

I use this station box for multiple projects. The 3D Printer Monitor, at this point, doesn't use the button.