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

QtyPartWhat it does
1ESP32 DevKitthe microcontroller board
1220 Ω resistorLimits current. 220 Ω in series with an LED; 10 kΩ as a pull-up or pull-down.
1green LEDLights when A (anode, the bent leg) is high and C (cathode) is low. Use a resistor.
1PotentiometerVCC to 5V, GND to GND, SIG to an analog pin. Drag the knob; analogRead gives 0–1023.

Wiring

#FromTo
1ESP32 DevKit D4220 Ω resistor leg 1
2220 Ω resistor leg 2green LED anode (A, long leg)
3ESP32 DevKit GNDgreen LED cathode (C, short leg)
4ESP32 DevKit 3V3Potentiometer VCC
5ESP32 DevKit GNDPotentiometer GND
6ESP32 DevKit D34Potentiometer SIG

Step by step

  1. Open the simulator. Open the BitForBytes Embedded Lab in your browser and start from the ESP32 DevKit. No install or account is needed.
  2. Add the parts. Add a 220 Ω resistor, a green LED and a potentiometer from the parts palette.
  3. Wire 1. Connect ESP32 DevKit D4 to 220 Ω resistor leg 1.
  4. Wire 2. Connect 220 Ω resistor leg 2 to green LED anode (A, long leg).
  5. Wire 3. Connect ESP32 DevKit GND to green LED cathode (C, short leg).
  6. Wire 4. Connect ESP32 DevKit 3V3 to Potentiometer VCC.
  7. Wire 5. Connect ESP32 DevKit GND to Potentiometer GND.
  8. Wire 6. Connect ESP32 DevKit D34 to Potentiometer SIG.
  9. Paste the MicroPython code. Paste the MicroPython code below into the code editor.
  10. 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.

More ESP32 DevKit projects