Arduino Nano ESP32 - Control Heating Element
This tutorial provides instructions on how to use Arduino Nano ESP32 to control a Heating Element. Based on this tutorial, you will learn how to make a heating system in another tutorial.
The Nano ESP32 can switch the heating element through a relay or through a MOSFET module. The relay gives only two states: heating at full power, or no heating. The MOSFET module can do the same ON and OFF, but it can also set the heat level (the power) with PWM. It makes no sound and has no contacts to wear out, even when it switches very often. This page shows the relay way first, then the MOSFET way.
Hardware Preparation
Or you can buy the following kits:
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Additionally, some of these links are for products from our own brand, DIYables .
Overview of Heating Element
Pinout

Heating Element usually has two pins:
- Positive (+) pin (red): needs to be connected to 12V of DC power supply
- Negative (-) pin (black): needs to be connected to GND of DC power supply
How to Control Heating Element
If 12V Heating Element is powered by 12V power supply, it emits heat. To control a Heating Element, we need to use a relay in between Arduino Nano ESP32 and Heating Element. Arduino Nano ESP32 can control the Heating Element via the relay. If you do not know about relay (pinout, how it works, how to program ...), learn about relay in the Arduino Nano ESP32 - Relay tutorial
We can also put a MOSFET module in place of the relay. New to this module? Read the Arduino Nano ESP32 - MOSFET Module tutorial first.
Heating Element: Relay vs MOSFET Module
| Relay | MOSFET Module | |
|---|---|---|
| Heat control | full heat or no heat | full heat, no heat, or any level between (PWM) |
| Sound | clicks on every switch | silent |
| Switching time | milliseconds (slow) | very short |
| Wear | contacts burn and wear when switching often | no moving parts, no contact wear |
| Supply | AC or DC | DC only |
| Minimum supply voltage | none (within the relay rating) | about 6V |
| Isolation from the board | yes, coil and contacts | yes, PC817 optocoupler |
| Use it for | AC heaters, simple ON/OFF | DC heaters, power control, frequent switching |
A heating system often turns the heater ON and OFF many times to hold a temperature. A relay wears out fast with that, so for a 12V DC heating element the MOSFET module is a good choice. For a mains (AC) heater, you must stay with the relay.
Wiring Diagram

This image is created using Fritzing. Click to enlarge image
Arduino Nano ESP32 Code
The below code repeatedly turns the Heating Element ON in five seconds and OFF in five seconds,
Detailed Instructions
- Connect Arduino Nano ESP32 to PC via USB cable
- Open Arduino IDE, select the right board and port
- Copy the above code and paste it to Arduino IDE
- Compile and upload code to Arduino Nano ESP32 board by clicking Upload button on Arduino IDE
- Check the Heating Element's temperature
WARNING
Please be careful. It can burn you and your house. This is a serious topic, and we want you to be safe. If you’re NOT 100% sure what you are doing, do yourself a favor and don’t touch anything. Ask someone who knows! We do NOT take any responsibility for your safety.
Code Explanation
The above Arduino Nano ESP32 code contains line-by-line explanation. Please read the comments in the code!
Arduino Nano ESP32 Code - Heating Element Power with MOSFET Module
Here, a MOSFET module drives the heating element, so the Nano ESP32 can set how much heat it gives.
Wiring Diagram

This image is created using Fritzing. Click to enlarge image
| From | To |
|---|---|
| Arduino Nano ESP32 D9 | MOSFET module PWM pin |
| Arduino Nano ESP32 GND | MOSFET module GND pin |
| 12V adapter + | + terminal |
| Heating element + (red) | + terminal (shared with the adapter +) |
| Heating element − (black) | LOAD terminal |
| 12V adapter − | − terminal |
A heating element has no coil, so no flyback diode is needed.
Code
The code is the one from the MOSFET module tutorial. It powers the heater fully for 2 seconds and turns it off for 2 seconds. Then it raises the power from 10% to 100% and lowers it back to 0%. A heater warms up and cools down slowly, so you feel the change in heat only after some time, not at each step.
Detailed Instructions
- Prepare the board and the Arduino IDE in the same way as the relay Quick Steps above.
- Make the wiring in the diagram, with the 12V adapter not plugged in yet.
- Upload the code above to the Arduino Nano ESP32.
- Plug in the 12V adapter.
- Open the Serial Monitor with a baud rate of 9600 and see the power level.
- Do not touch the heating element. It gets hot.
Note: use the MOSFET module only with a DC heating element and a supply of about 6V or more. A heater on AC mains needs the relay.