Руководства · 15 мин чтения

Blynk и ESP32: управление светодиодами, реле и датчиками с телефона

Blynk и ESP32 по шагам: шаблон и потоки данных (V0, V1), токен авторизации, управление светодиодом и реле, графики датчиков, уведомления и BlynkTimer.

Blynk и ESP32 — самый быстрый способ управлять платой из любой точки мира без собственного приложения для телефона. Blynk IoT даёт облачный сервер, к которому подключается ESP32 (Blynk.Cloud), мобильное приложение, где панель управления собирается перетаскиванием, и веб-панель. Когда ты нажимаешь переключатель на телефоне, команда сначала уходит в облако, а оттуда на ESP32; температура, которую измеряет ESP32, тем же путём возвращается и появляется на телефоне числом и графиком. Телефону и плате не нужно быть в одном доме: всё работает, даже когда телефон сидит на мобильном интернете.

В этом руководстве с нуля собирается рабочий проект: ты откроешь аккаунт Blynk.Cloud, создашь шаблон и потоки данных (V0, V1, V2, V3), получишь токен авторизации устройства, установишь библиотеку, будешь управлять светодиодом и реле с телефона, строить график данных датчика DHT11 и получать уведомление на телефон, когда растёт температура. Ещё ты узнаешь, почему не стоит использовать delay() и что вместо него делает BlynkTimer, как посчитать лимит сообщений бесплатного плана, почему код от старого Blynk не компилируется и как исправить самые частые ошибки подключения.

Плата разработки ESP32, которой управляют с телефона через Blynk IoT
Благодаря встроенному Wi-Fi ESP32 подключается прямо к Blynk.Cloud; дополнительный беспроводной модуль ей не нужен.

Что такое Blynk IoT и как он работает?

В Blynk ESP32 и телефон никогда не соединяются напрямую: оба подключаются к Blynk.Cloud, а сервер передаёт сообщения. При старте ESP32 подключается к Wi-Fi, затем к серверу Blynk и представляется своим токеном авторизации. Данные идут через виртуальные пины (V0–V255): виртуальный пин — это не настоящая ножка ESP32, а пронумерованный канал данных между твоим кодом и приложением. Переключатель в приложении записывает 1 в V1, функция BLYNK_WRITE(V1) в коде ловит это значение и включает реле; когда код выполняет Blynk.virtualWrite(V2, 24.5), шкала на телефоне обновляется. Вот основные элементы:

ПонятиеЧто делаетПример в этом руководстве
Шаблон (Template)Общий рецепт для однотипных устройств: потоки данных, панели и событияESP32 Home
Поток данных (Datastream)Канал данных, привязанный к виртуальному пину, с заданным типом и диапазономV2: Температура, Double, 0–50 °C
Устройство (Device)Реальная плата, созданная по шаблону; у каждой свои данныеESP32 в гостиной
Токен авторизации (Auth token)Секретный ключ-идентификатор устройства; с ним код подключается к облакуСтрока BLYNK_AUTH_TOKEN
Виджет (Widget)Элементы панели: переключатели, шкалы, графикиButton, Gauge, SuperChart
Событие (Event)Оповещение, которое рассылает уведомления и записывается в журнал событий (timeline)yuksek_sicaklik

Чем старый Blynk отличается от нового Blynk IoT

Большинство видео и скетчей про Blynk в интернете сделаны для старой версии (Blynk Legacy), которая больше не работает. Новая платформа запущена в мае 2021 года; старое приложение убрали из магазинов в июне 2022 года, а старые облачные серверы окончательно отключили 31 декабря 2022 года. Поэтому токен из старого проекта, когда-то купленные очки энергии или адрес blynk-cloud.com сегодня бесполезны: проект нужно заново собрать на новой платформе. Хорошая новость: большая часть кода для ESP32 (BLYNK_WRITE, virtualWrite, BlynkTimer) осталась прежней.

ХарактеристикаСтарый Blynk (Legacy)Blynk IoT (новый)
Где настраивается проект?Всё в одном проекте внутри приложения на телефонеШаблоны и потоки данных в Blynk.Console (веб), панели на телефоне и в вебе
Токен авторизацииОдин на проект, приходит по emailОдин на устройство, показан на странице устройства
Модель оплатыВиджеты покупались за очки энергииМесячные планы с лимитами на устройства, сообщения и функции
Начало скетчаТолько строка char auth[]Обязательны BLYNK_TEMPLATE_ID, BLYNK_TEMPLATE_NAME и BLYNK_AUTH_TOKEN
УведомленияBlynk.notify() и Blynk.email()Событие задаётся в шаблоне и вызывается через Blynk.logEvent()
Серверblynk-cloud.com, порт 80 или 8080 (отключён)blynk.cloud, порт 80 или 443 с SSL
Веб-панельНетЕсть (Blynk.Console)
Локальный серверМожно было поднять у себя сервер на Java с открытым кодомЛичного локального сервера нет; старый сервер больше не обновляется
Если скомпилировать старый пример с новой библиотекой, встретятся три типичные проблемы: скетчи с BLYNK_DEVICE_NAME падают с ошибкой «Please specify your BLYNK_TEMPLATE_ID and BLYNK_TEMPLATE_NAME» (укажи BLYNK_TEMPLATE_ID и BLYNK_TEMPLATE_NAME), скетчи с Blynk.notify() останавливаются на «'class BlynkWifi' has no member named 'notify'» (у класса нет метода notify), а скетчи, где в Blynk.begin() указан blynk-cloud.com (обычно с портом 8080), могут скомпилироваться, но так и не подключатся.

Список деталей и подключение

Для проекта понадобятся плата разработки ESP32, модуль реле на 5 V, датчик температуры и влажности DHT11, по желанию светодиод с резистором 220 Ω, макетная плата и провода-перемычки. Для светодиода хватит встроенного синего светодиода платы на GPIO 2; если добавить внешний светодиод, номинал резистора подскажет калькулятор резистора для светодиода. Расположение пинов своей платы проверь и в утилите распиновки: на одних платах пин 5 V подписан VIN, на других 5V.

ESP32
ESP32
Модуль реле
Модуль реле
DHT11
DHT11
Светодиод
Светодиод
Макетная плата
Макетная плата
Провода-перемычки
Провода-перемычки
ДетальПин деталиПин ESP32Примечание
Светодиод (по желанию)Длинная ножка (+)GPIO 2Через резистор 220 Ω; короткая ножка на GND
Модуль релеVCCVIN / 5VПри питании от USB на этом пине около 5 V
Модуль релеGNDGNDОбщая земля
Модуль релеINGPIO 26Для модуля с активным LOW поставь в коде ROLE_AKTIF_LOW = true
DHT11VCC3V3Работает от 3,3–5,5 V
DHT11DATAGPIO 4Голому датчику нужна подтяжка 10 kΩ; на модулях она уже стоит
DHT11GNDGNDОбщая земля
Пины ESP32 выдают 3,3 V. Большинство модулей реле на 5 V переключаются от такого сигнала, но на модуле с активным LOW уровень HIGH в 3,3 V не всегда полностью отпускает реле; если реле никогда не выключается, возьми модуль с управлением от 3,3 V или поставь между ними NPN-транзистор. Если реле коммутирует сетевую нагрузку 230 V, подключай всё только при вынутой вилке, не оставляй открытых проводников и позови на помощь взрослого; подробности в статье Что такое модуль реле?

Шаг 1: аккаунт Blynk.Cloud и шаблон

  1. На компьютере открой blynk.cloud, зарегистрируй бесплатный аккаунт на свой email и задай пароль по ссылке из пришедшего письма.
  2. В меню слева открой Developer Zone › My Templates и нажми + New Template.
  3. Дай шаблону имя (например, ESP32 Home), выбери оборудование ESP32 и тип подключения WiFi, затем создай шаблон.
  4. Значения BLYNK_TEMPLATE_ID и BLYNK_TEMPLATE_NAME на странице шаблона пойдут в код; пока просто запомни, где они.
  5. Если при регистрации появится мастер Quickstart, его можно пропустить: в этом руководстве все шаги делаются вручную, чтобы было видно, зачем нужна каждая настройка.

Шаг 2: потоки данных (V0, V1, V2, V3)

Поток данных — это паспорт виртуального пина: он задаёт номер пина, тип данных (Integer для целых чисел, Double для дробных, String для текста), минимум и максимум, единицу и число знаков после запятой. Открой шаблон в режиме редактирования, перейди на вкладку Datastreams, выбери + New Datastream › Virtual Pin и создай эти четыре канала:

Виртуальный пинИмяТип данныхМин – МаксЕдиница и знакиВиджет
V0СветодиодInteger0 – 1НетButton / Switch
V1РелеInteger0 – 1НетButton / Switch
V2ТемператураDouble0 – 50°C, #.#Gauge, SuperChart
V3ВлажностьDouble0 – 100%, #Gauge, SuperChart
Поля Min и Max — не украшение: Blynk обрезает значения вне диапазона до границы. Если оставить Max у потока температуры равным 1, на панели будет 1, даже когда датчик показывает 24,5 °C. Чтобы после перезагрузки платы переключатели возвращались в последнее состояние, вызывай в коде Blynk.syncVirtual() внутри BLYNK_CONNECTED(); другой вариант — включить Sync with latest server value (синхронизация с последним значением на сервере) в расширенных настройках потока и вызвать Blynk.syncAll(). После каждого изменения не забывай нажимать Save в шаблоне.

Шаг 3: устройство и токен авторизации

Шаблон — это рецепт, а устройство — настоящая плата, сделанная по нему. В меню слева открой Devices, нажми + New Device, через From template выбери шаблон ESP32 Home и дай устройству имя. После создания устройства появится конфигурация из трёх строк: BLYNK_TEMPLATE_ID, BLYNK_TEMPLATE_NAME и BLYNK_AUTH_TOKEN. Скопируй эти строки; позже их можно найти в разделе Device Info на странице устройства (в некоторых версиях интерфейса он называется Developer Tools).

Токен авторизации — это пароль твоего устройства. Не выкладывай код с токеном на форумы или в публичный репозиторий GitHub: любой, у кого есть токен, сможет включать и выключать твоё реле. Если токен утёк, удали устройство и создай его заново, чтобы получить новый токен. Каждой плате нужно своё устройство и свой токен: если загрузить один и тот же токен в две ESP32, они будут постоянно выбивать друг друга из сети.

Шаг 4: установка библиотеки Blynk в Arduino IDE

  1. Если пакет плат ESP32 в Arduino IDE ещё не установлен, сначала установи его; шаги описаны в статье Что такое ESP32?
  2. Открой «Менеджер библиотек» (Library Manager), введи в поиске Blynk и установи официальную библиотеку Blynk от Volodymyr Shymanskyy. Если спросят о зависимостях, выбери Установить все (Install all).
  3. Для датчика там же установи DHT sensor library от Adafruit и нужную ей библиотеку Adafruit Unified Sensor. Если что-то не получается, загляни в руководство Как добавить библиотеку в Arduino.
  4. В меню «Инструменты › Плата» (Tools › Board) выбери ESP32 Dev Module, подключи плату USB-кабелем с передачей данных и выбери правильный порт.
  5. В библиотеке есть готовые примеры: «Файл › Примеры › Blynk › Boards_WiFi › ESP32_WiFi» — простейший вариант первого скетча ниже.

Первый скетч: включаем и выключаем светодиод с телефона (V0)

В коде ниже замени три верхние строки на скопированные со страницы устройства, а имя и пароль Wi-Fi — на свои. Эти три строки #define должны стоять до строк #include: библиотека ищет эти значения при компиляции и выдаёт ошибку компиляции, если не находит их.

C++ (Arduino IDE)
1// Bu üç satırı Blynk.Console'daki cihaz sayfasından kopyala / copy these three lines from the device page in Blynk.Console
2#define BLYNK_TEMPLATE_ID   "TMPLxxxxxxxx"
3#define BLYNK_TEMPLATE_NAME "ESP32 Ev"
4#define BLYNK_AUTH_TOKEN    "CihazTokeniniBurayaYapistir"
5
6#define BLYNK_PRINT Serial          // bağlantı günlüğünü Seri Monitör'e yaz / print the connection log to the Serial Monitor
7
8#include <WiFi.h>
9#include <WiFiClient.h>
10#include <BlynkSimpleEsp32.h>
11
12char ssid[] = "AgAdi";              // Wi-Fi adın (yalnız 2,4 GHz) / your Wi-Fi name (2.4 GHz only)
13char pass[] = "Sifre123";           // Wi-Fi şifren / your Wi-Fi password
14
15const int LED_PIN = 2;              // çoğu DevKit'te dahili LED / onboard LED on most DevKits
16
17// Uygulama V0'a her değer yazdığında çalışır / runs every time the app writes a value to V0
18BLYNK_WRITE(V0) {
19  int deger = param.asInt();        // anahtar: 0 ya da 1 / switch: 0 or 1
20  digitalWrite(LED_PIN, deger);
21  Serial.print("V0 = ");
22  Serial.println(deger);
23}
24
25// Buluta her bağlanışta son V0 değerini iste / ask for the last V0 value on every connection
26BLYNK_CONNECTED() {
27  Blynk.syncVirtual(V0);
28}
29
30void setup() {
31  Serial.begin(115200);
32  pinMode(LED_PIN, OUTPUT);
33  Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);   // Wi-Fi'ye ve Blynk.Cloud'a bağlan / connect to Wi-Fi and Blynk.Cloud
34}
35
36void loop() {
37  Blynk.run();                      // gelen komutları işler, bağlantıyı canlı tutar / handles commands, keeps the link alive
38}
СтрокаЧто делает
BLYNK_PRINT SerialБиблиотека выводит шаги подключения в монитор порта; очень удобно при поиске неисправностей
BLYNK_WRITE(V0)Функция, которая запускается автоматически, когда приложение или веб-панель отправляет значение в V0
param.asInt()Превращает пришедшее значение в целое число; для дробных есть asFloat(), для текста asStr()
BLYNK_CONNECTED()Выполняется один раз после каждого успешного подключения
Blynk.syncVirtual(V0)Запрашивает у сервера последнее значение V0, поэтому светодиод возвращается в прежнее состояние даже после перезагрузки
Blynk.begin(...)Подключается к Wi-Fi и Blynk.Cloud; ждёт, пока подключение не установится
Blynk.run()Обрабатывает входящие команды и поддерживает соединение; его нужно вызывать в loop без всяких ожиданий

После загрузки кода открой монитор порта на скорости 115200 бод: по порядку должны появиться строки вроде «Connecting to AgAdi», «Connected to WiFi», IP-адрес, «Connecting to blynk.cloud:80» и в конце «Ready (ping: 45ms).». Как только появилась строка Ready, устройство отображается в Blynk.Console как Online. При первом подключении может появиться и строка, начинающаяся с «Redirecting to»: библиотека сама переходит на региональный сервер, где находится твой аккаунт, это нормально.

Настройка панелей на телефоне и в вебе

Код готов, пора расставить кнопки. В Blynk мобильная панель и веб-панель настраиваются отдельно; так как обе используют одни и те же потоки данных, изменение с одной сразу видно на другой.

  1. Установи на телефон приложение Blynk IoT (не старое Blynk или Blynk Legacy) и войди под тем же аккаунтом.
  2. На странице профиля включи Developer Mode (режим разработчика), затем нажми на шаблон ESP32 Home в Developer Zone.
  3. Нажимай на пустой холст, чтобы добавить виджеты: по Button или Switch для V0 и V1, Gauge или Labeled Value для V2 и V3 и SuperChart для истории.
  4. Нажми на каждый виджет и выбери в его настройках нужный поток данных; в SuperChart можно добавить V2 и V3 вместе. Изменения сохраняются автоматически.
  5. Для веб-панели открой шаблон на редактирование в Blynk.Console, перетащи виджеты на вкладку Web Dashboard, выбери поток данных через значок шестерёнки у каждого виджета и нажми Save.
  6. В приложении нажми на имя своего устройства и попробуй переключатель: светодиод на GPIO 2 должен загореться сразу, а в мониторе порта появится «V0 = 1».
У виджета Button два режима: в режиме Switch он переключается между 1 и 0 при каждом нажатии, в режиме Push отправляет 1, пока кнопку держат, и 0, когда её отпускают. Switch подходит для ламп и розеток, Push — для задач с коротким импульсом, как дверной звонок или гаражные ворота.

Реле и датчик: чтение без delay() через BlynkTimer

Золотое правило Blynk: в loop() должны быть только Blynk.run() и timer.run(). Если поставить в loop delay(2000), всё это время ESP32 не видит команд с телефона и переключатель реагирует с опозданием; при очень долгих паузах сервер считает устройство офлайн. Хуже того, если вписать Blynk.virtualWrite() прямо в loop, ESP32 попытается отправлять сотни сообщений в секунду: сервер начнёт ограничивать устройство, а месячная квота сообщений быстро закончится. Решение — BlynkTimer, работающий по принципу millis(): он вызывает выбранную функцию с выбранным интервалом, а в промежутках loop остаётся свободным. Подробно эта идея разобрана в статье Arduino: millis() или delay().

Код ниже управляет реле через V1, каждые 60 секунд отправляет температуру с DHT11 в V2 и влажность в V3, а когда температура поднимается выше 30 °C, вызывает событие с уведомлением. Как работает датчик, рассказано в статье Датчик температуры и влажности DHT11.

C++ (Arduino IDE)
1#define BLYNK_TEMPLATE_ID   "TMPLxxxxxxxx"
2#define BLYNK_TEMPLATE_NAME "ESP32 Ev"
3#define BLYNK_AUTH_TOKEN    "CihazTokeniniBurayaYapistir"
4#define BLYNK_PRINT Serial
5
6#include <WiFi.h>
7#include <WiFiClient.h>
8#include <BlynkSimpleEsp32.h>
9#include <DHT.h>
10
11char ssid[] = "AgAdi";
12char pass[] = "Sifre123";
13
14const int ROLE_PIN = 26;            // röle modülünün IN pini / relay module IN pin
15const int DHT_PIN  = 4;             // DHT11 veri pini / DHT11 data pin
16const bool ROLE_AKTIF_LOW = true;   // çoğu modül LOW'da çeker / most modules switch on with LOW
17
18DHT dht(DHT_PIN, DHT11);            // DHT22 kullanıyorsan DHT22 yaz / write DHT22 if you use a DHT22
19BlynkTimer timer;                   // delay() yerine zamanlayıcı / a timer instead of delay()
20bool alarmGitti = false;            // aynı bildirimin tekrarını önler / stops the same alert repeating
21
22void roleYaz(bool acik) {
23  if (ROLE_AKTIF_LOW) digitalWrite(ROLE_PIN, acik ? LOW : HIGH);
24  else                digitalWrite(ROLE_PIN, acik ? HIGH : LOW);
25}
26
27// V1: uygulamadaki röle anahtarı / relay switch in the app
28BLYNK_WRITE(V1) {
29  roleYaz(param.asInt() == 1);
30}
31
32// Elektrik gidip gelince rölenin son durumunu geri al / restore the relay state after a power cut
33BLYNK_CONNECTED() {
34  Blynk.syncVirtual(V1);
35}
36
37// Zamanlayıcının çağırdığı fonksiyon / the function called by the timer
38void sensorGonder() {
39  float sicaklik = dht.readTemperature();
40  float nem = dht.readHumidity();
41  if (isnan(sicaklik) || isnan(nem)) {
42    Serial.println("DHT okunamadi / DHT read failed");
43    return;
44  }
45  Blynk.virtualWrite(V2, sicaklik);   // V2: sıcaklık (°C) / temperature (°C)
46  Blynk.virtualWrite(V3, nem);        // V3: nem (%) / humidity (%)
47
48  // 30 °C'yi geçince tek bildirim, 28 °C'nin altında yeniden kur / one alert above 30 °C, re-arm below 28 °C
49  if (sicaklik > 30.0 && !alarmGitti) {
50    Blynk.logEvent("yuksek_sicaklik", String("Sicaklik / Temp: ") + sicaklik + " C");
51    alarmGitti = true;
52  } else if (sicaklik < 28.0) {
53    alarmGitti = false;
54  }
55}
56
57void setup() {
58  Serial.begin(115200);
59  pinMode(ROLE_PIN, OUTPUT);
60  roleYaz(false);                   // açılışta röle kapalı / relay off at boot
61  dht.begin();
62  Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
63  timer.setInterval(60000L, sensorGonder);   // 60 saniyede bir ölç ve gönder / measure and send every 60 seconds
64}
65
66void loop() {
67  Blynk.run();
68  timer.run();                      // loop'ta delay() ya da virtualWrite olmasın / no delay() or virtualWrite in loop
69}

Строка timer.setInterval(60000L, sensorGonder) вызывает функцию каждые 60 000 миллисекунд; буква L в конце обозначает, что число типа long. Для разовых задач есть timer.setTimeout(), например чтобы включить реле и выключить его через 5 секунд. Один объект BlynkTimer держит до 16 таймеров, этого с запасом хватает большинству проектов. Проверка isnan() не пускает в облако бессмысленное значение NaN, когда датчик не удалось прочитать. Флаг alarmGitti и разрыв между порогами 30 и 28 °C (гистерезис) не дают слать новое уведомление при каждом замере, пока температура колеблется около 30 °C.

Данные датчика на графике

Чтобы график заполнялся, нужны две вещи: ESP32 должна отправлять данные через virtualWrite, а поток данных должен хранить историю. Если в настройках потока для истории выбрано Last Value, сервер хранит только последнее значение и график не строится; для графиков хватает варианта со средним за минуту (1 Minute AVG). На бесплатном плане история хранится 1 неделю, а хранение сырых (RAW) данных доступно только на платных планах. В SuperChart можно переключать диапазоны времени — часы, дни, недели — и видеть температуру и влажность двумя цветами на одном графике. Данные приходят раз в 60 секунд, поэтому первые точки появятся через несколько минут; не торопись снижать интервал до 1 секунды, почему — станет ясно в разделе о бесплатном плане.

Уведомления: события и Blynk.logEvent()

В новом Blynk уведомления работают через события (events). Сначала событие задаётся в шаблоне, затем вызывается в коде через Blynk.logEvent(); Blynk записывает событие в журнал устройства и, в зависимости от настроек, отправляет на телефон push-уведомление или email. Описание события может занимать до 300 символов, но буфер отправки в библиотеке маленький, так что лучше писать коротко.

  1. Открой шаблон в режиме редактирования и перейди на вкладку Events & Notifications.
  2. Нажми + Create Event, дай событию имя, например «Высокая температура», и задай код события yuksek_sicaklik. Код может содержать только латинские буквы, цифры и подчёркивания и должен в точности совпадать с текстом в скетче.
  3. Тип события выбери Warning: Info, Warning и Critical задают, насколько серьёзно оповещение. Проверь, что включена запись в журнал (timeline), иначе событие не появится в приложении.
  4. На вкладке Notifications включи уведомления, получателем выбери свой аккаунт, а каналами — push и email; по желанию ограничь уведомления до одного в час.
  5. Нажми Save в шаблоне и подтверди обновление устройства. Не забудь разрешить уведомления для приложения Blynk IoT на телефоне.
ЛимитЗначение
Событий на устройство в день (logEvent)100
Между двумя событиями одного типаНе меньше 1 секунды
Между двумя уведомлениями (push, email)Не меньше 5 секунд
Описание событияДо 300 символов
Частота запросов на устройствоДо 50 в секунду
Длина строкового значенияДо 1024 байт
Никогда не ставь Blynk.logEvent() в loop() или в условие, которое срабатывает при каждом замере, без флага. Код, который шлёт событие каждые 60 секунд, пока температура выше порога, исчерпает лимит в 100 событий в день примерно за 100 минут, и других уведомлений в этот день уже не будет. Используй флаг, как в коде выше, или включи ограничения на вкладке Notifications.

Лимиты бесплатного плана: как посчитать сообщения

Бесплатного плана Blynk хватает для учёбы и небольших проектов, но проект, собранный без знания лимитов, может замолчать посреди месяца. На октябрь 2026 года на странице цен Blynk для бесплатного плана указаны такие значения: 5 устройств, 1 пользователь, 100 000 сообщений устройства в месяц, 1 неделя истории данных, 10 шаблонов, 5 событий на шаблон, 1 вебхук и 5 автоматизаций. За последние годы эти лимиты менялись несколько раз; прежде чем строить долгосрочный проект, проверь актуальные значения на странице цен Blynk или в настройках плана своего аккаунта. Больше всего квоту расходуют команды virtualWrite, syncVirtual и logEvent, которые отправляет устройство, и каждый отдельный virtualWrite — это одно сообщение. В месяце около 2 592 000 секунд, так что расчёт простой:

Интервал отправки1 поток данных (30 дней)2 потока данных (30 дней)Укладывается в лимит 100 000?
2 секунды1 296 0002 592 000Нет
10 секунд259 200518 400Нет
30 секунд86 400172 800Одно значение укладывается, два нет
60 секунд43 20086 400Укладывается, но с двумя значениями запас небольшой
5 минут864017 280Укладывается с запасом
Сэкономить сообщения можно тремя способами: делать интервал измерений таким длинным, какой действительно нужен (температуру в комнате достаточно проверять раз в 5 минут), отправлять значение только при изменении на заданную величину (например, когда температура меняется на 0,5 °C) и не слать данные в неиспользуемые потоки. Собственные примеры библиотеки тоже советуют не отправлять больше 10 значений в секунду.

Подключение, которое не зависает без Wi-Fi

Blynk.begin() прост, но у него есть недостаток: если Wi-Fi или соединение с Blynk не устанавливается, он бесконечно ждёт внутри setup(), и остальная часть программы так и не запускается. В проектах, которые должны работать и при пропаже интернета, вроде термостата или системы полива, подключением лучше управлять вручную. Каркас ниже запускает Wi-Fi без ожидания, через Blynk.config() только применяет настройки и проверяет соединение каждые 10 секунд; тем временем локальные задачи, добавленные в таймер, работают независимо от интернета.

C++ (Arduino IDE)
1#define BLYNK_TEMPLATE_ID   "TMPLxxxxxxxx"
2#define BLYNK_TEMPLATE_NAME "ESP32 Ev"
3#define BLYNK_AUTH_TOKEN    "CihazTokeniniBurayaYapistir"
4#define BLYNK_PRINT Serial
5
6#include <WiFi.h>
7#include <WiFiClient.h>
8#include <BlynkSimpleEsp32.h>
9
10char ssid[] = "AgAdi";
11char pass[] = "Sifre123";
12
13BlynkTimer timer;
14
15// Wi-Fi varsa ama Blynk bağlı değilse yeniden dene / retry Blynk when Wi-Fi is up but Blynk is not
16void baglantiKontrol() {
17  if (WiFi.status() == WL_CONNECTED && !Blynk.connected()) {
18    Serial.println("Blynk'e yeniden baglaniliyor / reconnecting to Blynk");
19    Blynk.connect(3000);            // en fazla 3 saniye bekle / wait at most 3 seconds
20  }
21}
22
23void setup() {
24  Serial.begin(115200);
25  WiFi.mode(WIFI_STA);
26  WiFi.begin(ssid, pass);           // beklemeden başlat / start without waiting
27  Blynk.config(BLYNK_AUTH_TOKEN);   // yalnız ayarla, bağlanmayı bekleme / configure only, don't block
28  timer.setInterval(10000L, baglantiKontrol);   // 10 saniyede bir kontrol / check every 10 seconds
29}
30
31void loop() {
32  if (Blynk.connected()) {
33    Blynk.run();
34  }
35  timer.run();                      // yerel işler internet yokken de çalışır / local tasks keep running offline
36}

При обрыве связи ESP32 сама пытается переподключиться к Wi-Fi; код лишь заново подключается к Blynk, когда Wi-Fi вернулся. Если нужно шифрование данных, достаточно подключить BlynkSimpleEsp32_SSL.h вместо BlynkSimpleEsp32.h: соединение пойдёт по TLS через порт 443 вместо 80 и заодно пройдёт через блокировки портов в некоторых школьных и офисных сетях. Если не хочется зашивать данные Wi-Fi в код, пример библиотеки Blynk.Edgent › Edgent_ESP32 позволяет ввести имя сети и пароль из приложения Blynk IoT на телефоне; при этом токен авторизации назначается автоматически при добавлении устройства, а код можно обновлять по воздуху (OTA). Тот же код работает и на платах ESP8266: для NodeMCU достаточно взять ESP8266WiFi.h и BlynkSimpleEsp8266.h.

Blynk на Raspberry Pi Pico W с MicroPython

Blynk подходит не только для ESP32. Если на Raspberry Pi Pico W используется MicroPython, достаточно скопировать на Pico через Thonny однофайловую BlynkLib.py из Python-библиотеки Blynk. Учти, что эта библиотека больше активно не развивается и для новых проектов Blynk рекомендует свой MQTT API; тем не менее для учёбы и простых проектов её хватает. Код ниже управляет встроенным светодиодом Pico W через V0 и раз в минуту отправляет в V2 показания встроенного в чип датчика температуры. Создай в Blynk.Console отдельное устройство для Pico W и используй его токен. Если MicroPython в новинку, хорошее начало — статья Основы MicroPython.

MicroPython
1import network, time
2from machine import Pin, ADC
3import BlynkLib                      # BlynkLib.py Pico'da olmalı / BlynkLib.py must be on the Pico
4
5WIFI_SSID = "AgAdi"
6WIFI_PASS = "Sifre123"
7BLYNK_AUTH = "PicoTokeniniBurayaYapistir"
8
9led = Pin("LED", Pin.OUT)            # Pico W dahili LED / Pico W onboard LED
10sensor = ADC(4)                      # yongadaki sıcaklık sensörü / on-chip temperature sensor
11
12wlan = network.WLAN(network.STA_IF)
13wlan.active(True)
14wlan.connect(WIFI_SSID, WIFI_PASS)
15while not wlan.isconnected():
16    time.sleep(0.5)
17print("IP:", wlan.ifconfig()[0])
18
19blynk = BlynkLib.Blynk(BLYNK_AUTH, insecure=True)   # 80 portu, TLS'siz / port 80, no TLS
20
21@blynk.on("V0")
22def v0_yazildi(value):               # uygulamadaki anahtar / switch in the app
23    led.value(int(value[0]))
24
25@blynk.on("connected")
26def baglandi(ping):
27    print("Blynk hazir / ready, ping:", ping, "ms")
28    blynk.sync_virtual(0)            # son V0 değerini iste / ask for the last V0 value
29
30son = time.ticks_ms()
31while True:
32    blynk.run()
33    if time.ticks_diff(time.ticks_ms(), son) >= 60000:   # 60 saniyede bir / every 60 seconds
34        son = time.ticks_ms()
35        volt = sensor.read_u16() * 3.3 / 65535
36        sicaklik = 27 - (volt - 0.706) / 0.001721
37        blynk.virtual_write(2, round(sicaklik, 1))      # V2: sıcaklık / temperature

В этом примере соединение идёт без шифрования через порт 80 с параметром insecure=True: этот вариант расходует меньше всего памяти и соответствует BlynkSimpleEsp32.h на ESP32. Если убрать параметр, библиотека попытается использовать TLS через порт 443. Время в цикле мы отмеряем через ticks_ms, а не time.sleep(), по той же причине, что и на стороне Arduino: если blynk.run() вызывается редко, команды запаздывают и соединение рвётся. Встроенный датчик температуры чипа может расходиться с температурой в комнате на несколько градусов; для настоящих измерений подключи DHT11 или DS18B20.

Идеи проектов с Blynk

  • Умная розетка: включай и выключай настольную лампу или вентилятор через реле из любой точки мира; о подключении реле — в статье Что такое модуль реле?
  • Удалённый полив растений: запускай насос, когда датчик влажности почвы сообщает о сухой земле, и следи за влажностью на графике.
  • Умная теплица: включай вентилятор при росте температуры и влажности и получай уведомление, когда значения переходят порог; подробности в статье Проект умной теплицы.
  • Охранная сигнализация: отправляй критическое уведомление на телефон через logEvent, когда PIR-датчик движения замечает человека.
  • Оповещение об утечке газа: когда газовый датчик MQ-2 переходит порог, включай зуммер и заставь вибрировать телефон.
  • Метеостанция: сравнивай температуру, влажность и давление с BME280 на недельном графике.
  • Контроль дверей и окон: смотри в приложении, не осталась ли дверь открытой, с помощью геркона.

Частые ошибки и их решение

Симптом или сообщениеПричинаРешение
«Please specify your BLYNK_TEMPLATE_ID and BLYNK_TEMPLATE_NAME» при компиляцииСтрок нет, они стоят после #include или используется старый BLYNK_DEVICE_NAMEПоставь три строки #define в самый верх, до include; замени DEVICE_NAME на TEMPLATE_NAME
«'class BlynkWifi' has no member named 'notify'» при компиляцииКоманда Blynk.notify() из старого кода BlynkСоздай событие в шаблоне и используй Blynk.logEvent()
«Invalid auth token» (неверный токен) в мониторе портаТокена нет или он скопирован с ошибкой, устройство удалено или используется токен от старого BlynkСкопируй токен со страницы устройства заново, без пробелов в начале и в конце
После строки «Connecting to AgAdi» ничего не происходитПлата не может подключиться к Wi-Fi: сеть 5 GHz, неверный пароль или слабый сигналИспользуй сеть 2,4 GHz; подробности в руководстве по Wi-Fi на ESP32
«Connecting to blynk.cloud:80» повторяется или «Login timeout»В сети нет интернета или школьная либо офисная сеть блокирует соединениеПопробуй точку доступа с телефона; используй порт 443 с BlynkSimpleEsp32_SSL.h
«Heartbeat timeout», устройство часто OfflineДолгий delay() или блокирующий цикл в loop, слабое питаниеПеренеси ожидания в BlynkTimer, возьми хороший кабель и блок питания
При нажатии на переключатель ничего не происходитВиджет привязан к другому потоку данных или в BLYNK_WRITE другой пинПин в настройках виджета должен совпадать с Vx в коде
Шкала всегда показывает 1 или график пустойУ потока данных Max остался равным 1 или история настроена на Last ValueЗадай Min и Max по диапазону датчика и измени настройку истории
Через какое-то время данные перестают приходить совсемМесячная квота сообщений исчерпанаУвеличь интервал отправки и отправляй только при изменении
Реле работает наоборот или никогда не отпускаетМодуль с активным LOW или сигнала 3,3 V не хватаетПоменяй значение ROLE_AKTIF_LOW и возьми модуль, совместимый с 3,3 V
При поиске неисправностей держись порядка: сначала проверь в мониторе порта подключение к Wi-Fi, затем найди строку «Ready» и только потом сверяй виджеты с потоками данных. Если всё упирается в этап Wi-Fi, загляни в статью ESP32 не подключается к Wi-Fi; если плата перезагружается при включении Wi-Fi, прочитай ESP32: Brownout и Guru Meditation.

Blynk, свой веб-сервер или MQTT?

СпособПлюсыМинусыКогда выбирать
Blynk IoTГотовая панель без написания приложения, доступ вне дома, уведомленияЛимиты бесплатного плана, зависимость от облакаБыстрые прототипы и удалённый мониторинг
Веб-сервер на ESP32Полностью бесплатно, работает без интернетаОбычно доступен только из той же сети, интерфейс пишешь тыПульт управления внутри дома
MQTT и Home AssistantСообщения без лимита, работа в локальной сети, мощная автоматизацияНастройка дольше, нужен постоянно включённый серверПостоянная система умного дома
Telegram-ботБесплатно, идеально для оповещений и командНет графиков и панелиСигнализация и простые команды

Коротко: Blynk — самый простой способ быстро получить результат с готовой красивой панелью и добраться до проекта из-за пределов дома. Если нужна система без лимитов и полностью локальная, прочитай Веб-сервер и WebSocket на ESP32 или ESP32, MQTT и Home Assistant; если хочется просто отправлять оповещения на телефон, загляни в руководство Telegram-бот на ESP32.

Способ проще: BlueGrays IoT

Blynk — гибкая и мощная платформа. Но если нужно просто включать реле или следить за датчиком с телефона, настраивать шаблон, потоки данных, виджеты и токен авторизации вручную может не хотеться. BlueGrays IoT делает это с готовыми шаблонами: выбираешь шаблон в разделе «Мастерская › Мои устройства › Добавить устройство», Ohmi готовит код с ключом твоего устройства, а ты один раз загружаешь его из Arduino IDE с библиотекой BlueGraysIoT. Работает с ESP32 и Raspberry Pi Pico W через Wi-Fi 2,4 GHz, а первое устройство бесплатно; подробности — в руководстве по управлению ESP32 с телефона.

Когда связка шаблона, потока данных и токена авторизации понятна, подключение нового проекта на ESP32 к телефону через Blynk занимает всего несколько минут. Объедини примеры со светодиодом, реле и датчиком из этой статьи — и вот начало собственной системы умного дома. В приложении BlueGrays есть и проекты на ESP32: мигание светодиодом, подключение к Wi-Fi, измерение температуры с DHT22, умное освещение, полив растений и датчик движения с оповещением в Telegram, у каждого пошаговая схема подключения и код.

Частые вопросы

Blynk бесплатный?

Да, у Blynk есть бесплатный план для личного использования. На октябрь 2026 года он даёт 5 устройств, 100 000 сообщений устройства в месяц и 1 неделю истории данных. Для большего числа устройств, сообщений без лимита и более долгого хранения данных нужен платный месячный план.

Где найти токен авторизации Blynk?

В Blynk.Console открой своё устройство в разделе Devices: в Device Info будут строки BLYNK_TEMPLATE_ID, BLYNK_TEMPLATE_NAME и BLYNK_AUTH_TOKEN, готовые для вставки в код. В новом Blynk токен больше не приходит по email, и у каждого устройства свой токен.

Работает ли ещё старое приложение Blynk?

Нет. Старое приложение Blynk (Legacy) убрали из магазинов в 2022 году, а его облачные серверы отключили 31 декабря 2022 года. Старые проекты нужно заново собрать на новой платформе Blynk IoT с шаблонами и потоками данных; большую часть кода для ESP32 можно использовать с небольшими изменениями.

Что такое виртуальный пин в Blynk?

Виртуальный пин — это пронумерованный канал данных между приложением и твоим кодом, он не соответствует физической ножке платы. Номера идут от V0 до V255; значения из приложения читаются через BLYNK_WRITE(Vx), а значения с платы отправляются в приложение через Blynk.virtualWrite(Vx, value). Так можно обрабатывать входящие значения как угодно и выводить данные датчиков на панель.

Почему моя ESP32 в Blynk показывается офлайн?

Самые частые причины: неверный или отсутствующий токен авторизации, попытка ESP32 подключиться к сети 5 GHz, долгие вызовы delay() в loop() и слабое питание. Если строка «Ready» в мониторе порта не появляется, проблема в подключении; если появляется, проверь, что в приложении открыто нужное устройство.

Работает ли Blynk без интернета?

Нет. В Blynk IoT команды и данные идут через Blynk.Cloud, поэтому доступ в интернет нужен и ESP32, и телефону. Для управления без интернета можно использовать собственный веб-сервер ESP32, ESP-NOW или Bluetooth.

Все проекты
Мигающий светодиод на ESP32
#103Новичок

Мигающий светодиод на ESP32

Учит базовой работе с выходами GPIO на ESP32. Эффект мигания получается включением и выключением светодиода с цифрового пина. Это ESP32-версия классического проекта мигания на Arduino UNO; базовые команды мигания в среде Arduino те же, но расположение пинов ESP32 и уровни GPIO 3,3 V отличаются от Arduino UNO.

4.7(37)
99
Мигание встроенным светодиодом ESP32
#106Новичок

Мигание встроенным светодиодом ESP32

Мигание встроенным синим светодиодом на ESP32 DevKit V1. Внешние компоненты не нужны! Первый проект, который стоит попробовать после покупки ESP32. Встроенный светодиод подключён к GPIO 2.

4.8(29)
53
Измерение освещённости модулем LDR на ESP32
#113Новичок

Измерение освещённости модулем LDR на ESP32

Наблюдение в мониторе порта в реальном времени за сырым значением ADC модуля LDR и относительным процентом освещённости, вычисленным по опорным значениям темноты и света. Этот процент — не измерение в люксах. Учит логике калибровки модуля. Идеально выполнить его перед проектом 10, потому что он нужен для определения порога.

4.6(36)
55
Подключение ESP32 к Wi-Fi в режиме STA (с экраном LCD)
#127Продвинутый

Подключение ESP32 к Wi-Fi в режиме STA (с экраном LCD)

В этом проекте ESP32 надёжно и устойчиво к сбоям подключается к домашней сети Wi-Fi в режиме станции (STA). SSID и пароль хранятся в отдельном файле secrets.h, чтобы не утекли в Git; настроено автоматическое переподключение, а уровень сигнала RSSI и IP-адрес выводятся на I2C LCD-экран. Встроенный светодиод служит индикатором состояния. Это менеджер подключения уровня реальных устройств.

4.4(21)
34
Температура и влажность с DHT22 на ESP32 (с LCD-дисплеем)
#117Средний

Температура и влажность с DHT22 на ESP32 (с LCD-дисплеем)

Этот проект измеряет температуру и влажность воздуха датчиком DHT22 и в реальном времени показывает данные на I2C LCD 16x2. Данные читаются с датчика по однопроводному протоколу через библиотеку Adafruit DHT. Проект служит основой для IoT-метеостанций, умного дома или систем мониторинга среды в теплицах. Связь с DHT22 идёт через пин GPIO 4 у ESP32.

4.8(38)
56
Умное освещение на ESP32 (PIR + LDR + реле + OLED)
#141Продвинутый
Premium

Умное освещение на ESP32 (PIR + LDR + реле + OLED)

Сделай умное освещение для коридора, ванной или кладовки на ESP32! С PIR-датчиком движения, датчиком освещённости LDR и модулем реле собирается классический сценарий «свет включается при движении в темноте»: если вокруг уже светло, движение свет НЕ включает, и днём энергия экономится. Свет горит 30 секунд; если движение продолжается, таймер сбрасывается, и свет горит дольше. OLED SSD1306 крупно показывает состояние (ON / DAYTIME / WAITING) и обратный отсчёт.

4.3(6)
11
Сигнализация движения на ESP32 (PIR + зуммер + светодиод + Telegram)
#145Продвинутый
Premium

Сигнализация движения на ESP32 (PIR + зуммер + светодиод + Telegram)

Умная охранная сигнализация, которая при обнаружении движения PIR-датчиком включает зуммер и светодиод и одновременно сразу отправляет владельцу уведомление в Telegram. В ней есть 30-секундная пауза, ограничивающая частоту повторных тревог; этот механизм не проверяет срабатывания PIR и не устраняет ложные тревоги. Подходит для дома, гаража, склада или мастерской. С ESP32-CAM можно добавить уведомления с фото, а с обычной ESP32 DevKit V1 приходят текстовые.

0.0(0)
9