ESP8266 Temperature Controlled Relay





Introduction: ESP8266 Temperature Controlled Relay

A friend of mine is a scientist who does experiments that are very sensitive to air temperature and humidity. The incubator room has a small ceramic heater but the heater's thermostat was not nearly accurate enough, only able to maintain the temperature within 10-15 degrees.

Commercial devices that log temperature and humidity can be quite expensive, and getting the data from the device can be difficult. Plus, they can't control the temperature, only log the data. He asked how hard would it be to build a device that could accurately control the heater through a relay while logging the temperature and humidity. Sounded easy enough.

Grabbing an ESP8266, relay, DHT22, and some online IoT platform, we're off.

Step 1: Supplies

This project uses a handful of supplies, all of which are pretty common and you may already have them on-hand today. Here is a full list of what I used, feel free to adjust as needed to meet your project needs.

    In retrospect, using a NodeMCU instead of the ESP-01 would have made a lot more sense. I didn't have one at the time so I made do with what I had.

    Step 2: Outlet Construction

    While I technically started with the microcontroller and code, it makes sense to start with the AC outlet first. For this project, I used a single gang box, a standard 2-plug outlet, and the power cord from an old power strip.

    The electrical socket gets wired up with the two white wires joined together and the two ground wires joined together. The two black wires going through the high-side of the relay. Make sure you get the terminals screwed down well and none of the strands are going to short out, I put a little solder on the wires so that the stands stayed together.

    Be careful with the high-voltage and double check each connection. It is a good idea to put electrical tape on your wire lungs so they don't wiggle loose.

    Step 3: Curciut Design

    The circuit is pretty straightforward but if you use the ESP-01 like I did, you will need to add a voltage regulator to get a 3.3V. Standard relays do require 5V so you'll need a 3.3V and 5.0V rail.

    My circuit used an LM317 voltage regulator with a set of resistors to get a constant 3.3V rail, I tapped the USB 5V to power the relay. There are 3.3V relays but not for high-current relays needed if you are going to power a small space heater.

    The DHT22 requires a 4.7k pull-up resistor.

    Step 4: Solder the Board

    Layout and solder all of the components. This can be a bit tricky but pre-plan the traces with a piece of graph paper will help.

    I used a USB board for a power plug but it was a pretty weak and replaced it with two header pins instead. I used two female headers on the board and soldered two male-header pin directly to an old USB plug. This proved to be more reliable and solid. The USB wiring colors are:

    Black --> Ground
    Red --> 5V

    I also used male headers to expose the DHT-22 and Relay pins on my perfboard to connect them with standard jumper wires.

    Make sure you label each pin, power and ground connector in case it gets unplugged later.

    Step 5: Mount the Circuit Board

    On the side of the gang box, mount the circuit board with screws and/or hot-glue. Make sure the placement is made so that the jumper wires reach around to your relay mounted inside of the box and you can easily plug in your power connector.

    Add a jumper wire with heat shrink to your DHT-22 sensor with the appropriate length for your situation. Mine was about 8 inches long. I used some CAT5 cable instead so that the leads could be slightly bent into position and would be free-standing.

    Step 6: Arudino Code

    The Arduino code uses my SensorBase class, which is available on my Github page. You do not need to use my SensorBase code, you can write directly to the MQTT server and Thingspeak.

    This project features three key software features:

    1. A local webserver to set and view values
    2. Remote MQTT server to send and store data
    3. Thingspeak dashboard for graphing data

    You can use one or more of these features, just adjust the code as necessary. This is the specific set of code I used, you will need to adjust passwords and API keys.

    Step 7: Thingspeak Dashboard

    Setup a free Thingspeak account and define a new dashboard. You will need to use the same order of the items as I have listed below, the names don't matter but the order does.

    If you do want to add or remove items, just adjust the Thingspeak parameters in the Arduino code, it is pretty straight-forward and well documented on their website.

    Step 8: CloudMQTT Setup

    Any MQTT service, or similar IOT service like Blynk, would work but I choose to use CloudMQTT for this project. I have used CloudeMQTT for many projects in the past and since this project will be handed over to a friend, it makes sense to create a new account that can also be transferred.

    Create a CloudMQTT account and then create a new "instance", choose the "Cute Cat" size since we are only using it for control, no logging. CloudMQTT will provide you with a server name, username, password, and port number. (Note that the port number is not the standard MQTT port). Transfer all of these values into your ESP8266 code in the corresponding locations, making sure that the case is correct. (seriously, just copy/paste the values)

    You can use the "Websocket UI" panel on CloudMQTT to see your device's connections, button pushes, and, in the odd scenario that you get an error, an error message.

    You WILL need these settings when configuring the Android MQTT client as well, so note the values if you need to. Hopefully, your password is not too complicated to type in on your phone, you cannot set that in CloudMQTT.

    Step 9: Final Testing

    Now we just need to test the final device.

    Before you test anything, double check EACH wire and use your multimeter in continuity mode to trace all wires. Make sure everything is connected to where you think it is connected. Because the relay is isolating the high-voltage from the low-voltage, you don't need to worry about shorting out your microcontroller.

    I used a simple electricians circuit tester to verify everything was wired properly on the high-voltage side and it also worked well to test my relay.

    Add your ESP2866 on your wifi network by connecting to the device through your phone or laptop. This uses the standard WifiManager library and he has all of the necessary documentation on his Github page.

    Using an incandescent light bulb, I placed my DHT-22 sensor next to the bulb and plugged the lamp into the outlet. This allowed the temperature to heat up quickly, triggering the relay to turn off the lamp, and repeat the process. This was very helpful to test everything, including my wifi-connection.

    Your device should properly turn the relay on when the temperature is too low and turn it off once the temperature reaches the high value. In my testing, this has been able to keep our lab space temperature within 1 degree Celcius 24/hours a day.



      • Clocks Contest

        Clocks Contest
      • Oil Contest

        Oil Contest
      • Creative Misuse Contest

        Creative Misuse Contest

      2 Discussions

      Depending on the power of the space heater to the size of the room, you may have issues with overshoot. E.g. If the target is 30C, you may want to turn it off when it reaches 28, because the room hasn't averaged out with the thermometer, it may surge to 33 or so.

      Anotehr way to approach this is to have a less binary feedback loop: E.g. You start with an initial duty cycle of 10 seconds on 50 seconds off. As the temperature rises the duty cycle shortens. This damps the oscillations in the system.

      The full cycle needs to be significantly shorter than the natural thermal cycle of the room. E.g. if the thermal mass and insulation of the room are such that it changes 1/e of the differential between inside and outside in 2 hours, then the duty cycle of your system has to be significantly shorter than 2 hours to be effective in keeping the temp close to the set point.

      It is a Gang box not a Gag box