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 не компилируется и как исправить самые частые ошибки подключения.

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






| Деталь | Пин детали | Пин ESP32 | Примечание |
|---|---|---|---|
| Светодиод (по желанию) | Длинная ножка (+) | GPIO 2 | Через резистор 220 Ω; короткая ножка на GND |
| Модуль реле | VCC | VIN / 5V | При питании от USB на этом пине около 5 V |
| Модуль реле | GND | GND | Общая земля |
| Модуль реле | IN | GPIO 26 | Для модуля с активным LOW поставь в коде ROLE_AKTIF_LOW = true |
| DHT11 | VCC | 3V3 | Работает от 3,3–5,5 V |
| DHT11 | DATA | GPIO 4 | Голому датчику нужна подтяжка 10 kΩ; на модулях она уже стоит |
| DHT11 | GND | GND | Общая земля |
Шаг 1: аккаунт Blynk.Cloud и шаблон
- На компьютере открой blynk.cloud, зарегистрируй бесплатный аккаунт на свой email и задай пароль по ссылке из пришедшего письма.
- В меню слева открой Developer Zone › My Templates и нажми + New Template.
- Дай шаблону имя (например, ESP32 Home), выбери оборудование ESP32 и тип подключения WiFi, затем создай шаблон.
- Значения BLYNK_TEMPLATE_ID и BLYNK_TEMPLATE_NAME на странице шаблона пойдут в код; пока просто запомни, где они.
- Если при регистрации появится мастер Quickstart, его можно пропустить: в этом руководстве все шаги делаются вручную, чтобы было видно, зачем нужна каждая настройка.
Шаг 2: потоки данных (V0, V1, V2, V3)
Поток данных — это паспорт виртуального пина: он задаёт номер пина, тип данных (Integer для целых чисел, Double для дробных, String для текста), минимум и максимум, единицу и число знаков после запятой. Открой шаблон в режиме редактирования, перейди на вкладку Datastreams, выбери + New Datastream › Virtual Pin и создай эти четыре канала:
| Виртуальный пин | Имя | Тип данных | Мин – Макс | Единица и знаки | Виджет |
|---|---|---|---|---|---|
| V0 | Светодиод | Integer | 0 – 1 | Нет | Button / Switch |
| V1 | Реле | Integer | 0 – 1 | Нет | Button / Switch |
| V2 | Температура | Double | 0 – 50 | °C, #.# | Gauge, SuperChart |
| V3 | Влажность | Double | 0 – 100 | %, # | Gauge, SuperChart |
Шаг 3: устройство и токен авторизации
Шаблон — это рецепт, а устройство — настоящая плата, сделанная по нему. В меню слева открой Devices, нажми + New Device, через From template выбери шаблон ESP32 Home и дай устройству имя. После создания устройства появится конфигурация из трёх строк: BLYNK_TEMPLATE_ID, BLYNK_TEMPLATE_NAME и BLYNK_AUTH_TOKEN. Скопируй эти строки; позже их можно найти в разделе Device Info на странице устройства (в некоторых версиях интерфейса он называется Developer Tools).
Шаг 4: установка библиотеки Blynk в Arduino IDE
- Если пакет плат ESP32 в Arduino IDE ещё не установлен, сначала установи его; шаги описаны в статье Что такое ESP32?
- Открой «Менеджер библиотек» (Library Manager), введи в поиске Blynk и установи официальную библиотеку Blynk от Volodymyr Shymanskyy. Если спросят о зависимостях, выбери Установить все (Install all).
- Для датчика там же установи DHT sensor library от Adafruit и нужную ей библиотеку Adafruit Unified Sensor. Если что-то не получается, загляни в руководство Как добавить библиотеку в Arduino.
- В меню «Инструменты › Плата» (Tools › Board) выбери ESP32 Dev Module, подключи плату USB-кабелем с передачей данных и выбери правильный порт.
- В библиотеке есть готовые примеры: «Файл › Примеры › Blynk › Boards_WiFi › ESP32_WiFi» — простейший вариант первого скетча ниже.
Первый скетч: включаем и выключаем светодиод с телефона (V0)
В коде ниже замени три верхние строки на скопированные со страницы устройства, а имя и пароль Wi-Fi — на свои. Эти три строки #define должны стоять до строк #include: библиотека ищет эти значения при компиляции и выдаёт ошибку компиляции, если не находит их.
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 мобильная панель и веб-панель настраиваются отдельно; так как обе используют одни и те же потоки данных, изменение с одной сразу видно на другой.
- Установи на телефон приложение Blynk IoT (не старое Blynk или Blynk Legacy) и войди под тем же аккаунтом.
- На странице профиля включи Developer Mode (режим разработчика), затем нажми на шаблон ESP32 Home в Developer Zone.
- Нажимай на пустой холст, чтобы добавить виджеты: по Button или Switch для V0 и V1, Gauge или Labeled Value для V2 и V3 и SuperChart для истории.
- Нажми на каждый виджет и выбери в его настройках нужный поток данных; в SuperChart можно добавить V2 и V3 вместе. Изменения сохраняются автоматически.
- Для веб-панели открой шаблон на редактирование в Blynk.Console, перетащи виджеты на вкладку Web Dashboard, выбери поток данных через значок шестерёнки у каждого виджета и нажми Save.
- В приложении нажми на имя своего устройства и попробуй переключатель: светодиод на GPIO 2 должен загореться сразу, а в мониторе порта появится «V0 = 1».
Реле и датчик: чтение без 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.
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 символов, но буфер отправки в библиотеке маленький, так что лучше писать коротко.
- Открой шаблон в режиме редактирования и перейди на вкладку Events & Notifications.
- Нажми + Create Event, дай событию имя, например «Высокая температура», и задай код события yuksek_sicaklik. Код может содержать только латинские буквы, цифры и подчёркивания и должен в точности совпадать с текстом в скетче.
- Тип события выбери Warning: Info, Warning и Critical задают, насколько серьёзно оповещение. Проверь, что включена запись в журнал (timeline), иначе событие не появится в приложении.
- На вкладке Notifications включи уведомления, получателем выбери свой аккаунт, а каналами — push и email; по желанию ограничь уведомления до одного в час.
- Нажми Save в шаблоне и подтверди обновление устройства. Не забудь разрешить уведомления для приложения Blynk IoT на телефоне.
| Лимит | Значение |
|---|---|
| Событий на устройство в день (logEvent) | 100 |
| Между двумя событиями одного типа | Не меньше 1 секунды |
| Между двумя уведомлениями (push, email) | Не меньше 5 секунд |
| Описание события | До 300 символов |
| Частота запросов на устройство | До 50 в секунду |
| Длина строкового значения | До 1024 байт |
Лимиты бесплатного плана: как посчитать сообщения
Бесплатного плана 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 000 | 2 592 000 | Нет |
| 10 секунд | 259 200 | 518 400 | Нет |
| 30 секунд | 86 400 | 172 800 | Одно значение укладывается, два нет |
| 60 секунд | 43 200 | 86 400 | Укладывается, но с двумя значениями запас небольшой |
| 5 минут | 8640 | 17 280 | Укладывается с запасом |
Подключение, которое не зависает без Wi-Fi
Blynk.begin() прост, но у него есть недостаток: если Wi-Fi или соединение с Blynk не устанавливается, он бесконечно ждёт внутри setup(), и остальная часть программы так и не запускается. В проектах, которые должны работать и при пропаже интернета, вроде термостата или системы полива, подключением лучше управлять вручную. Каркас ниже запускает Wi-Fi без ожидания, через Blynk.config() только применяет настройки и проверяет соединение каждые 10 секунд; тем временем локальные задачи, добавленные в таймер, работают независимо от интернета.
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.
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 |
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
Учит базовой работе с выходами GPIO на ESP32. Эффект мигания получается включением и выключением светодиода с цифрового пина. Это ESP32-версия классического проекта мигания на Arduino UNO; базовые команды мигания в среде Arduino те же, но расположение пинов ESP32 и уровни GPIO 3,3 V отличаются от Arduino UNO.

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

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

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

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

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

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

