Wanhao Maker Select v2.1 Firmware Upgrade

Wanhao Maker Select v2.1 Firmware Upgrade

It has been a while since my last post, I have not been fiddling with “blinking lights” for a little while now. I got a dog and life just happens. But I have felt the itch lately and decided to jump into some shit tonight – upgrading the firmware on my Wanhao Maker Select v2.1! There are no actual guides that I have found to be able to follow to flash the firmware (for this particular make/model). All of the information is out there but it seems to be mostly on Reddit and it is scattered across a few posts. Most of what I have found links to two guides; a YouTube video of how to flash the bootloader to the Melzi board, and an Instructables on how to do the same thing. That is basically all you really need but it came off as confusing to me so I am sure it will to someone else as well.

Basically what you need to do is a 2-step process. 1) Flash a bootloader to the Melzi board, and then 2) Flash the actual firmware to the Melzi board. You WILL NEED an Arduino of some sorts, any Arduino should do. I used a Duemilanove and it worked, and that thing is old. You will also need six (6) jumper wires (male to female most likely). You need to connect the wires from the Melzi board to the Arduino so you will also need to take the control box apart. You only need access to the Melzi board to flash the bootloader. Once the bootloader is flashed you can pack it all back up. The firmware is flashed via the Melzi’s USB port. So lets get to it!

Your Arduino IDE should be up to date and you will need the Sanguino board installed as well as the U8glib library (There is a different/older version linked to in the YouTube video, 1.14).

  1. Take the control box apart, I left the Melzi board in the can, you don’t need to fully remove it, less you want to. You just need access to the pins and the LCD.
  2. Put the auto-reset jumper on if you have it removed.
  3. Change the board power selector from VREG (AC) to USB, this lets us power the Melzi from the Arduino.
  4. Unplug the LCD (it will mess up the bootloader flashing process I have read, no harm in removing it temporarily. I also had issues until I unplugged the heatbed MOSFET also).
  5. Connect the wires from the Arduino to the Melzi.
  6. Connect the Arduino to the PC/Mac.
  7. Flash the Arduino to be used as an ISP.Open the example: ArduinoISP
    I had to add a line to get the flashing process to work, this may be due to the old Duemilanove I am using.
    I had to add #define USE_OLD_STYLE_WIRINGBoard: Your Arduino type Port: Your correct Arduino port Then click upload
  8. Now flash the bootloader (after you change the board settings).Board: Sanguino Port: Your same Arduino port Programmer: Arduino as ISP Then click Tools > Burn Bootloader
  9. Remove the Arduino from the PC/Mac, and remove the wiring from the Arduino to the Melzi. The Arduino is no longer needed.
  10. Place the jumper back on VREG not USB.
  11. Plug the LCD back in.
  12. Put all your crap back together (or leave it apart to make sure it all works!).
  13. Plug AC power back in.
  14. Plug the Melzi into the PC/Mac (change the board settings again).Board: Sanguino Port: the port of the Melzi board Programmer: AVRISP mkII Flash/upload the new firmware
  15. Print something!

Thats the whole process. The part everyone leaves out is how to flash the firmware, even though it is dead simple as plugging in a USB cord it is never mentioned. Something also never mentioned is how to configure Marlin to work on the Maker Select. The default Marlin is too large to fit, some things must be removed. I have not found a guide on how to configure it and or what to configure. But I did find a pre-set Marlin configured already for the Maker Select. This is what I am using. You have a few choices as far as I know; Marlin, Repetier and TH3Ds Marlin.

Update: Something I feel I didn’t make clear was flashing/updating the firmware. Step 14 above is the flashing part. Flashing the firmware the first time (after your bootloader is installed) is the same as flashing the firmware with future updates to your printer. With the printer in normal running condition, turn on the AC power. Connect your printer with the Arduino IDE open to your printer. Maker sure the board selected is Sanguino and the port is the port of the Melzi board that appears with the programmer: AVRISP mkII. Then with Marlin.ino open (or whatever firmware you’re using) select upload (or verify first to make sure it will compile). The firmware should upload and you should be good.

I chose the Marlin firmware preconfigured for the Maker Select v2. But I ran into an issue with the LCD screen being garbled. I also believe this is just a general Marlin firmware issue with Maker Selects and not just this specific version. But no fear! I found the fix online!

You need to edit a file in Marlin.ino, specifically ultralcd_st7920_u8glib_rrd.h around line 86 add the 2 NOP, this will fix the garbled LCD:
(You only need to do this if you LCD screen is garbled after flashing Marlin!)

This is the Reddit that I kept coming across: https://www.reddit.com/r/3Dprinting/comments/8o3wg8/installing_marlin_on_maker_select_v2/
This is the video on flashing the bootloader that seems to be popular: https://www.youtube.com/watch?v=ejpSniiJejI
This is the Instructable that shows the same thing as the YouTube video: http://www.instructables.com/id/Using-an-Arduino-to-Flash-the-Melzi-Board-Wanhao-I/
This is where I found the LCD fix: https://www.reddit.com/r/3Dprinting/comments/9i0n6z/maker_select_v2_lcd_issues/

Link to Sanguino board
Link to the U8glib library
Link to the preconfigured Marlin 1.1.x for the Maker Select v2.1

Some useful Thomas Sanladerer videos I found after I did my upgrade 🙁
Configuring thermal runaway
How to setup Marlin firmware

This was how I did it on my printer, I take no responsibility for anything that may happen to yours. Try this at your own risk.

Wanhao/Monoprice Y-carriage and heatbed upgrade

Upgrade

So I made the jump and upgraded a bunch of shit. I did it for smoother bottom first layer prints (because of the glass) and hopefully no more curling issues. I upgraded to the “Anycubic Ultrabase 3D Printer Platform with Aluminum 12V/24V Dual Power MK3 Heatbed” and while I was at it I upgraded to the Gulfcoast Robotics Y-axis carriage too, as I have read it is wise to do both at the same time and the stock bed plate is usually warped from posts I come across constantly. In fact I went a step further and bought new 40mm and 80mm Noctua fans for the printer too! Happy upgrade day!

I am going to use the 40mm to replace the stock 40mm extruder cooling fan and the 80mm to replace the control box fan(s). I printed a new backplate for the printer. I dug through Thingiverse for a bit and chose one that looked like it had a following and worked well. After printing it I realized I should have maybe dug a little more, it was not easy to install. In fact I didn’t install all of the screws back on because I cannot get an allen wrench in there to do it. But it does the job, and man are those Noctua fans fucking quiet!! If it is sitting idle I cannot tell it is on, it is in my living room. I hear if you upgrade to TMC2130 drivers (with a RAMPS board) then it is this quiet while printing too. Damn!.

I decided to write this up real quick because when I searched for relative content I found shit on it. Searches for Anycubic turns up their printers, so searching for the bed/covering/plate was a pain in the ass. All I found was this. I ended up figuring it out as it’s not that hard but if i was able to read something on it first I probably would have saved my ass about 3-4 hours of head scratching.

View Post

Problems with Micro Swiss All Metal Hotend (Wanhao I3)

Micro Swiss All Metal Hotend

If you follow the blog you know I have a 3D printer, a Monoprice Maker Select v2.1 to be exact. Over the holidays I received the Micro Swiss All Metal Hotend Conversion Kit for the Wanhao I3, I got the one with the slotted cooling block, which I’ve seen recommended. The original cooling block uses a set-screw against the thermal barrier tube. The slotted block doesn’t use a set-screw instead it is slotted and you clamp the tube in place. Much better heat transfer.

I watched a few videos, read and followed all the directions, as well as I follow a few groups for 3D printing on Facebook (tons of useful info there!) and I have seen tips here and there. But I ran into problems with my install and could not find the information I needed anywhere. I even asked the groups and no useful answers really. As I said I followed all the directions and my issue came in to place with the 1.7mm of space you are supposed to leave sticking out at the top of the cooling block. I did this (a lot of videos they just eyeball it) and this turned out to be my problem.

When I first tried to assembled it all back together the custom lever plate I had printed and was using would not fit. The thermal barrier tube was sticking up too far. I use a printed lever bracket for the extruder. This bracket allows me to print flexible filament (which I have not yet). The stock plate leaves a gap that the filament can squish through, I have switched to this a while back. The bottom of the plate is flush on the custom one. The stock plate there is a rise, about 1.7mm it looks like.

I initially thought simply this plate wasn’t compatible and was going to just find another. So I installed the original plate instead. (After writing this post and searching for the links to accompany it I discovered there is a Micro Swiss version of the back plate that I was using. This will sit flush with the 1.7mm rise the instructions say to leave, but this still would not have solved my leveling or screw hitting problem.)

But that didn’t work everything was way too far away from the heat-bed. I tried to re-level but I could not get close enough. Also, the cooling fan I use was now hitting the bed screws that stick up slightly (all more reason to recess the screws!). Something was off and didn’t fit right.

At my wit’s end and feeling frustrated I took a break and left for the day. I came back later that night to hit at it again. This time I started wondering about the aluminum lever plate Micro Swiss sells and what the bottom looked like. Is it flush or does it have a rise and require the 1.7mm extra?

 

I Googled around and looked at images and it turns out the machined lever plate they sell is flush, just like my custom plate I was using. So I decided to forgo the instructions and remove the 1.7mm rise and make it flush so the plate will sit on it. Fifteen minutes later after reinstallation (for the 3rd time) and I was printing. After making the tube flush the plate now fits, my bed now levels and the cooling fan no longer hits the bed screws. So fuck the instructions, they caused me grief and didn’t work.

Not sure if this is a one-off install or if this is standard for using a flexible filament plate or the machined Micro Swiss plate.

 

TLDR; The original instructions say to leave 1.7mm of the thermal barrier tube sticking out of the cooling block. This will only work if you are using the stock extruder lever plate that came with the printer. If you are using the machined lever plate from Micro Swiss or a custom printed flexible filament plate from Thingiverse you may need to forgo the instructions and make the thermal barrier tube flush with the top of the cooling block. Read above for more details.

This may just be a one-off install YMMV.

 

Neopixel Notifier

Neopixel Notifier

I was looking for solutions to make a notifier to for various projects. I while back I made something similar with a small OLED screen but this time I wanted something more “wife friendly” so I set out. I had a few neopixel WS2812 RGB LEDs laying around and some NodeMCU ESPs. I went with a NodeMCU board for simplicity of micro USB power already onboard but you could use any ESP for this project and it should work.

So I started searching how to cobble them together and I found https://www.reddit.com/r/esp8266/comments/5f8x8t/mqtt_and_neopixels_with_the_arduino_ide/

Which led me to https://github.com/joshhodgson/ESPNeopixelMQTTDriver… which led me to here https://goo.gl/KdtWUz.

This was perfect. I took the ESP8266 and connected it via MQTT to subscribe to a topic for changing the colors of a WS2812 (neopixel). All you do is send RBGW code (255000000000 is red for example) via the topic.

The code works great, after changing the topics and such. But its not up to my liking. So here is my re-coded version. I basically made it easily editable, add all the variables to the top.

Now I can slap an ESP and the neopixel in something for notification. I just have to remember what each color means and I will let Node-Red send the changes when needed. Fucking awesome. I can use this for temperature, rain, mail delivery, change the color if someone has ever pressed the doorbell that day…its endless. Only downfall is one alert overrides the previous color (is that really a downfall?) so the alert is “over-written”. So if you are going to use it for say timing on something or modes of the day or what have you, single project use, then it should fit the bill.

I happened to have to have a 3D printer and came across a really nice model of a lamp (Bioh Lamp) that I decided would work perfect as a notifier. After I made some modifications and added NodeMCU standoffs it worked perfectly. Don’t get me wrong it took a few tries to get the spacing right and I tried a few approaches before using the NodeMCU so the older standoff for centering the WS2812 is still there. Unfortunately the author has is locked up pretty tight and used the Creative Commons – Attribution – Non-Commercial – No Derivatives license so I cannot share it.

I used an old Apple iPod USB cable and chopped it up wired it to the boards. Also repurposed an old iPhone charger to use as the power supply. Perfect!

 

Code below.

View Post

Reverse Proxy with Node Red

Node-Red SSL

To use Node-Red out in the free world it needs a chaperone, that happens to be reverse proxy at the moment. If you are starting off from the beginning I would probably recommend following this guide. That’s assuming you have an Ubuntu server and are running Node-Red from there and you don’t mind running Nginx. What if you already have a server that may or may not be Ubuntu. Maybe you don’t like Nginx or maybe you already have Apache2 running. Or what if you are running Node-Red on a Raspberry Pi? Then that guide doesn’t work necessarily.

I searched all over again (briefly) on setting up Node-Red with SSL and or reverse proxy and it seems everyone has done it but no one is willing to share steps to do it? Is it that easy that it doesn’t need to be said? I wish I had found a write up to point the way, as it is simple but not necessarily easy. Especially for the average or new RPi tinkerer.

This is how I got it working. There may be other ways, and better ways but this is what I found worked for me. YMMV.

 

Prerequisites

  • A TLD domain pointed at your server.
  • A server connected to your network running Apache2 (could be a Pi!)
  • Your server open to the world (port forwarding required)
  • Legit non-self-signed SSL certs. Let’s Encrypt is free.
  • mod_proxy installed and enabled on the Apache server, here’s a good guide (only step #1 is needed)
  • Node-Red, either on the same server or another (like a RPi) doesn’t matter (same network)
  • Don’t forget to enable Node-Red admin password protection too.

 

I am going to assume that you already own the domain and have it setup and working so that you can go to https://yourdomain.com and it pops up. HTTPS, with a green padlock. If not, you need to buy the domain and point the DNS to your servers IP and create SSL certs, port forward yada yada. I host a server at home, makes it easy. For example, example and example. Oh and here are some Let’s Encrypt examples for Nginx and Let’s Encrypt on Apache.

You will need to edit your sites-available conf files and add the stuff for reverse proxy. You need more than just Node-Reds base URL to have a reverse proxy. I found it was best/easiest (shit maybe its required I don’t know, I’m just dangerous) to add a line for each webpage I was going to use specifically. So far thats Twilio voice, sms and Amazon Alexa.

 

Here is my Ubuntu Apache2 site-available conf for reverse proxy:

 

I’ve got a reverse proxy for each call I am going to make within Node-Red when using Twilio. These need to be accessible from the free world (to Twilio or Amazon etc). If you need more pages available to the world toss em in.

For example https://mydomain.com/twiliosms is what would be available to the world now.

Restart apache and you should be good to go.

 

Securing Node-Red
https://hoast.dk/wordpress/2015/10/24/securing-node-red/
https://www.hardill.me.uk/wordpress/2015/05/11/securing-node-red/
https://nodered.org/docs/security
https://nodered.org/docs/configuration

Node-Red-Admin (to hash a password)
https://nodered.org/docs/node-red-admin

Adding SSL to Node-Red
http://industrialinternet.co.uk/node-red/adding-https-ssl-to-node-red/

Let’s Encrypt SSL Certificates
https://daplie.com/articles/lets-encrypt-on-raspberry-pi/
https://www.linode.com/docs/security/ssl/install-lets-encrypt-to-create-ssl-certificates

https://gist.github.com/jhaury/10508bfef231bc09c4eae4723645b4f0