Controlling a physical LED from your phone over Wi-Fi sounds like a simple project. It is. But the skills it builds are exactly the ones every IoT system depends on: device registration on a cloud platform, authenticated communication between hardware and a mobile app, and real-time control of a physical output from a remote interface.
This Blynk IoT tutorial walks through the complete process of setting up Blynk 2.0 on an ESP32, wiring a single LED, and controlling it from the Blynk mobile app over your home Wi-Fi network. Every step is explained in sequence. By the end, you will have a working IoT-controlled output and a clear understanding of how the Blynk platform connects your hardware to the outside world.
If you are new to the ESP32 and want to understand the hardware before writing firmware, start with the ThinkRobotics guide on ESP32 vs Arduino for IoT projects, which covers what makes the ESP32 the right microcontroller for connected builds like this one.
What Is Blynk 2.0 and How Is It Different from Blynk Legacy?
Blynk released a completely rebuilt version of its platform in 2021. The original Blynk, now called Blynk Legacy, used virtual pins with a simpler but less structured communication model. Blynk 2.0 introduced a new authentication system, a redesigned web dashboard alongside the mobile app, a datastream-based configuration model, and a more robust cloud infrastructure.
Key differences for developersComponents Required
| Component | Quantity | Notes |
|---|---|---|
| ESP32 development board | 1 | Any standard 38-pin devkit |
| LED (any colour) | 1 | Standard 3mm or 5mm indicator LED |
| 220 ohm resistor | 1 | Current limiter for the LED |
| Jumper wires | 2 | Male-to-male for breadboard |
| Breadboard | 1 | Standard 400 or 830 point |
| USB cable for programming | 1 | Matches your ESP32 board's USB port |
Source your components: ESP32 development boards, LEDs, resistors, and breadboards are available from the ThinkRobotics ESP modules and electronics collection, which carries the components needed for this and similar ESP32 IoT builds.
Wiring the Circuit
The circuit for this project is minimal. Connect the longer leg (anode, +) of the LED to GPIO 26 on the ESP32 through the 220 ohm resistor. Connect the shorter leg (cathode, −) directly to any GND pin on the ESP32.
⚠ Always use a current-limiting resistor. Connecting an LED directly to a GPIO pin without a resistor risks drawing more current than the ESP32 GPIO can safely source, potentially permanently damaging the pin. At 3.3V with a 220 ohm resistor, the LED draws approximately 10–15 mA — within the safe operating range of all standard indicator LEDs.
Setting Up Your Blynk 2.0 Account
Go to blynk.cloud and create a free account. After confirming your email and logging in, you land on the Blynk Console — the web dashboard where all device and template configurations take place.
Step 1 — Create a Template
Navigate to Developer Zone and click New Template.
Give the template a descriptive name such as "ESP32 LED Control". Set Hardware to ESP32 and Connection Type to Wi-Fi.
Save the template. Blynk generates a Template ID and Template Name at the top of the template page. Copy both — they go into your firmware exactly as shown.
Step 2 — Create a Datastream
Inside the template, navigate to the Datastreams tab and click New Datastream.
Select Virtual Pin as the type. Name it "LED Control". Set the Virtual Pin to
V0.Set the Data Type to Integer. Set minimum value to
0and maximum to1. Save the datastream.
How datastreams work: When the app button sends 1, this datastream carries that value to the firmware. When it sends 0, the firmware receives 0. Your code reads the value and sets GPIO 26 accordingly.
Step 3 — Get Your Auth Token
Navigate to the Devices section and click New Device.
Select the template you just created. Give the device a name such as "Living Room LED".
Blynk creates the device and generates an Auth Token. Copy the Auth Token — this credential authenticates your specific ESP32 on the Blynk cloud and must be kept confidential.
Installing the Blynk Library
Open the Arduino IDE. Make sure the ESP32 board support package from Espressif is installed through the Boards Manager. Open the Library Manager and search for Blynk. Install the Blynk library by Volodymyr Shymanskyy — select the most recent stable version.
⚠ When opening examples, look specifically for sketches inside the Blynk folder that reference BLYNK_TEMPLATE_ID at the top. This confirms the sketch is written for Blynk 2.0 and not the legacy platform, which has incompatible credentials and connection logic.
Writing the Firmware
Create a new sketch and write the following code. Replace all placeholder values with your actual credentials before uploading. The three #define statements must be the very first lines in the file — before any #include statements.
// Blynk 2.0 credentials — must appear before any includes
#define BLYNK_TEMPLATE_ID "YOUR_TEMPLATE_ID"
#define BLYNK_TEMPLATE_NAME "ESP32 LED Control"
#define BLYNK_AUTH_TOKEN "YOUR_AUTH_TOKEN"
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
// Wi-Fi credentials
char ssid[] = "YourWiFiName";
char pass[] = "YourWiFiPassword";
// LED pin definition
#define LED_PIN 26
// Blynk Virtual Pin V0 callback
// Runs whenever the app button sends a value to V0
BLYNK_WRITE(V0) {
int value = param.asInt();
digitalWrite(LED_PIN, value);
Serial.print("LED set to: ");
Serial.println(value);
}
void setup() {
Serial.begin(115200);
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, LOW);
// Connect to Blynk cloud
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
}
void loop() {
Blynk.run();
}
How the Code Works
- The three
#definestatements at the very top must appear before any#includestatements. Blynk 2.0 uses these definitions during library initialisation. Placing them after the includes causes a compilation error or a silent connection failure. - The
BLYNK_WRITE(V0)macro defines a callback function the Blynk library calls automatically whenever the cloud receives a new value on Virtual Pin V0 from the app. You do not call this function yourself. -
param.asInt()converts the incoming value to an integer. If the app button sends1, the LED turns on. If it sends0, the LED turns off. -
Blynk.run()in the loop handles all cloud communication, incoming message processing, and connection maintenance — this single call keeps the device connected and responsive.
Select your ESP32 board from the Tools menu, select the correct COM port, and upload the sketch. Open the Serial Monitor at 115200 baud. You should see Blynk connecting to Wi-Fi, then a confirmation message indicating the device is online.
Setting Up the Mobile App
Download the Blynk IoT app from the App Store or Google Play. Log in with the same account used to create the template and device on the web console.
Open your device from the app's home screen. Tap the pencil icon to enter edit mode.
Tap the plus icon to add a widget. Select Button from the widget list.
Tap the button widget to open its settings. Set the datastream to V0 (the LED Control datastream you created).
Set the button mode to Switch, not Push. Switch mode sends
1when toggled on and0when toggled off, maintaining state between taps.Give the button a label such as "LED" and save the widget settings. Tap back to exit edit mode.
Push vs Switch mode: Switch mode maintains state between taps — tap once for ON, tap again for OFF. Push mode sends 1 only while the button is held and 0 on release, behaving like a momentary contact. Use Switch for LED toggle control.
Confirm the Serial Monitor shows the "Blynk connected" message. Tap the button in the app — the LED on your breadboard should toggle on and off in response. The Serial Monitor will print the received value each time the button changes state.
Troubleshooting Common Issues
BLYNK_TEMPLATE_ID, BLYNK_TEMPLATE_NAME, BLYNK_AUTH_TOKEN) exactly match what the Blynk Console shows. A single extra space, a missing character, or an incorrect case causes authentication to fail silently.#define statements must be the very first lines in the sketch file, before any #include statements. Move them above the include lines and recompile.For complete documentation on Blynk 2.0 firmware functions, the BLYNK_WRITE macro, and datastream configuration options, the Blynk 2.0 official documentation is the most accurate and up-to-date reference available directly from the platform developers.
Extending the Project
This single LED build is a clean, tested foundation that extends directly into more capable applications.
BLYNK_WRITE callback handles its own pin independently.1 and releases on 0 — identical firmware, mains-level control.Blynk.virtualWrite() to push temperature and humidity readings to display widgets alongside the LED button.For sourcing relay modules, DHT22 sensors, and additional ESP32 accessories to extend this build into a complete home automation system, the ThinkRobotics IoT and sensor components section carries the modules needed for the next stage of the project.
For a broader understanding of how IoT cloud platforms like Blynk, MQTT brokers, and ThingSpeak compare in terms of architecture and use cases, the IoT Analytics platform comparison guide on IoT For All provides a clear reference written for developers evaluating platforms for new projects.
Conclusion
This Blynk IoT tutorial demonstrates the complete loop of a working IoT system in one project. A physical component on the hardware responds to a command sent from a mobile app, authenticated via a cloud platform, over a standard Wi-Fi connection. Every IoT system, regardless of scale, follows this same pattern.
Blynk 2.0 handles the cloud infrastructure, the mobile app, and the authentication layer. The ESP32 handles Wi-Fi connectivity and GPIO control. Your firmware connects the two with the BLYNK_WRITE callback and Blynk.run().
Get this project running, and you have a complete, working IoT development environment. Everything that follows — multiple sensors, multiple outputs, dashboards, automations, and notifications — builds on exactly the structure demonstrated here.
Frequently Asked Questions
The Blynk free tier allows up to 2 active devices, with limited datastreams and widgets per template. For a single LED control project or a personal weather station with a few sensors, the free tier is entirely adequate. Paid plans add more devices, more datastreams, and automation features for larger deployments.
Yes. Blynk 2.0 supports the ESP8266 through the BlynkSimpleEsp8266.h library instead of BlynkSimpleEsp32.h. The credentials, BLYNK_WRITE callbacks, and template configuration are identical between the two platforms. The only firmware change is the include statement and the board selection in the Arduino IDE.
The LED retains its last known state physically because the GPIO output holds its value until changed by code. The Blynk library will attempt to reconnect automatically in the background. While reconnecting, the device shows as offline in the app and button presses are not delivered until the connection is restored. For critical applications, add connection state monitoring logic that triggers a visual or audio indicator when the link is lost.
Yes. Blynk uses outbound connections from the ESP32 to the Blynk cloud server, not inbound connections to your router. The ESP32 initiates the connection, so no port forwarding or static IP is required on your home network. The app communicates with the Blynk cloud server, which relays commands to your device over the existing outbound connection. This works from anywhere with internet access on both the phone and the ESP32.
MQTT is a protocol. Blynk 2.0 is a complete platform built on top of its own communication stack. With MQTT, you manage your own broker, topic structure, authentication, and mobile app interface. With Blynk 2.0, the broker, authentication, and mobile app are provided as a service. For beginners and projects where speed of setup matters more than infrastructure control, Blynk removes significant complexity. For production deployments where data sovereignty, custom integrations, and broker control are priorities, MQTT with a self-hosted broker provides more control at the cost of more setup work.
Ready to Build Your First IoT Project?
ESP32 boards, relay modules, DHT22 sensors, and all the components you need — shipped fast across India.