Internet Connected Boot Dryer

Modifying a Boot Dryer to be controllable via the internet!

Public Chat
Similar projects worth following
I got a MaxxDry boot dryer for super cheap from Goodwill. It is controlled via a heater switch and timer dial, but it won't stay on all the time if the timer is not running, unlike most other boot dryers. This project will modify the MaxxDry and add an ESP32 and use MQTT to control the dryer remotely or set it to always turn on/off at a certain time of day.

This is a boot dryer controller using an ESP32! See the files for all the files you need to make this yourself. First off, a couple of warnings!

  1. The boot dryer I chose, a MaxxDry, seems to be a fire hazard if the heater is on but the fan is turned off. In the default setup with the analog front panel controls, the dryer cannot be put in a state with the heater on but the fan off. If something happens and the software fails to where the relays are in a dangerous state, it could pose a fire hazard.
  2. This project involves mains wiring. Be careful!

Now, here's a description of all the files so you can make this yourself if you so choose!

The schematic is provided as smart_boot_revd.pdf

smart_boot.csv is the BOM for all the items on the schematic.

smart_boot_esp32.ino and config.json are required for the software bit. config.json holds all the information for connecting to WiFi, an MQTT broker, etc.

flows.json is the Node Red flow setup I used.

So yeah, that's about it! Please comment or message me if you have any questions, and let me know if you build this project yourself!


Project schematic

Adobe Portable Document Format - 59.98 kB - 06/23/2019 at 18:35



The node red flows that work with MQTT to control the dryer

JavaScript Object Notation (JSON) - 25.34 kB - 06/15/2019 at 00:08


ms-excel - 567.00 bytes - 06/15/2019 at 00:04



A config.json file that needs to be put into SPIFFS for the ESP32 to read and configure everything with. Change all values to your relevant information.

JavaScript Object Notation (JSON) - 286.00 bytes - 06/14/2019 at 23:58



The Arduino code for the ESP32

- 16.11 kB - 06/14/2019 at 23:58


  • 1 × MaxxDry Boot Dryer Can also use any boot dryer with a fan and heater
  • 1 × All items in BOM file (smart_boot.csv)

  • Officially complete!

    skelly06/23/2019 at 18:33 0 comments

    The project is now officially completed!

    I got the new PCB's which solve the AC isolation problem and everything is working perfectly now!

    The ESP32 is no longer being affected by the fan, everything is working just as designed.

    I'm really excited, and will make sure everything is up to date so you can make this yourself if you want!

  • Some Changes Coming

    skelly06/16/2019 at 04:14 0 comments

    So after discovering the horrible AC isolation problems, I've redesigned the thing slightly and ordered new PCB's. I'll update when they arrive and I've had a chance to test them out!

  • In Which I Learn the Importance of AC Isolation

    skelly06/15/2019 at 16:47 0 comments

    So this could very well be why the board is flipping out sometimes when I turn on the fan.

    This is present on all IO pins, all over the board, everywhere, all the time. Whoops.

  • It Werks!

    skelly06/14/2019 at 23:35 0 comments

    So turns out, I made a big mistake.

    I didn't realize that RX goes to TX and TX goes to RX, not RX to RX and TX to TX. I was misreading some schematics and was very confused.

    But it works!

    However, the relay footprints still need fixing (I just bodged it for now), it needs better AC isolation design/fusing, and I'm still not sure why it occasionally browns out. I'm using an 800mA 3.3V regulator and it's drawing, at most, 120mA. Maybe I need bigger capacitors on the power rails. 

    I've discovered something about this heater - the heater itself is never meant to be on without the fan. If air is not being forced over the heater, it gets incredibly hot and starts to glow and smoke slightly. That's a problem if the fan fails, for sure. I've added code to ensure that the heater is never on without the fan, but still.

    I'm going to be testing it for a while to ensure that it doesn't become a fire hazard.

    There are a few worries with this thing:

    Like I said, I haven't figured out why the 3.3V sometimes drops out, and it can occasionally get into a state where it keeps browning out forever and never comes back up. This could result in a state where the heater is on and the fan is not, which is a hazard.

    So yeah, it works! Over the coming hours/days I'll be uploading everything that you would need to recreate this project, along with lots of warnings about possible safety hazards!

  • New boards! They don't work!

    skelly06/14/2019 at 01:02 0 comments


    got new boards that don't work

    1. Switch footprints are wrong. The two pins the switch contacts are wired to be across are actually common with each other.
    2. The relay footprints are wrong. The way it's wired has the switch where the coil is and vice versa. My fuckup on the schematic symbol.
    3. After bodging the relay problem, the 3.3V regulator drops out for some reason, only giving like 2V
    4. Also the auto-reset circuitry doesn't work.

    Time to test and redesign, wheeeee

  • An incredibly weird issue with ESP32 SSL

    skelly06/09/2019 at 05:03 1 comment

    I write this in the hopes that if anyone else has this problem, they might stumble upon this post (or the StackOverflow question I made, or the GitHub issue I created...) to help them since it's so bizarre and incredibly hard to tell what the problem is.

    My situation is as such: I have my Mosquitto instance secured with a LetsEncrypt certificate. I want to connect my ESP32 to this instance, so I need the CA root certificate to send along using `WiFiSecureClient`. There are two options.

    1. Hardcode the certificate into the microcontroller code.
    2. Use SPIFFS to put the certificate file on the ESP32 and load it dynamically.

    I had done the first route successfully, but I really dislike hardcoding things, so I wanted to do the latter.

    This ended up being much more difficult than I assumed it would be.

    My original code was as such:

    if(!SPIFFS.begin(true)) {
      Serial.println("Error mounting SPIFFS.");
    File file ="/root.cer");
    if(!file) {
      Serial.println("Error opening the file.");
    String ca_cert = file.readString();
    Serial.println("CA Root certificate: ");

    Seems simple enough.


    It didn't work.

    I performed every check in the book to see if the hardcoded certificate and the one loaded as a file were the same thing, and they were. Every single equality test I could think of returned that they were, in fact, the exact same string.

    However, there's one little note in the Arduino documentation for .c_str():

    Note that this gives direct access to the internal String buffer and should be used with care.

    Now normally "used with care" applies to situations where you are modifying this string buffer, or trying to use it after the string has been destroyed, etc. Apparently this warning applies to this case as well.

    For some reason, using the following code fixed things:

    char *dest;
    dest = (char *)malloc(sizeof(char) * (ca_cert.length()+1));
    strcpy(dest, ca_cert.c_str());

     I have no idea why this works, unless for some reason setCACert tries to modify the pointer it's provided.

    But hey, it works. And I can finally stop ripping my hair out over this.

  • Schematic Revision C

    skelly06/08/2019 at 14:48 0 comments

    So, some changes had to be made since the first PCB didn't work. The problems were:

    • The programming didn't function at all. I wasn't able to program the board using the serial connector with only RX/TX (and maybe because it was an FTDI chipset, not the CP2102). 
    • The relay footprints were totally wrong, I got them from DigiKey and reported the issue, they corrected it and sent me updated footprints.

    The changes I made were:

    • Use a fully-enclosed AC/DC converter I ordered from eBay. This doesn't require any external circuitry unlike the module I had previously purchased.
    • Add auto-reset circuitry.
    • Change the programming connector to accept the extra serial pins to provide reset signals.
    • Add LED's that were part of the original, but that I left off of the circuit I had manufactured. These LEDs will be external to the board so they are realized using 2-pin connectors.

    Check out the Rev C schematic file to see the new and improved design! I've ordered PCB's and hopefully they'll work.

    Once I have completely-working PCB's, I'll be providing Gerber/CAD files for them.

  • PCB Progress!

    skelly06/05/2019 at 23:31 0 comments

    So, I have the PCB's all done and assembled and... they don't work.

    Read more »

  • Node Red Complete!

    skelly05/29/2019 at 00:58 0 comments

    So, implementing the Node Red flows for this project is completed! See the flows.json file for importing them yourself. Here's the dashboard!

    Keep reading for how it's all done...

    Read more »

  • Important Note Regarding This Project & Mains

    skelly05/27/2019 at 23:33 0 comments

    This project has a (120V) mains input on it. This PCB was also designed with very little mains isolation. If you decide to construct this PCB yourself, be INCREDIBLY CAREFUL. The PCB could be incredibly dangerous if hooked up to mains and you don't know what you're doing.

    Be warned.

View all 12 project logs

Enjoy this project?



Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates