ESP32 MQTT Remote Control: Wiring, Code and Simulator
To build this ESP32 MQTT Remote Control project you need an ESP32 DevKit and a 220 Ω resistor, a green LED and a potentiometer. Publishes the knob to a public MQTT broker every 2 s and switches the LED when "on" or "off" arrives on its topic. Make the 6 connections in the wiring table, upload the MicroPython code, and open the HiveMQ web client (hivemq.com/demos/websocket-client), subscribe to the pot topic, and publish "on" to the led topic.
Open this circuit in the free ESP32 DevKit simulator
Parts list
| Qty | Part | What it does |
|---|---|---|
| 1 | ESP32 DevKit | the microcontroller board |
| 1 | 220 Ω resistor | Limits current. 220 Ω in series with an LED; 10 kΩ as a pull-up or pull-down. |
| 1 | green LED | Lights when A (anode, the bent leg) is high and C (cathode) is low. Use a resistor. |
| 1 | Potentiometer | VCC to 5V, GND to GND, SIG to an analog pin. Drag the knob; analogRead gives 0–1023. |
Wiring
| # | From | To |
|---|---|---|
| 1 | ESP32 DevKit D4 | 220 Ω resistor leg 1 |
| 2 | 220 Ω resistor leg 2 | green LED anode (A, long leg) |
| 3 | ESP32 DevKit GND | green LED cathode (C, short leg) |
| 4 | ESP32 DevKit 3V3 | Potentiometer VCC |
| 5 | ESP32 DevKit GND | Potentiometer GND |
| 6 | ESP32 DevKit D34 | Potentiometer SIG |
Step by step
- Open the simulator. Open the BitForBytes Embedded Lab in your browser and start from the ESP32 DevKit. No install or account is needed.
- Add the parts. Add a 220 Ω resistor, a green LED and a potentiometer from the parts palette.
- Wire 1. Connect ESP32 DevKit D4 to 220 Ω resistor leg 1.
- Wire 2. Connect 220 Ω resistor leg 2 to green LED anode (A, long leg).
- Wire 3. Connect ESP32 DevKit GND to green LED cathode (C, short leg).
- Wire 4. Connect ESP32 DevKit 3V3 to Potentiometer VCC.
- Wire 5. Connect ESP32 DevKit GND to Potentiometer GND.
- Wire 6. Connect ESP32 DevKit D34 to Potentiometer SIG.
- Paste the MicroPython code. Paste the MicroPython code below into the code editor.
- Run it. Press Run. Open the HiveMQ web client (hivemq.com/demos/websocket-client), subscribe to the pot topic, and publish "on" to the led topic.
MicroPython code
# ESP32 + MQTT: publish the knob, and let anyone switch the LED from the internet.
# Broker: broker.hivemq.com (public; pick your own topic so it is yours).
# Try it: in the HiveMQ web client, publish "on" or "off" to bfb/<your topic>/led
import network, time
from machine import Pin, ADC
from umqtt.simple import MQTTClient
TOPIC = "bfb/demo-%d" % time.ticks_ms() # change to something only you use
led = Pin(4, Pin.OUT)
pot = ADC(Pin(34))
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect("BFB-Lab", "")
while not wlan.isconnected():
time.sleep_ms(200)
def on_message(topic, msg):
print("got", topic, msg)
led.value(msg == b"on")
client = MQTTClient("esp32-" + TOPIC[-6:], "broker.hivemq.com")
client.set_callback(on_message)
client.connect()
client.subscribe(TOPIC + "/led")
print("publishing to", TOPIC + "/pot", "- listening on", TOPIC + "/led")
last = 0
while True:
client.check_msg()
if time.ticks_diff(time.ticks_ms(), last) > 2000:
last = time.ticks_ms()
client.publish(TOPIC + "/pot", str(pot.read()))
time.sleep_ms(100)
What to try
Open the HiveMQ web client (hivemq.com/demos/websocket-client), subscribe to the pot topic, and publish "on" to the led topic.
Frequently asked questions
How do I wire the MQTT Remote Control project on an ESP32 DevKit?
Make 6 connections: ESP32 DevKit D4 to 220 Ω resistor leg 1; 220 Ω resistor leg 2 to green LED anode (A, long leg); ESP32 DevKit GND to green LED cathode (C, short leg); ESP32 DevKit 3V3 to Potentiometer VCC; ESP32 DevKit GND to Potentiometer GND; ESP32 DevKit D34 to Potentiometer SIG.
What parts do I need for this ESP32 project?
An ESP32 DevKit and a 220 Ω resistor, a green LED and a potentiometer.
Can I simulate this ESP32 project online for free?
Yes. The BitForBytes Embedded Lab runs this exact circuit and MicroPython code in your browser for free, with no install and no hardware. MicroPython runs on an emulated core, with Wi-Fi served by a virtual network.
What does the code do?
Publishes the knob to a public MQTT broker every 2 s and switches the LED when "on" or "off" arrives on its topic.