ESP32 - Control Heating Element
This tutorial instructs you how to use ESP32 to control a Heating Element. Based on this tutorial, you will learn how to make a heating system in another tutorial.
The ESP32 can switch the heating element through a relay or through a MOSFET module. The relay gives you two states only: heating at full power, or no heating. The MOSFET module also lets you pick a heat level in between, such as 30% or 70% of the power. It is silent too, and it does not wear out when it switches often. We will go through both methods here.
This tutorial shows how to program the ESP32 using the Arduino language (C/C++) via the Arduino IDE. If you’d like to learn how to program the ESP32 with MicroPython, visit this ESP32 MicroPython - Controls Heating Element tutorial.
Hardware Used In This Tutorial
Or you can buy the following kits:
| 1 | × | DIYables ESP32 Starter Kit (ESP32 included) | |
| 1 | × | DIYables ESP32 S3 Starter Kit (ESP32 S3 included) | |
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Introduction to 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 ESP32 and Heating Element. 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 ESP32 - Relay tutorial
A MOSFET module can stand in place of the relay. New to it? Read the ESP32 - MOSFET Module tutorial to see its pinout and how it works.
Relay vs MOSFET Module for Heating Element
| Relay | MOSFET Module | |
|---|---|---|
| Heat control | full heat or no heat | any heat level from 0% to 100% (PWM) |
| Sound when switching | click | none |
| Switching time | slow (milliseconds) | very fast |
| Wear | contacts get worn, more so with frequent switching | no moving parts, no contact wear |
| Supply type | AC or DC heaters | DC heaters only |
| Minimum heater voltage | none (within the relay rating) | about 6V |
| Isolation | yes, between coil and contacts | yes, by a PC817 optocoupler |
| Use it for | AC heaters, simple ON/OFF heating | 12V DC heaters, adjustable heat, switching many times |
For a 12V DC heating element, choose the MOSFET module when you want to hold a gentle heat or switch very often. If the heater runs on AC mains power, only the relay is suitable.
Wiring Diagram
- How to connect ESP32 and controls heating element using breadboard (powered via USB cable)

This image is created using Fritzing. Click to enlarge image
- How to connect ESP32 and controls heating element using breadboard (powered via Vin pin)

This image is created using Fritzing. Click to enlarge image
- How to connect ESP32 and controls heating element using screw terminal block breakout board (powered via USB cable)

- How to connect ESP32 and controls heating element using screw terminal block breakout board (powered via Vin pin)

If you're unfamiliar with how to supply power to the ESP32 and other components, you can find guidance in the following tutorial: The best way to Power ESP32 and sensors/displays.
ESP32 Code
The below code repeatedly turns the Heating Element ON in five seconds and OFF in five seconds,
Quick Instructions
- Connect 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 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 ESP32 code contains line-by-line explanation. Please read the comments in the code!
ESP32 Code - Control Heating Element Power with MOSFET Module
In this part, the MOSFET module takes the place of the relay. Instead of only ON and OFF, the ESP32 sets how much power goes into the heating element.
Wiring Diagram with MOSFET Module

This image is created using Fritzing. Click to enlarge image
Connect it like this:
- ESP32 GPIO18 → PWM pin of the module
- ESP32 GND → GND pin of the module
- 12V adapter + → + terminal of the module
- Heating element + (red) → also the + terminal, sharing it 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 heater gets full power for 2 seconds and no power for 2 seconds. Then the code raises the power step by step from 10% to 100% and brings it back down. A heater warms up and cools down slowly, so you will not feel each step. You will feel the change in temperature only after a while.
Quick Instructions
- Prepare the ESP32 and Arduino IDE as described in the relay Quick Steps above.
- Make the wiring as shown in the MOSFET diagram, with the 12V adapter not yet plugged in.
- Paste the code into Arduino IDE and click Upload.
- Plug in the 12V adapter.
- Open the Serial Monitor and set the baud rate to 9600.
- Read the power level on Serial Monitor. Do not touch the heating element to check it, because it can be very hot.
Tip: keep the heater supply at about 6V or higher, and use DC only. For an AC heater, stay with the relay.
Video Tutorial
Making video is a time-consuming work. If the video tutorial is necessary for your learning, please let us know by subscribing to our YouTube channel , If the demand for video is high, we will make the video tutorial.