Blynk UA

Переклад документації Blynk українською (неофіційний)

Вступ

Цей посібник допоможе вам зрозуміти, як почати використовувати Blynk та надати повний огляд усіх функцій.

Якщо ви хочете перейти прямо до гри з Blynk, перегляньте Початок роботи.

Початок роботи

Як працює Blynk

Blynk був розроблений для Інтернету речей. Він може контролювати апаратне забезпечення віддалено, він може відображати дані датчиків, він може зберігати дані, візуалізувати їх і робити багато інших цікавих речей.

У платформі є три основні компоненти:

Тепер уявіть собі: кожного разу, коли ви натискаєте кнопку в додатку Blynk, повідомлення переходить до простору Хмараи Blynk де воно чарівно знаходить свій шлях до вашого обладнання. Це працює в протилежному напрямку і Blynk бачить все, що відбувається.

Особливості

Ви можете знайти приклади ескізів покриття базових можливостей Blynk. Вони включені в бібліотеку. Всі ескізи спроектовані так, щоб їх було легко об'єднати один з одним.

Що мені потрібно для Blynk?

На цьому етапі ви можете думати: “Гаразд, я хочу це. Що мені потрібно для початку?” – Просто декілька речей, дійсно:

1. Обладнання.

Arduino, Raspberry Pi або аналогічний набір для розробки.

Blynk працює через Інтернет. Це означає, що вибране обладнання повинно мати можливість підключення до Інтернету. Деякі дошки, такі як Arduino Uno для комунікації потрібен Ethernet чи Wi-Fi Shield, інші вже підключені до Інтернету: як ESP8266, Raspberri Pi з WiFi-дошкою, Particle Photon або SparkFun Blynk Board. Але навіть якщо у вас немає шилда, ви можете підключити його через USB до вашого ноутбука або настільного комп'ютера (це трохи складніше для новачків, але ми вас врахували). Що здорово, це те, що список апаратних засобів що працюють з Blynk, величезний і буде продовжувати зростати.

2. Смартфон.

Програма Blynk - це добре розроблений конструктор інтерфейсів. Він працює як на платформі iOS, так і на Android, так що тут немає жартівників, чи не так?

Завантаження

Програми Blynk для iOS або Android

Drawing        Drawing

Blynk бібліотека

Завантажити Бібліотеку Blynk

У випадку, якщо ви забули або не знаєте, як встановити бібліотеки Arduino натисніть тут.

Починаємо

Давайте почнемо працювати через 5 хвилин (читання не враховується!). Ми включимо світлодіод, підключений до вашого Arduino, за допомогою програми Blynk на вашому смартфоні.

Підключіть світлодіодний індикатор, як показано нижче:

Початок роботи з програмою Blynk

1. Створіть обліковий запис Blynk

Після завантаження програми Blynk вам потрібно створити новий обліковий запис Blynk. Цей обліковий запис відокремлений від облікових записів, які використовуються для форуму Blynk, якщо у вас вже є.

Ми рекомендуємо використовувати реальну електронну адресу, тому що це полегшить подальшу роботу.

Чому мені потрібно створити обліковий запис?

Обліковий запис необхідний для збереження ваших проектів та доступу до них з кількох пристроїв з будь-якого місця. Це також запобіжний захід.

Ви завжди можете налаштувати свій власний Приватний Blynk сервер і мати повний контроль.

2. Створити новий проект

Після успішного входу в обліковий запис, почніть із створення нового проекту.

Дайте йому ім'я.

3. Виберіть своє обладнання

Виберіть модель обладнання, яку ви будете використовувати. Перевірте список підтримуваного апаратного забезпечення!

4. Токен аутентифікації

Токен аутентифікації це унікальний ідентифікатор, який необхідний для підключення вашого обладнання до вашого смартфона. Кожен новий проект, який ви створюєте, матиме власний токен аутентифікації. Ви автоматично отримаєте Auth Token електронною поштою після створення проекту. Ви також можете скопіювати його вручну. Клацніть на розділі пристроїв :

Натисніть на пристрій :

І ви побачите токен :

ПРИМІТКА: Не повідомляйте свій Auth Token нікому, крім випадків, коли ви хочете, щоб хтось мав доступ до вашого устаткування.

Це дуже зручно надсилати електронною поштою. Натисніть кнопку електронної пошти, і токен буде відправлений на адресу електронної пошти, яку ви використовували для реєстрації. Ви також можете торкнутися лінії Token і буде скопійовано в буфер обміну.

Тепер натисніть на “Create” кнопку.

5. Додайте віджет

Полотно Вашого проекту порожнє, давайте додамо кнопку, щоб контролювати світлодіод.

Торкніться будь-де на полотні, щоб відкрити вікно віджета. Всі доступні віджети розміщені тут. Тепер оберіть кнопку.

Вікно віджетів

Drag-n-Drop - Натисніть і утримуйте віджет, щоб перетягнути його до нової позиції.

Параметри віджетів - Кожен віджет має власні налаштування. Натисніть на віджет, щоб дістати до них.

Найважливішим параметром для встановлення є PIN . Список штифтів відображає фізичні контакти, визначені вашим обладнанням. Якщо ваш LED підключений до Digital Pin 8 - тоді виберіть D8 (D - означає Digital - цифровий).

6. Запустіть проект

Коли ви закінчите з налаштуваннями, натисніть кнопку PLAY. Це переключить з режиму EDIT в режим PLAY, де ви можете взаємодіяти з апаратним забезпеченням. Перебуваючи в режимі PLAY, ви не зможете перетягувати або налаштувати нові віджети, натисніть STOP і повернутися до режиму EDIT.

Ви отримаєте повідомлення "Arduino UNO is offline". Ми розглянемо це у наступному розділі.

Початок роботи з обладнанням

Як використовувати прикладу скетчу

Тепер на вашому комп'ютері має бути встановлена бібліотека Blynk. Якщо ні - натисніть тут.

Приклади скетчів допоможуть швидко отримати ваш апаратне забезпечення та великі функції Blynk.

Відкрийте приклад скетчу відповідно до апаратної моделі чи екрану, який ви використовуєте.

Давайте подивимося на приклад скетчу для Arduino UNO + Ethernet shield

#define BLYNK_PRINT Serial
#include <SPI.h>
#include <Ethernet.h>
#include <BlynkSimpleEthernet.h>

char auth[] = "YourAuthToken";

void setup()
{
  Serial.begin(9600); // See the connection status in Serial Monitor
  Blynk.begin(auth);  // Here your Arduino connects to the Blynk Cloud.
}

void loop()
{
  Blynk.run(); // All the Blynk Magic happens here...
}

Auth Token

У цьому прикладі ескізу знайдіть цей рядок:

char auth[] = "YourAuthToken";

Це Auth Token що ви надіслали собі по електронній пошті. Будь ласка, перевірте свою електронну пошту та скопіюйте його, а потім вставте в лапки.

Він має виглядати подібним до цього:

char auth[] = "f45626c103a94983b469637978b0c78a";

Завантажте скетч до плати та відкрийте послідовний термінал. Зачекайте, поки ви побачите щось на зразок цього:

Blynk v.X.X.X
Your IP is 192.168.0.11
Connecting...
Blynk connected!

Вітаю! Ви всі налаштовані! Тепер ваше обладнання підключено до Cloud Blynk!

Blynking

Поверніться до програми Blynk, натисніть кнопку та вимкніть світлодіоди! Це має бути Blynking.

Перевірте інші приклади скетчів.

Не соромтеся експериментувати та об'єднувати різні приклади разом, щоб створити власні вражаючі проекти.

Наприклад, щоб приєднати світлодіод до PWM Pin на вашому Arduino, встановіть віджет слайдера, щоб керувати яскравістю світлодіодів. Просто використовуйте ті самі кроки, описані вище.

Налаштування апаратного забезпечення

Arduino через USB (без шилда)

Якщо у вас немає шилда, а ваше обладнання не має ніякого підключення, ви все ще можете використовувати Blynk - безпосередньо через USB :

  1. Open Arduino послідовний приклад USB і змінити Auth Token

     // You could use a spare Hardware Serial on boards that have it (like Mega)
     #include <SoftwareSerial.h>
     SoftwareSerial DebugSerial(2, 3); // RX, TX
    
     #define BLYNK_PRINT DebugSerial
     #include <BlynkSimpleStream.h>
    
     // You should get Auth Token in the Blynk App.
     // Go to the Project Settings (nut icon).
     char auth[] = "YourAuthToken";
    
     void setup()
     {
       // Debug console
       DebugSerial.begin(9600);
    
       // Blynk will work through Serial
       Serial.begin(9600);
       Blynk.begin(auth, Serial);
     }
    
     void loop()
     {
       Blynk.run();
     }
  2. Запустіть скрипт, який зазвичай знаходиться в /scripts папці:

    • Windows:My Documents\Arduino\libraries\Blynk\scripts
    • Mac User$/Documents/Arduino/libraries/Blynk/scripts

У Windows:

Відкрийте cmd.exe

Напишіть свій шлях до папки blynk-ser.bat. Наприклад:

cd C:\blynk-library-0.3.1\blynk-library-0.3.1\scripts

Запустіт файл blynk-ser.bat. Наприклад : blynk-ser.bat -c COM4 (де COM4 - порт з вашим Arduino)

І натисніть "Enter", натисніть "Enter" і натисніть "Enter"

На Linux і Mac:

Перейдіть до папки /scripts. Наприклад:

cd User$/Documents/Arduino/libraries/Blynk/scripts

Всередині цієї папки запустіть:

user:scripts User$ ./blynk-ser.sh

УВАГА: Не закривайте вікно терміналу запущеним сценарієм.

У деяких випадках вам також може знадобитися виконати :

user:scripts User$ chmod +x blynk-ser.sh

Вам також може знадобитися запустити його sudo

user:scripts User$ sudo ./blynk-ser.sh

Це те, що ви побачите в додатку терміналу на Mac (адреси usbmodem можуть бути різними):

[ Press Ctrl+C to exit ]
/dev/tty.usbmodem not found.
Select serial port [ /dev/tty.usbmodem1451 ]:

Скопіюйте адресу послідовного порту: /dev/tty.usbmodem1451 і вставте його назад:

Select serial port [ /dev/tty.usbmodem1451 ]: /dev/tty.usbmodem1451

Після натискання клавіші Enter ви побачите вивід, подібний до цього:

Resetting device /dev/tty.usbmodem1451...
Connecting: GOPEN:/dev/tty.usbmodem1451,raw,echo=0,clocal=1,cs8,nonblock=1,ixoff=0,ixon=0,ispeed=9600,ospeed=9600,crtscts=0 <-> openssl-connect:blynk-cloud.com:8441,cafile=/Users/.../server.crt,nodelay
2015/10/03 00:29:45 socat[30438.2046857984] N opening character device "/dev/tty.usbmodem1451" for reading and writing
2015/10/03 00:29:45 socat[30438.2046857984] N opening connection to LEN=16 AF=2 45.55.195.102:8441
2015/10/03 00:29:45 socat[30438.2046857984] N successfully connected from local address LEN=16 AF=2 192.168.0.2:56821
2015/10/03 00:29:45 socat[30438.2046857984] N SSL connection using AES128-SHA
2015/10/03 00:29:45 socat[30438.2046857984] N starting data transfer loop with FDs [3,3] and [4,4]

ПРИМІТКА: Arduino IDE може поскаржитися, "programmer is not responding". Перед завантаженням нового ескізу потрібно скасувати сценарій.

Додаткові матеріали:

Raspberry Pi

  1. Під'єднайте Raspberry Pi до Інтернету та відкрийте консоль.
  2. Запустіть цю команду (вона оновлює ваш сховище пакетів OS, щоб включити необхідні пакунки).:

     curl -sL "https://deb.nodesource.com/setup_6.x" | sudo -E bash -
  3. Завантажте та створіть бібліотеку Blynk JS за допомогою npm:

     sudo apt-get update && sudo apt-get upgrade
     sudo apt-get install build-essential
     sudo npm install -g npm
     sudo npm install -g onoff
     sudo npm install -g blynk-library
  4. Запустіть сценарій тестування Blynk (введіть свій авторизований токен):

     blynk-client 715f8cafe95f4a91bae319d0376caa8c
  5. Ви можете написати наш власний сценарій на основі прикладів

  6. Щоб увімкнути Blynk для автоматичного перезапуску для Pi, знайдіть /etc/rc.local файл і додати туди:

     node full_path_to_your_script.js <Auth Token>

Додаткові матеріали:

Примітка: Замість того, щоб використовувати Node.js, ви також можете створити версію бібліотеки C++ (таку ж, як Arduino, WiringPi): - Library README for Linux - Blynk Community Topic: How-To Raspberry Pi - Відео уроки - Налаштування Blynk та Raspberry Pi:

ESP8266 Standalone

Ви можете запустити Blynk безпосередньо на ESP8266!

Встановіть останню бібліотеку ESP8266 для Arduino, використовуючи це керівництво.

Приклад ескізу: ESP8266_Standalone

Додаткові матеріали:

Крок за кроком підручник російською мовою

NodeMCU

Будь ласка Слідуйте це докладна інструкція. Або дивись цей відео-підручник.

Arduino + ESP8266 WiFi з AT командами

Цей тип з'єднання не рекомендується для початківців.
Якщо ви хочете спробувати, уважно прочитайте цю довідкову тему Примітка: Деякі плати, такі як Arduino UNO WiFi від Arduino.org, не використовують AT команди (і не надають відповідних бібліотек), тому вони стають непридатними для використання в Blynk.

Частинка

Blynk працює з усією сім'єю виробів Particle: Core, Photon та Electron

  1. Відкритий Particle Web IDE.
  2. Переходьте до бібліотек.
  3. Шукайте Blynk в бібліотеках спільноти та натисніть на неї
  4. Відкритий 01_PARTICLE.INO приклад
  5. Натисніть “use this example”
  6. Вставте свій Auth Token тут: char auth[] = "YourAuthToken"; і прошийте Particle!

Ви можете сканувати цей QR-код з програми Blynk, і ви отримаєте готовий для тестування проект для Particle Photon. Просто введіть Auth Token в 01_PARTICLE.INO приклад.

Додаткові матеріали:

Blynk основні операції

Віртуальні піни

Blynk може керувати цифровими та аналоговими виводами I/O безпосередньо на вашому апаратному забезпеченні. Вам навіть не потрібно писати код для нього. Це чудово підходить для блимання світлодіодів, але часто цього просто не вистачає ...

Ми розробили віртуальні штифти, щоб відправити будь-якиі дані від вашого мікроконтролера до програми Blynk та назад.

Все, що ви підключаєте до вашого устаткування, зможе поговорити з Blynk-ом. За допомогою віртуальних пінів ви можете відправити щось з додатка, обробити його на мікроконтролері, а потім відправити його назад на смартфон. Ви можете запускати функції, читати пристрої I2C, перетворювати значення, керувати сервоприводом та постійними струмами тощо.

Віртуальні піни можуть використовуватися для взаємодії з зовнішніми бібліотеками (Servo, LCD та ін.) Та впровадженням власних функцій.

Обладнання може надсилати дані до віджетів над віртуальним піном, як це:

Blynk.virtualWrite(pin, "abc");
Blynk.virtualWrite(pin, 123);
Blynk.virtualWrite(pin, 12.34);
Blynk.virtualWrite(pin, "hello", 123, 12.34);

Для отримання додаткової інформації про віртуальні контакти, прочитай це

Надіслати дані з програми на апаратне забезпечення

Ви можете надсилати будь-які дані з віджетів у додаток на своє обладнання.

Всі Віджети контролера може передавати дані на віртуальні піни на вашому апаратному забезпеченні. Наприклад, наведений нижче код показує, як отримати значення з елемента керування в App

BLYNK_WRITE(V1) //Button Widget is writing to pin V1
{
  int pinData = param.asInt(); 
}

Коли ви натискаєте кнопку, Blynk App надсилає 1 На другий натиск - відправляє 0

Так налаштовується Віджет кнопки:

Повний приклад скетчу: Отримати дані

Відправлення масиву з віджету

Деякі віджети (наприклад, джойстик, zeRGBa) мають більше одного виходу.

Цей вихід можна записати до Virtual Pin як масив значень. На стороні апаратного забезпечення - ви можете отримати будь-який елемент масиву [0,1,2 ...] за допомогою:

BLYNK_WRITE(V1) // Widget WRITEs to Virtual Pin V1
{   
  int x = param[0].asInt(); // getting first value
  int y = param[1].asInt(); // getting second value
  int z = param[N].asInt(); // getting N value
}

Sketch: JoystickTwoAxis

Отримайте дані від апаратного забезпечення

Існує два способи натискання даних вашого апаратного забезпечення на віджети в додатку через віртуальні контакти.

Виконайте запити віджета

BLYNK_READ(V5) // Widget in the app READs Virtal Pin V5 with the certain frequency
{
  // This command writes Arduino's uptime in seconds to Virtual Pin V5
  Blynk.virtualWrite(5, millis() / 1000);
}

Sketch: PushDataOnRequest

Надсилання даних з апаратного забезпечення

Якщо вам потрібен сенсор PUSH або інші дані з вашого апаратного забезпечення до віджету, ви можете написати будь-яку потрібну логіку. Просто встановіть частоту в режимі PUSH. Будь-яка команда, яка передає обладнання Blynk Cloud автоматично зберігається на сервері і ви отримуєте цю інформацію або з History Graph віджета або з HTTP API.

Ми рекомендуємо надсилати дані з інтервалами та уникати Flood Error.
Ви можете використовувати таймери, як BlynkTimer.
Будь ласка, прочитайте інструкції всередині цього прикладу скетчу для більш детальної інформації.

Ось як це може працювати:

#include <SPI.h>
#include <Ethernet.h>
#include <BlynkSimpleEthernet.h>

char auth[] = "YourAuthToken"; // Put your token here

BlynkTimer timer; // Create a Timer object called "timer"! 

void setup()
{
  Serial.begin(9600);
  Blynk.begin(auth);

  timer.setInterval(1000L, sendUptime); //  Here you set interval (1sec) and which function to call 
}

void sendUptime()
{
  // This function sends Arduino up time every 1 second to Virtual Pin (V5)
  // In the app, Widget's reading frequency should be set to PUSH
  // You can send anything with any interval using this construction
  // Don't send more that 10 values per second

  Blynk.virtualWrite(V5, millis() / 1000);
}

void loop()
{
  Blynk.run(); // all the Blynk magic happens here
  timer.run(); // BlynkTimer is working...
}

Sketch: PushData

State syncing

Для апаратного забезпечення

Якщо ваше апаратне забезпечення втрачає підключення до Інтернету або скидає значення, ви можете відновити всі значення з віджетів у додатку Blynk.

BLYNK_CONNECTED() {
    Blynk.syncAll();
}

//here handlers for sync command
BLYNK_WRITE(V0) {
   ....
}

Команда Blynk.syncAll() відновлює всі значення віджету на основі останніх збережених значень на сервері. Всі аналогові та цифрові піни будуть відновлені. Кожен віртуальний пристрій буде виконуватися BLYNK_WRITE події.

Sync Hardware with App state

You can also update a single Virtual Pin value by calling Blynk.syncVirtual(V0) or you can update several pins with Blynk.syncVirtual(V0, V1, V2, ...).

You can also use server to store any value without widget. Just call Blynk.virtualWrite(V0, value).

Storing single value on server

Storing multiple values on server

For app

If you need to keep your hardware in sync with Widgets’ state even if app is offline use Blynk.virtualWrite.

Уявіть, що у вас є світлодіодний віджет, підключений до програми Virtual Pins V1, і фізична кнопка, прикріплена до вашого обладнання. Коли ви натискаєте фізичну кнопку, ви очікуєте побачити оновлений стан світлодіодного віджета в додатку. Для досягнення цього потрібно відправити Blynk.virtualWrite(V1, 255) коли натискається фізична кнопка.

Представте фізичний стан кнопки за допомогою світлодіодного віджета з перериваннями

Представте фізичну кнопку за допомогою світлодіодного віджета з опитуванням

Представте фізичну кнопку за допомогою кнопки віджета з опитуванням

Керування кількома пристроями

Додаток Blynk підтримує кілька пристроїв. Це означає, що ви можете призначити будь-який віджет для певного пристрою за допомогою власного токену. Наприклад, у вас може бути кнопка на V1, яка керує Wi-Fi лампочкою A та іншою кнопкою на V1, яка контролює Wi-Fi лампу B. Для цього вам потрібно більше одного пристрою у вашому проекті. Для цього перейдіть до налаштувань проекту та натисніть розділ "Пристрої" :

Ви побачите список пристроїв :

Таким чином, ви можете додати новий пристрій :

Після вищезгаданих кроків у кожного віджету буде ще одне поле "Target" :

Тепер вам потрібно призначити віджет на пристрій, після чого віджет буде керувати лише цим конкретним пристроєм.

Це воно! Тепер вам потрібно завантажити ескізи з правильними Auth Tokens на ваш апаратне забезпечення.

Tags

Функція тегів дозволяє групувати кілька пристроїв. Теги дуже корисні, якщо ви хочете керувати кількома пристроями з одним віджетом. Наприклад, уявіть собі випадок, коли у вас є 3 розумні лампочки, і ви хочете включити всі ці лампи одним натисненням кнопки. Вам потрібно призначити 3 пристрою на 1 тег і призначити тег для кнопки. Ось і все.

Теги віджетів також підтримують синхронізацію стану. Таким чином ви можете отримати стан віджетів зі свого апаратного забезпечення. Однак ви не можете оновити стан таких віджетів від апаратного забезпечення.

Пристрої онлайн статус

Додаток Blynk підтримує онлайн-статуси для кількох пристроїв.

У ідеальному світі, коли пристрій закриває TCP з'єднання з деякими connection.close() - пов'язаний сервер отримає сповіщення про закрите з'єднання. Таким чином, ви можете отримати миттєве оновлення статусу в інтерфейсі користувача. Однак в реальному житті це в основному виняткова ситуація. У більшості випадків немає простих і швидких способів з'ясувати, що зв'язок більше не активний.

Ось чому блінк використовує HEARTBEAT механізм За допомогою цього підходу апарат періодично надсилає ping команда із заздалегідь визначеною інтервал (10 секунд за замовчуванням) BLYNK_HEARTBEAT властивості). У випадку, якщо апаратне забезпечення не надсилає нічого протягом 10 секунд, сервер чекає додаткових 5 секунд, після чого пристрій вважається що зєднання пропало та закрито сервером. Таким чином, в інтерфейсі користувача ви побачите статус підключення лише після 15 секунд, коли це станеться.

Ви також можете змінити HEARTBEAT інтервал від апаратної сторони через Blynk.config. В такому разі newHeartbeatInterval * 2.3 формула буде застосована. Отже, якщо ви вирішили встановити HEARTBEAT інтервал до 5 секунд. Ви отримаєте повідомлення про зв'язок із затримкою 11 сек у найгіршому випадку.

Параметри проекту

У кожного проекту є власні налаштування:

Змінити властивості віджету

Також підтримується зміна деяких властивостей віджетів з боку апаратного забезпечення.
Наприклад, ви можете змінити колір світлодіодного віджета на основі умови:

//change LED color
Blynk.setProperty(V0, "color", "#D3435C");

//change LED label
Blynk.setProperty(V0, "label", "My New Widget Label");

//change MENU labels
Blynk.setProperty(V0, "labels", "Menu Item 1", "Menu Item 2", "Menu Item 3");

Встановити властивість для одного значення поля

Встановіть властивість для багатозначного поля

ПРИМІТКА : Зміна цих параметрів працює лише для віджетів, доданих до віртуальних пінів (аналогові/цифрові штирі не працюють).

Підтримуються чотири властивості віджету - color, label, min, max для всіх віджетів :

label це рядок для мітки всіх віджетів.

color це рядок в HEX формат (у формі: #RRGGBB, де RR (червоний), GG (зелений) та BB (синій) шістнадцяткові значення між 00 і FF). Наприклад:

#define BLYNK_GREEN     "#23C48E"
#define BLYNK_BLUE      "#04C0F8"
#define BLYNK_YELLOW    "#ED9D00"
#define BLYNK_RED       "#D3435C"
#define BLYNK_DARK_BLUE "#5F7CD8"

На стороні прошивки також підтримуються об'єкти віджета setLabel() і setColor() функції.

Специфічні властивості віджету:

Button

onLabel є рядком для позначення увімкненої кнопки;

offLabel це рядок для позначення вимкненої кнопки;

Music Player

isOnPlay це логічне значення приймає true/false.

Blynk.setProperty(V0, "isOnPlay", "true");

Меню

labels це список рядків для вибору віджета меню;

Blynk.setProperty(V0, "labels", "label 1", "label 2", "label 3");

Потокове відео

Blynk.setProperty(V1, "url", "http://my_new_video_url");

Ви також можете змінити властивості віджетів за допомогою HTTP API.

Обмеження та рекомендації

Віджети

Віджети - це модулі інтерфейсу. Кожен з них виконує певну функцію вводу/виводу при спілкуванні з апаратним забезпеченням.

Існує 4 типи віджетів:

Кожен віджет має власні налаштування.

Деякі віджети (наприклад Bridge Widget) використовуються для ввімкнення деяких функцій, і вони не мають жодних налаштувань.

Загальні налаштування віджету

Вибір піна

Це один з основних параметрів, які потрібно встановити. Він визначає, яким піном можна керувати або читати.

Digital Pins - представляють собою фізичні цифрові піни IO на вашому апаратному забезпеченні. Піни з підтримкою PWM позначені символом ~

Analog Pins - представляють фізичні аналогові IO піни на вашому апаратному забезпеченні

Virtual Pins - не мають фізичного представлення. Вони використовуються для будь-якої передачі даних між програмою Blynk та вашим обладнанням. Дізнайтеся більше про Віртуальні піни тут.

Data Mapping

Якщо ви хочете відобразити вхідні значення до певного діапазону, ви можете використовувати кнопку відображення :

Скажімо, ваш датчик передає значення від 0 до 1023. Але ви хочете відображати значення в діапазоні від 0 до 100 в додатку. Якщо ввімкнуто відображення даних, вхідне значення 1023 буде відображено до 100.

SPLIT/MERGE

Деякі віджети можуть надсилати більше одного значення. І за допомогою цього вимикача ви можете контролювати, як відправити їх.

Send On Release

Цей параметр доступний для більшості віджетів контролера та дозволяє зменшити трафік даних на вашому апаратному забезпеченні. Наприклад, коли ви переміщаєте віджет джойстика, команди постійно потокуються на апаратне забезпечення, під час переміщення одного джойстика ви можете надсилати десятки команд. Є випадки використання, де це необхідно, однак створення такого навантаження може спричинити скидання апаратного забезпечення. Ми рекомендуємо ввімкнути Send On Release функцію для більшості випадків, якщо вам не потрібно миттєвого зворотного зв'язку. Цей параметр ввімкнено за умовчанням.

Write interval

Аналогічно варіанту вище . Тим не менш, ви можете передавати значення на ваш апаратне забезпечення протягом певного інтервалу. Наприклад, встановлення інтервалу запису до 100 мс - означає, що під час переміщення слайдера лише 1 значення буде передано на апаратне забезпечення протягом 100 мс. Цей параметр також використовується для зменшення трафіку даних на вашому апаратному забезпеченні.

Color gradient

Деякі віджетні дисплеї мають можливість вибору градієнта. Градієнт дозволяє розфарбувати віджети без кодування. На даний момент ми надаємо 2 типи градієнтів :

Градієнт змінює колір вашого віджету на основі властивостей min / max. Наприклад, ви вибираєте теплий градієнт для свого віджета дисплея рівня з мінімальним значенням 0 і не більше 100 значень. Коли значення 10 приходить до віджету, він буде зеленим кольором, коли значення 50 з'явиться, ви побачите помаранчевий колір, коли значення 80 з'явиться, ви побачите червоний колір.

Controllers

Button

Працює в режимах переключення або перемикання. Дозволяє надсилати значення 0/1 (LOW / HIGH). Кнопка натиснута - надсилає 1 (HIGH) і надсилає 0 (LOW) при відпусканні.

Sketch: BlynkBlink

Slider

Подібний до потенціометра. Дозволяє надсилати значення між MIN і MAX.

Sketch: BlynkBlink

Timer

Таймер активізує дії в певний час. Навіть якщо смартфон знаходиться поза мережею. Час початку відправляє 1 (HIGH). Час зупинки відправляє 0 (LOW).

Нещодавня версія Android також покращила таймер у віджеті Eventor. З події Eventor Time ви можете призначити кілька таймерів на одному піні, відправити будь-яке рядок/значення, вибрати дні та часовий пояс. Рекомендується використовувати Eventor за допомогою віджета таймера. Однак віджет Таймер все ще підходить для простих подій таймера.

NOTE: Віджет таймера залежить від часу сервера, а не вашого часу телефону. Іноді час телефону може не співпадати з часом сервера.

Sketch: Timer

Joystick

Контроль серводвигунів у 4 напрямках

Settings:

Коли він увімкнений, Джойстик автоматично повертається, якщо ви використовуєте свій смартфон у альбомній орієнтації
- Auto-Return - Коли він вимкнений, рукоятка джойстика не повернеться до центральної позиції. Він залишиться там, де ви його залишили.

Sketch: JoystickTwoAxis

zeRGBa

zeRGBa це звичайний контролер RGB (вибір кольорів).

Налаштування:

ПРИМІТКА: У цьому режимі ви надсилаєте декілька команд з одного віджета, що може знизити ефективність вашого обладнання.

Приклад: Якщо у вас є віджет zeRGBa і він встановлений на D1, D2, D3, він надсилатиме 3 команди через Інтернет:

digitalWrite(1, r);
digitalWrite(2, g);
digitalWrite(3, b);

Цей режим можна використовувати тільки з Virtual Pins.

Приклад: додайте віджет zeRGBa та встановіть його в режим MERGE. Виберіть віртуальний контакт V1.

BLYNK_WRITE(V1) // zeRGBa assigned to V1 
{
    // get a RED channel value
    int r = param[0].asInt();
    // get a GREEN channel value
    int g = param[1].asInt();
    // get a BLUE channel value
    int b = param[2].asInt();
}

Step Control

Крок управління - це як 2 кнопки, призначені для 1 штир. Одна кнопка збільшує значення за бажаним кроком, а інший зменшує його. Це дуже корисно для випадків використання, коли вам потрібно дуже точно змінити свої значення, і ви не можете досягти цієї точності за допомогою слайдера.

Send Step Параметр дозволяє вам відправити кроки до апаратного забезпечення замість фактичного значення кроку віджета. Loop value параметр дозволяє відновити етап віджету, щоб почати значення, коли досягнуто максимальне значення.

Sketch: Basic Sketch

Displays

Value Display

Відображає вхідні дані з ваших сенсорів або віртуальних контактів.

Sketch: BlynkBlink

Labeled Value

Відображає вхідні дані з ваших сенсорів або віртуальних контактів. Це краща версія "Значення дисплея", оскільки воно має лінію форматування, так що ви можете відформатувати вхідне значення будь-якому бажаному рядку.

Sketch: BlynkBlink

Параметри форматування

Наприклад: ваш датчик передає значення 12.6789 до програми Blynk. Наступні формати параметри підтримуються:

/pin/ - відображає значення без форматування (12.6789)

/pin./ - відображає округлену величину без десяткової частини (13)

/pin.#/ - відображає значення з 1 десятковою цифрою (12.7)

/pin.##/ - відображає значення з двома десятковими знаками (12.68)

LED

Простий індикатор для індикації. Вам потрібно надіслати 0, щоб вимкнути світлодіод. І 255, щоб включити світлодіод. Або просто використовуйте Blynk API, як описано нижче:

WidgetLED led1(V1); //register to virtual pin 1
led1.off();
led1.on();

Всі значення між 0 і 255 змінять яскравість світлодіодів :

WidgetLED led2(V2);
led2.setValue(127); //set brightness of LED to 50%.

Sketch: LED

Gauge

Відмінний візуальний спосіб відображення вхідних числових значень.

Sketch: BlynkBlink

Параметри форматування

Наприклад: ваш датчик передає значення 12.6789 до програми Blynk. Наступні формати параметри підтримуються:

/pin/ - відображає значення без форматування (12.6789)

/pin./ - відображає округлену величину без десяткової частини (13)

/pin.#/ - відображає значення з 1 десятковою цифрою (12.7)

/pin.##/ - відображає значення з двома десятковими знаками (12.68)

LCD

Це звичайний РК-дисплей 16x2, виготовлений на нашому секретному об'єкті в Китаї.

SIMPLE / ADVANCED MODE

Commands

Вам потрібно використовувати спеціальні команди за допомогою цього віджета:

lcd.print(x, y, "Your Message");

Де x - позиція символу (0-15), y - ідентифікатор рядка (0 або 1),

lcd.clear();

Sketch: Розширений режим LCD Sketch: LCD Simple Mode Pushing Sketch: LCD Простий спосіб натискання

Параметри форматування

Наприклад: ваш датчик передає значення 12.6789 до програми Blynk. Наступні формати параметри підтримуються:

/pin/ - відображає значення без форматування (12.6789)

/pin./ - відображає округлену величину без десяткової частини (13)

/pin.#/ - відображає значення з 1 десятковою цифрою (12.7)

/pin.##/ - відображає значення з двома десятковими знаками (12.68)

SuperChart

SuperChart використовується для візуалізації живих та історичних даних. Ви можете використовувати його для даних датчиків, для ведення журнал двійкових подій і багато іншого.

Щоб використовувати віджет SuperChart, вам потрібно буде натискати дані з апаратного забезпечення з потрібним інтервалом за допомогою таймерів.
Ось основний приклад для натискання даних.

Взаємодії:

Тоді ви зможете прокрутити дані назад і вперед протягом заданого діапазону часу.

Просто поверніть телефон у портретний режим. Діаграма повинна обертатися автоматично. У повноекранному режимі ви побачите X (час) та кілька Y масштабів. Повноекранний режим може бути відключений від налаштувань віджетів.

Налаштування SuperChart:

Налаштування Datastream

Віджет підтримує до 4 Datastreams. Натисніть піктограму параметрів Datastream, щоб відкрити Настройки Datastream.

Дизайн: Виберіть доступні типи графіків:

Color: Виберіть суцільні кольори або градієнти

Джерело та вхідні дані: Ви можете використовувати 3 типи джерела даних:

1. Virtual Pin Виберіть потрібний пристрій та віртуальний PIN, щоб прочитати дані з.

2. Tags SuperChart може збирати дані з кількох пристроїв за допомогою вбудованих функцій агрегації. Наприклад, якщо у вас є 10 температурних датчиків, що відправляють температуру з заданим періодом, ви можете побудувати середнє значення від 10 датчиків на віджеті.

To use Tags:

Доступні функції:

☝️ ВАЖЛИВО: мітки не працюють у режимі Live.

  1. Device Selector Якщо ви додаєте до вашого проекту віджета вибору пристрою, ви можете використовувати його як джерело для SuperChart. У цьому випадку, коли ви змінюєте пристрій у Device Selector, діаграма буде оновлено відповідно

Параметри осі Y
Існує два режими масштабування даних вздовж осі Y

  1. Values
    Якщо вибрано цей режим, масштаб Y буде встановлено до вибраних вами значень. Наприклад, якщо ваш апаратне забезпечення передає дані зі значеннями від -100 до 100, ви можете встановити діаграму до цих значень і даних будуть виправлені правильно.

Ви також можете переглядати дані в певному діапазоні. Скажімо, що вхідні дані мають значення в діапазоні 0-55, але ви хочете бачити лише значення в діапазоні 30-50. Ви можете встановити його, і якщо значення не входять у шкалу Y, яку ви налаштовували, діаграма буде обрізана

  1. % висоти
    Ця опція дозволяє автоматично масштабувати вхідні дані на віджеті та розташовувати їх так, як ви хочете. У цьому режимі ви встановлюєте відсоток висоти віджетів на екрані, від 0% до 100%.

Якщо ви встановите 0-100%, насправді це повна автоматична шкала. Незалежно від того, в якому діапазоні дані надходять,
це буде завжди масштабується до всієї висоти віджету.

Якщо ви встановите його на 0-25%, то ця діаграма відображатиметься лише на 1/4 висоти віджету:

Цей параметр дуже корисний для Binary Chart або для візуалізації декількох типів даних на тій же схемі іншим способом.

Suffix:
Тут ви можете вказати суфікс, який буде показано під час натискання кнопки

З'єднати пропущені точки даних
Якщо цей перемикач увімкнено, тоді SuperChart підключатиме всі точки, навіть якщо цього не булоa

Якщо його встановлено на OFF, то ви побачите прогалини у випадку відсутності даних.

Параметри Binary Chart
Такий тип діаграми корисний для нанесення подвійних даних, наприклад, коли пристрій було ввімкнено або вимкнено, або коли рух було виявлено або коли певний пороговий показник був досягнутий.

Вам потрібно вказати FLIP точку, в якій вхідні дані будуть перетворюватися в стан TRUE або FALSE.

Наприклад, ви надсилаєте дані в діапазоні від 0 to 1023. Якщо ви встановите 512 як FLIP точку, то все вище 512 (за винятком 512) буде записано як TRUE,будь-яке значення нижче 512 (включаючи 512) буде FALSE.

Інший приклад, якщо ви надішлете 0 and 1 і встановите 0 як FLIP точку, то 1 буде TRUE, 0 буде FALSE

State Labels:
Тут ви можете вказати, як це зробити TRUE/FALSE повинен відображатися в режимі Tap'n'Hold.

Наприклад, ви можете встановити на TRUE на позначку “Equipment ON”, FALSE на “Equipment OFF”.

Graph

Легко складайте вхідні дані з вашого проекту в різних дизайнах.

Sketch: BlynkBlink

History Graph

Дозволяє переглядати будь-які дані, які ваше обладнання раніше відправило на сервер. Історія графа має 3 градації :

Це означає, що мінімальний інтервал оновлення графіка - 1 хвилина для періодів 1h і 6h. 1 година для періодів 1d і 1w. 1 день для періодів 1m і 3m. Оскільки Blynk Cloud вільно використовується, ми маємо обмеження на кількість даних, які ви можете зберігати. В даний час Blynk Хмара приймає 1 повідомлення в хвилину з піна. Якщо ви надсилаєте свої дані частіше, ваші значення будуть усереднені. Наприклад, у випадку, якщо ви надішлете значення 10 в 12:12:05 і знову 12 в 12:12:45 як результат у графіку історії ви побачите значення 11 для 12:12.

Щоб переглянути дані в графіку історії, потрібно використовувати будь-які віджети з інтервалом "Frequency reading" (у цьому випадку ваш додаток має бути відкритим та запущений) або ви можете використовувати Blynk.virtualWrite на апаратній стороні. Кожна команда Blynk.virtualWrite автоматично зберігається на сервері. У такому випадку вам не потрібно, щоб програма була запущена і працювала працювала.

Ви також можете легко очистити дані для вибраних штифтів або отримати всі дані для штифтів електронною поштою - просто проведіть ліворуч на графіку історії та натисніть "Erase data".

Ви також можете отримати контактні дані через HTTP API.

Sketch: PushData

Terminal

Відображає дані з вашого апаратного забезпечення. Дозволяє надіслати будь-який рядок на ваше обладнання. Термінал завжди зберігає останні 25 повідомлень, які ваше обладнання відправило в Blynk Cloud. Цей ліміт може бути збільшений на локальний сервер із властивістю terminal.strings.pool.size.

Вам потрібно використовувати спеціальні команди за допомогою цього віджета:

terminal.print();   // Print values, like Serial.print
terminal.println(); // Print values, like Serial.println()
terminal.write();   // Write a raw data buffer
terminal.flush();   // Ensure that data was sent out of device

Sketch: Terminal

Video Streaming

Простий віджет, який дозволяє відображати будь-який живий потік. Віджет підтримує RTSP (RP, SDP), HTTP/S прогресивний потік, HTTP/S потокове передавання. Більш детальну інформацію можна отримати за офіційною документацією Android.

На даний момент Blynk не надає потокових серверів. Таким чином, ви можете потік безпосередньо з камери, використовувати 3-д партійні або хост-сервер на своєму сервері (наприклад, на raspberry).

Ви також можете змінити URL-адресу відео з обладнання за допомогою :

Blynk.setProperty(V1, "url", "http://my_new_video_url");

Level Display

Відображає вхідні дані з датчиків або віртуальних контактів. Рівень дисплея дуже схожий на прогрес-бар, це дуже приємний і вигадливий вигляд для індикації «заповнених» подій, наприклад, «рівень батареї». Ви можете оновити відображення значення з боку апаратної частини коду :

Blynk.virtualWrite(V1, val);

  1. Кожне повідомлення, яке апаратне надсилає серверу, зберігається автоматично на сервері. Режим PUSH не вимагає, щоб програма
    1. працювала в режимі онлайн або відкривалася.

    Sketch: Push Example

    Notifications

    Twitter

    Віджет Twitter підключає ваш обліковий запис Twitter до Blynk і дозволяє відправляти твіти з вашого обладнання.

    Приклад коду:

    Blynk.tweet("Hey, Blynkers! My Arduino can tweet now!");

    Обмеження :

  • ви не можете надіслати 2 твіти з таким самим повідомленням (це політика Twitter)
  • дозводено відправляти тільки 1 твіт за 15 секунд
  • Sketch: Twitter

    Email

    Віджет електронної пошти дозволяє надсилати електронні листи з вашого обладнання на будь-яку адресу.

    Приклад коду:

    Blynk.email("my_email@example.com", "Subject", "Your message goes here");

    Він також містить поле to. За допомогою цього поля ви можете визначити одержувача електронної пошти в додатку. У цьому випадку вам не потрібно вказувати приймача на Вашому обладнанні :

     Blynk.email("Subject", "Your message goes here");

    Обмнжнння :

    Sketch: Email

    Push Notifications

    Віджет Push Notification дозволяє надсилати push-сповіщення з вашого обладнання на пристрій. В даний час він також містить 2 додаткові опції :

    УВАГА : високий пріоритет сприяє більшій витраті батареї порівняно з звичайними пріоритетними повідомленнями.

    Приклад коду:

    Blynk.notify("Hey, Blynkers! My hardware can push now!");

    Обмнжнння :

    Sketch: PushNotification

    Unicode в повідомленні, електронній пошті, push, …

    Бібліотека обробляє всі рядки як UTF8 Unicode. Якщо ви зіткнулися з проблемами, спробуйте надрукувати повідомлення на серійний номер і перевірте, чи працює він (термінал має бути встановлено на кодування UTF-8). Якщо це не спрацює, можливо, вам слід прочитати про підтримку компілятора в Unicode.
    Якщо він працює, але ваше повідомлення усічене - потрібно збільшити обмеження довжини повідомлення (всі символи Unicode споживають принаймні в два рази більше латинських символів).

    Збільшення максимальної довжини повідомлення

    Ви можете збільшити максимальну довжину повідомлення, поклавши на верхню частину ескізу (до того, як Blynk включає):

    #define BLYNK_MAX_SENDBYTES 256 // Default is 128

    Інтерфейс

    Tabs

    Єдиною метою віджета Tabs є розширення простору вашого проекту. Ви можете мати до 4 вкладок. Також можна перетягувати віджети між вкладками. Просто перетягніть віджет на мітку необхідної вкладки віджета вкладок.

    Menu

    Віджет Menu дозволяє відправляти команду на апаратне забезпечення на підставі вибору, зробленого на UI. Menu посилає індекс вибраного елемента, а не рядок мітки. Індекс відправлення починається з 1. Це працює так само, як і звичайний елемент ComboBox. Ви також можете встановити пункти меню з боку обладнання.

    Приклад коду:

    switch (param.asInt())
      {
        case 1: { // Item 1
          Serial.println("Item 1 selected");
          break;
        }
        case 2: { // Item 2
          Serial.println("Item 2 selected");
          break;
        }    
      }

    Sketch: Menu

    Time Input

    Time input widget allows you to select start/stop time, day of week, timezone, sunrise/sunset formatted values and send them to your hardware. Supported formats for time now are HH:MM and HH:MM AM/PM.

    Hardware will get selected on UI time as seconds of day (3600 * hours + 60 * minutes) for start/stop time. Time that widget sends to hardware is user local time. Selected days indexes :

    Monday - 1
    Tuesday - 2
    ...
    Saturday - 6
    Sundays - 7

    You can also change state of widget on UI. See below sketches.

    Sketch: Simple Time Input for start time

    Sketch: Advanced Time Input

    Sketch: Update Time Input State on UI

    Map

    Map widget allows you set points/pins on map from hardware side. This is very useful widget in case you have multiple devices and you want track their values on map.

    You can send a point to map with regular virtual wrtei command :

    Blynk.virtualWrite(V1, pointIndex, lat, lon, "value");

    We also created wrapper for you to make suage of map simpler :

    You can change button labels from hardware with :

    WidgetMap myMap(V1);
    ...
    int index = 1;
    float lat = 51.5074;
    float lon = 0.1278;
    myMap.location(index, lat, lon, "value");

    Using save index allows you to override existing point value.

    Sketch: Basic Sketch

    Table

    Table widget comes handy when you need to structure similar data within 1 graphical element. It works as a usual table.

    You can add a row to the table with :

    Blynk.virtualWrite(V1, "add", id, "Name", "Value");

    You can update a row in the table with :

    Blynk.virtualWrite(V1, "update", id, "UpdatedName", "UpdatedValue");

    To highlight any item in a table by using it’s index in a table starting from 0 :

    Blynk.virtualWrite(V1, "pick", 0);

    To select/deselect (make icon green/grey) item in a table by using it’s row id in a table :

    Blynk.virtualWrite(V1, "select", 0);
    Blynk.virtualWrite(V1, "deselect", 0);

    Move row to another position in the table by it index (row is removed and after that is added, have that in mind when sending second index):

    //1 is old row index, 2 is new row index
    Blynk.virtualWrite(V1, "order", 1, 2);

    To clear the table at any time with:

    Blynk.virtualWrite(V1, "clr");

    You can also handle other actions coming from table. For example, use row as a switch button.

    BLYNK_WRITE(V1) {
       String cmd = param[0].asStr();
       if (cmd == "select") {
           //row in table was selected. 
           int rowId = param[1].asInt();
       }
       if (cmd == "deselect") {
           //row in table was deselected. 
           int rowId = param[1].asInt();
       }
       if (cmd == "order") {
           //rows in table where reodered
           int oldRowIndex = param[1].asInt();
           int newRowIndex = param[2].asInt();
       }
    }

    Note : Max number of rows in the table is 100. When you reach the limit, table will work as FIFO (First In First Out) list. This limit can be changed by configuring table.rows.pool.size property for Local Server.

    Sketch: Simple Table usage

    Sketch: Advanced Table usage

    Device Selector

    Device selector is a powerful widget which allows you to update widgets based on one active device. This widget is particlularly helpful when you have a fleet of devices with similar functionality.

    Imagine you have 4 devices and every device has a Temperature & Humidity sensor connected to it. To display the data for all 4 devices you would need to add 8 widgets.

    With Device Selector, you can use only 2 Widgets which will display Temperature and Humidity based on the active device chosen in Device Selector.

    All you have to do is:

    1. Add Device Selector Widget to the project
    2. Add 2 widgets (for example Value Display Widget) to show Temperature and Humidity
    3. In Widgets Settings you will be able assign them to Device Selector (Source or Target section)
    4. Exit settings, Run the project.

    Now you can change the active device in Device Selector and you will see that Temperature and Humidity values are reflecting the data updates for the device you just picked.

    NOTE : Webhook Widget will not work with Device Selector (yet).

    Device Tiles

    Device tiles is a powerful widget and very similar to the device selector widget, but with UI. It allows you to display 1 pin per device per tile. This widget is particularly helpful when you have a fleet of devices with similar functionality. So you can group similar devices within one layout (template).

    Sensors

    Accelerometer

    Accelerometer is kind of motion sensors that allows you to detect motion of your smartphone. Useful for monitoring device movement, such as tilt, shake, rotation, or swing. Conceptually, an acceleration sensor determines the acceleration that is applied to a device by measuring the forces that are applied to the sensor. Measured in m/s^2 applied to x, y, z axis.

    In order to accept data from it you need to :

    BLYNK_WRITE(V1) {
      //acceleration force applied to axis x
      int x = param[0].asFloat(); 
      //acceleration force applied to axis y
      int y = param[1].asFloat();
      //acceleration force applied to axis y
      int z = param[2].asFloat();
    }

    Accelerometer doesn’t work in background.

    Barometer/pressure

    Barometer/pressure is kind of environment sensors that allows you to measure the ambient air pressure.

    Measured in in hPa or mbar.

    In oder to accept data from it you need to :

    BLYNK_WRITE(V1) {
      //pressure in mbar
      int pressure = param[0].asInt(); 
    }

    Barometer doesn’t work in background.

    Gravity

    Gravity is kind of motion sensors that allows you to detect motion of your smartphone. Useful for monitoring device movement, such as tilt, shake, rotation, or swing.

    The gravity sensor provides a three dimensional vector indicating the direction and magnitude of gravity. Measured in m/s^2 of gravity force applied to x, y, z axis.

    In oder to accept data from it you need to :

    BLYNK_WRITE(V1) {
      //force of gravity applied to axis x
      int x = param[0].asFloat(); 
      //force of gravity applied to axis y
      int y = param[1].asFloat();
      //force of gravity applied to axis y
      int z = param[2].asFloat();
    }

    Gravity doesn’t work in background.

    Humidity

    Humidity is kind of environment sensors that allows you to measure ambient relative humidity.

    Measured in % - actual relative humidity in percent.

    In oder to accept data from it you need to :

    BLYNK_WRITE(V1) {
      // humidity in %
      int humidity = param.asInt();
    }

    Humidity doesn’t work in background.

    Light

    Light is kind of environment sensors that allows you to measure level of light (measures the ambient light level (illumination) in lx). In phones it is used to control screen brightness.

    In order to accept data from it you need to :

    BLYNK_WRITE(V1) {
      //light value
      int lx = param.asInt(); 
    }

    Light doesn’t work in background.

    Proximity

    Proximity is kind of position sensors that allows you to determine how close the face of a smartphone is to an object. Measured in cm - distance from phone face to object. However most of this sensors returns only FAR / NEAR information. So return value will be 0/1. Where 0/LOW is FAR and 1/HIGH is NEAR.

    In order to accept data from it you need to :

    BLYNK_WRITE(V1) {
      // distance to object
      int proximity = param.asInt();
      if (proximity) {
         //NEAR
      } else {
         //FAR
      }
    }

    Proximity doesn’t work in background.

    Temperature

    Temperature is kind of environment sensors that allows you to measure ambient air temperature. Measured in °C - celcius.

    In order to accept data from it you need to :

    BLYNK_WRITE(V1) {
      // temperature in celcius
      int celcius = param.asInt();
    }

    Temperature doesn’t work in background.

    GPS Trigger

    GPS trigger widget allows easily trigger events when you arrive to or leave from some destination. This widget will work in background and periodically will check your coordinates. In case your location is within/out required radius (selected on widget map) widget will send HIGH/LOW command to hardware. For example, let’s assume you have GPS Trigger widget assigned to pin V1 and option Trigger When Enter. In that case when you’ll arrive to destination point widget will trigger HIGH event.

    BLYNK_WRITE(V1) {
      int state = param.asInt();
      if (state) {
          //You enter destination
      } else {
          //You leave destination
      }
    }

    More details on how GPS widget works you can read here.

    GPS trigger widget works in background.

    GPS Streaming

    Useful for monitoring smartphone location data such as latitude, longitude, altitude and speed (speed could be often 0
    in case smartphone doesn’t support it).

    In order to accept data from this widget you need to :

    BLYNK_WRITE(V1) {
      float latitude = param[0].asFloat(); 
      float longitude = param[1].asFloat();
      float altitude = param[2].asFloat();
      float speed = param[3].asFloat();
    }

    or you can use prepared wrapper GpsParam :

    BLYNK_WRITE(V1) {
      GpsParam gps(param);
      // Print 6 decimal places for Lat
      Serial.println(gps.getLat(), 7);
      Serial.println(gps.getLon(), 7);
    
      Serial.println(gps.getAltitude(), 2);
      Serial.println(gps.getSpeed(), 2);
    }

    GPS Streaming works in background.

    Sketch: GPS Stream

    Other

    Bridge

    Bridge can be used for Device-to-Device communication (no app. involved). You can send digital/analog/virtual write commands from one device to another, knowing it’s auth token. At the moment Bridge widget is not required on application side (it is mostly used for indication that we have such feature).
    You can use multiple bridges to control multiple devices.

    Bridge widget takes a virtual pin, and turns it into a channel to control another device. It means you can control any virtual, digital or analog pins of the target device. Be careful not to use pins like A0, A1, A2 ... when communicating between different device types, as Arduino Core may refer to wrong pins in such cases.

    Example code for device A which will send values to device B :

    WidgetBridge bridge1(V1); //Initiating Bridge Widget on V1 of Device A
    ...
    void setup() {
        Blynk.begin(...);
        while (Blynk.connect() == false) {
            // Wait until Blynk is connected
        }
        bridge1.digitalWrite(9, HIGH); // will trigger D9 HIGH on Device B. No code on Device B required
        bridge1.analogWrite(10, 123);
        bridge1.virtualWrite(V1, "hello"); // you need to write code on Device B in order to receive this value. See below
        bridge1.virtualWrite(V2, "value1", "value2", "value3");
    }
    
    BLYNK_CONNECTED() {
      bridge1.setAuthToken("OtherAuthToken"); // Token of the hardware B
    }

    IMPORTANT: when performing virtualWrite() with Bridge Widget, Device B will need to process the incoming data from Device A. For example, if you are sending value from Device A to Device B using bridge.virtualWrite(V5) you would need to use this handler on Device B:

    BLYNK_WRITE(V5){
        int pinData = param.asInt(); //pinData variable will store value that came via Bridge
    }

    Keep in mind that bridge.virtualWrite doesn’t send any value to mobile app. You need to call Blynk.virtualWrite for that.

    Sketch: Bridge

    Eventor

    Eventor widget allows you to create simple behaviour rules or events. Let’s look at a typical use case: read temperature from DHT sensor and send push notification when the temperature is over a certain limit :

      float t = dht.readTemperature();
      if (isnan(t)) {
        return;
      }
      if (t > 40) {
        Blynk.notify(String("Temperature is too high : ") + t);
      }

    With Eventor you don’t need to write this code. All you need is to send the value from the sensor to the server :

      float t = dht.readTemperature();
      Blynk.virtualWrite(V0, t);

    Don’t forget that virtualWrite commands should be wrapped in the timer and can’t be used in the main loop.

    Now configure new Event in Eventor widget:

    NOTE Don’t forget to add notification widget.

    Eventor comes handy when you need to change conditions on the fly without re-uploading new sketch on the hardware. You can create as many events as you need. Eventor also could be triggered from the application side. You just need to assign the widget to the same pin as your Event within Eventor. Eventor doesn’t constantly sends events. Let’s consider simple event as above if (temperature > 40) send notification. When temperature goes beyond 40 threshold - notification action is triggered. If temperature continues to stay above the 40 threshold no actions will be triggered. But if temperature goes below threshold and then passes it again - notification will be sent again (there is no 15 sec limit on Eventor notifications).

    Eventor also supports Timer events. For example, you can set a pin V1 ON/HIGH at 21:00:00 every Friday. With Eventor Time Event you can assign multiple timers on same pin, send any string/number, select days and timezone.

    In order to remove created event please use swipe. You can also swipe out last element in the Event itself.

    NOTE: The timer widget rely on the server time and not your phone time. Sometimes the phone time may not match the server time. NOTE : Events are triggered only once when the condition is met. That’s mean chaining of events is not possible (however, could be enabled for commercials).

    Sketch: Eventor

    NOTE : Events are triggered only once when the condition is met. However there is one exclusion: Let’s consider simple event as above if (temperature > 40) send notification. When temperature goes beyond 40 threshold - notification action is triggered. If temperature continues to stay above the 40 threshold no actions will be triggered. But if temperature goes below threshold and then passes it again - notification will be sent again (there is no 15 sec limit on Eventor notifications).

    RTC

    Real-time clock allows you to get time from server. You can preselect any timezone on UI to get time on hardware in required locale. No pin required for RTC widget.

    Sketch: RTC

    BLE

    Widget for enabling Bluetooth Low Energy support. At the moment BLE widget requires internet connection in order to login and load your profile. However this will be fixed soon. Also some Blynk widget not allowed with BLE widget.

    Blynk currently support bunch of different modules. Please check sketches below.

    Sketches: BLE

    Bluetooth

    Widget for enabling Bluetooth support. At the moment Bluetooth widget supported only for Android and requires internet connection in order to login and load your profile. However this will be fixed soon. Also some Blynk widget not allowed with Bluetooth widget.

    Blynk currently support bunch of different modules. Please check sketches below.

    Sketches: Bluetooth

    Music Player

    Simple UI element with 3 buttons - simulates music player interface. Every button sends it’s own command to hardware : play, stop, prev, next.

    You can change widget state within the app from hardware side with next commands:

    Blynk.virtualWrite(Vx, “play”);
    Blynk.virtualWrite(Vx, “stop”);

    You can also change widget play/stop state with next code (equivalent to above commands) :

    Blynk.setProperty(V1, "isOnPlay", "false");

    Sketch: Music Player

    Webhook

    Webhook is a widget for 3-d party integrations. With webhook widget you can send HTTP/S requests to any 3-d party server or device that has HTTP/S API (Philips Hue for instance).

    Any write operation from hardware side will trigger webhook widget (same way as for eventor). You can also trigger webhook from application side in case control widget assigned to same pin as webhook. You can trigger 3-d party service with single button click.

    For example, imagine a case when you want to send data from your hardware not only to Blynk but also to Thingspeak server. In typical, classic use case you’ll need to write code like this (this is minimal and not full sketch) :

    WiFiClient client;
    if (client.connect("api.thingspeak.com", 80)) {
        client.print("POST /update HTTP/1.1\n");
        client.print("Host: api.thingspeak.com\n");
        client.print("Connection: close\n");
        client.print("X-THINGSPEAKAPIKEY: " + apiKeyThingspeak1 + "\n");
        client.print("Content-Type: application/x-www-form-urlencoded\n");
        client.print("Content-Length: ");
        client.print(postStr.length());
        client.print("\n\n");
        client.print(postStr);
    }

    With webhook widget this is not necessary anymore. All you need just fill below fields :

    And do usual :

    Blynk.virtualWrite(V0, value);

    where V0 is pin assigned to webhook widget.

    Also you can use usual Blynk placeholders for pin value in body or url, for example :

    https://api.thingspeak.com/update?api_key=xxxxxx&field1=/pin/

    or for body

    ["/pin/"]

    You can also refer to specific index of multi value pin (multi pin supports up to 10 values) :

    /pin[0]/,/pin[1]/, /pin[2]/

    Another cool thing about webhook is that you can make GET requests from Blynk Server side and return response directly to your hardware. The beauty here is that you don’t need to code request to 3-d party service. Imagine a case when you want to get weather from some 3-d party service. For example, you have an url http://api.sunrise-sunset.org/json?lat=33.3823&lng=35.1856&date=2016-10-01, you can put it in widget, select V0 pin, and do usual :

    BLYNK_WRITE(V0){
      String webhookdata = param.asStr();
      Serial.println(webhookdata);
    }

    Now, every time you’ll trigger V0 pin (with Blynk.virtualWrite(V0, 1) from hardware side or with control widget assigned to V0) - BLYNK_WRITE(V0) will be triggered.

    NOTE : usually 3-d party servers returns big responses, so you have to increase hardware maximum allowed message size with #define BLYNK_MAX_READBYTES 1024. Where 1024 - is maximum allowed message size.

    NOTE : Blynk cloud has limitation for webhook widget - you are allowed to send only 1 request per second. You can change this on local server with webhooks.frequency.user.quota.limit. Please be very careful using webhooks, as many resources not capable to handle even 1 req/sec, so you may be banned on some of them. For example thingspeak allows to send 1 request per 15 seconds.

    NOTE : In order to avoid spamming Blynk Webhook has one more limitation - in case your webhook requests were failed 10 times in row your webhook widget will be stopped. In order to resume it you need to open widget and save it again. Failed requests are requests that return status code that are not equal to 200 or 302.

    NOTE : Webhook widget may affect Blynk.syncAll() feature. As returned response from server may be big. So, please, be careful with it.

    Спільний доступ

    Blynk offers two types of sharing your projects with other people:

    Shared access to your hardware

    Imagine giving someone an App to control your Project.

    How it works: - you send the QR code to your users (you can email, print, post to social media, do whatever you want) - others download Blynk app, scan the QR code and your app opens for them ready to use. They don’t even need to login or create an account.

    Go to your Project’s Settings:

    Click on “Generate Link” button :

    It will generate QR code you can share with others:

    That’s it! Now Exit the settings and press PLAY button.

    Another person would need to install Blynk app and scan QR code from the login screen (scanning from existing profile is not yet supported) ;

    NOTE: Your Project should be active, don’t forget to press Play button.

    WARNING: Sharing costs 1000 energy and this energy is not recoverable even you didn’t use sharing at all.

    Share your Project configuration

    In case you want to share your Project’s set up without giving access to your hardware (for example to make a tutorial or instructable)- follow the steps:

    In Project’s Settings go to Clone button.

    It will generate QR code you can share with anyone.

    Another person should Log In to Blynk app and press QR button in Projects gallery

    After the scan, a new Project will be created, all the widgets, settings, layout will be cloned. Another person would need enough Energy Balance to clone your Project.

    Auth Token will be different!. Nobody will get access to your hardware. They just get a copy of the layout and settings.

    HTTP RESTful API

    Blynk HTTP RESTful API allows to easily read and write values of Pins in Blynk apps and Hardware.
    API description can be found here.

    Підтримуване обладнання

    Blynk supports more than 400 boards already, including support for Arduino, Particle, ARM mbed, TI Energia, MicroPython, Node.js, OpenWRT and many Single Board Computers. You can add your own connection types easily (see these examples for Arduino)!

    Platforms

    Arduino connection types

    Made by Community

    Problematic Boards

    These boards are not supported and do not work out of the box: - Arduino Tian

    Here is a list of known library issues

    Вирішення проблем

    Connection

    If you experience connection problems, follow these steps:

    1. Check that your hardware, wires, cables and power supply are good quality, not harmed or damaged, etc.
      Use high power USB cables and USB ports.
    2. Check your wiring using the examples (TCP/HTTP Client or similar) provided with your shield and hardware.
      • Once you understand how to manage connection, it’s much easier to use Blynk.
    3. Try running command telnet blynk-cloud.com 8442 from your PC, connected to the same network as your hardware. You should see something like: Connected to blynk-cloud.com..
    4. Try running Blynk default examples for your platform without modifications to see if it is working.
      • Double-check that you have selected the right example for your connection type and hardware model.
      • Our examples come with comments and explanations. Read them carefully.
      • Check that your Auth Token is valid (copied from the App and doesn’t contain spaces, etc.)
      • If it doesn’t work, try looking into serial debug prints.
    5. Done! Add your modifications and functionality. Enjoy Blynk!

    Note: when you have multiple devices connected to your network, they should all have different MAC and IP addresses. For example, when using 2 Arduino UNO with Ethernet shields, flashing default example to both of them will cause connection problems. You should use manual ethernet configuration example.

    WiFi network connection

    If you encounter WiFi connection problems, please check these pitfalls:

    Delay

    If you use long delay() or send your hardware to sleep inside of the loop() expect connection drops and downgraded performance.

    DON’T DO THAT:

    void loop()
    {
      ...
      delay(1000); // this is long delay, that should be avoided
      other_long_operation();
      ...
      Blynk.run();
    }

    Note: This also applies to the BLYNK_READ & BLYNK_WRITE handlers!

    SOLUTION: If you need to perform actions in time intervals - use timers, for example BlynkTimer.

    Flood Error

    If your code frequently sends a lot of requests to our server, your hardware will be disconnected. Blynk App may show “Your hardware is offline”

    When Blynk.virtualWrite is in the void loop, it generates hundreds of “writes” per second

    Here is an example of what may cause flood. DON’T DO THAT:

    void loop()
    {
      Blynk.virtualWrite(1, value); // This line sends hundreds of messages to Blynk server
      Blynk.run();
    }

    SOLUTION: If you need to perform actions in time intervals - use timers, for example BlynkTimer.

    Using delay() will not solve the problem either. It may cause another issue. Use timers!

    If sending hundreds of requests is what you need for your product you may increase flood limit on local server and within Blynk library. For local server you need to change user.message.quota.limit property within server.properties file :

        #100 Req/sec rate limit per user.
        user.message.quota.limit=100

    For library you need to change BLYNK_MSG_LIMIT property within BlynkConfig.h file :

        //Limit the amount of outgoing commands.
        #define BLYNK_MSG_LIMIT 20

    Enable debug

    To enable debug prints on the default Serial, add this on the top of your sketch (it should be the first line in your sketch):

    #define BLYNK_DEBUG // Optional, this enables lots of prints
    #define BLYNK_PRINT Serial

    And enable serial in void setup():

    Serial.begin(9600);

    You can also use spare Hardware serial ports or SoftwareSerial for debug output (you will need an adapter to connect to it with your PC).

    Note: enabling debug mode will slow down your hardware processing speed up to 10 times.

    Geo DNS problem

    Blynk Cloud utilizes Geo DNS for non-commercial solutions in order to minimize servers maintenance costs. It means that when you connect to blynk-cloud.com, DNS service redirects you to the closest server based on your IP address. The issue is that the hardware and application sometimes are not in the same network. And there is a chance that hardware and smartphone are connected to different servers. You will get User is not registered message in that case.

    There are 2 ways to resolve this issue:

    Reset password

    On login screen click on “Problems signing in?” label and than “Reset Password” button. You’ll get instruction on your email.

    Безпека

    Blynk server has 3 ports open for different security levels.

    Hardware may select to connect to 8441 or 8442, depending on it’s capabilities.

    Use SSL gateway

    Most platforms are not capable to handle SSL, so they connect to 8442. However, our gateway script can be used to add SSL security layer to communication.

    ./blynk-ser.sh -f SSL

    This will forward all hardware connections from 8441 port to the server via SSL gateway. You can run this script on your Raspberry Pi, desktop computer, or even directly on your router!

    Note: when using your own server, you should overwrite the bundled server.crt certificate, or specify it to the script using --cert switch:

    ./blynk-ser.sh -f SSL -s <server ip> -p 8441 --cert=<certificate>.crt

    Flag -f SSL is enabled by default for USB communication so you don’t have to explicit declare it.

    Note: SSL is supported by the gateway only on Linux/OSX for now

    If you want to skip SSL, and connect to TCP, you can also do that:

    ./blynk-ser.sh -t TCP

    Use Local Blynk Server

    In order to gain maximum security you could install Blynk server locally and restrict access to your network, so nobody except you could access it. In this case all data is stored locally within your network and not send via Internet.

    In case of Local Blynk Server there is also no need to protect connection between your hardware and Local Blynk Server. This is true for Ethernet connection and partially true for Wi-Fi connection. In case of Wi-Fi you have to use at least WPA, WPA2 (Wi-Fi Protected Access) Wi-Fi type in order to protect wireless traffic.

    WPA and WPA2 offer a very robust encryption that is likely to protect all data travelling over the air—given that a strong enough password is used. Even if your data is plain TCP/IP, another user won’t be able to decipher captured packets. Still, make sure that your password is strong enough, otherwise the only limiting factor for an attacker is time.

    OTA

    Blynk also supports over the air updates for - ESP8266, NodeMCU and SparkFun Blynk boards. OTA supported only for the private servers and for the paid customers for now.

    How does it work?

    Flow

    1. User triggers OTA with one of below HTTPS request;
    2. User provides within HTTPS request admin credentials and firmware binary file to update hardware with;
    3. When hardware connects to server - server checks it firmware. In case, hardware firmware build date differs from uploaded firmware, than server sends special command to hardware with url for the new firmware;
    4. Hardware processes url with below handler:

        BLYNK_WRITE(InternalPinOTA) {
          //url to get firmware from. This is HTTP url
          //http://localhost:8080/static/ota/FUp_2441873656843727242_upload.bin
          overTheAirURL = param.asString();
          ...
        }
      1. Hardware downloads new firmware and starts flashing firmware;

    Trigger update for the specific hardware

    curl -v -F file=@Template_ESP8266.ino.nodemcu.bin --insecure -u admin@blynk.cc:admin https://localhost:9443/admin/ota/start?token=123

    Trigger OTA for all devices

    Update for all devices will be triggered only when they are connected to the cloud. You need to remove the token part for that.

    curl -v -F file=@Template_ESP8266.ino.nodemcu.bin --insecure -u admin@blynk.cc:admin https://localhost:9443/admin/ota/start

    In that case, OTA will be triggered right after device connected to the server. In case device is online firmware update will be initiated only when device will be connected again.

    Trigger OTA for the specific user

    In that case firmware update will be triggered for all devices of specified user.

    curl -v -F file=@Template_ESP8266.ino.nodemcu.bin --insecure -u admin@blynk.cc:admin https://localhost:9443/admin/ota/start?user=pupkin@gmail.com

    Trigger OTA for specific user and project

    In that case firmware update will be triggered for all devices of specified user within specified project.

    curl -v -F file=@Template_ESP8266.ino.nodemcu.bin --insecure -u admin@blynk.cc:admin https://localhost:9443/admin/ota/start?user=pupkin@gmail.com&project=123

    Stop OTA

    curl -v --insecure -u admin@blynk.cc:admin https://localhost:9443/admin/ota/stop

    How to make firmware

    In order to make firmware in Arduino IDE - go to menu: Sketch -> Export compiled Binary.

    NOTE: ESP8266 right now takes firmware only via HTTP. And not HTTPS.

    Blynk server

    Blynk Server is an Open Source Java server, responsible for forwarding messages between Blynk mobile application and various microcontroller boards (i.e. Arduino, Raspberry Pi. etc).

    Download latest server build:

    Download Blynk Server

    Why do I need Local Blynk Server?

    Installing your own Local Blynk Server

    For detailed instruction please follow github page.

    Blynk Firmware

    Configuration

    Blynk.begin()

    The simplest way to configure Blynk is to call Blynk.begin():

    Blynk.begin(auth, ...);

    It has various parameters for different hardware, depending on the type of connection you use. Follow the example sketches for your board.

    begin() is basically doing these steps:

    1. Connects to network (WiFi, Ethernet, …)
    2. Calls Blynk.config(...) - sets auth token, server address
    3. Tries to connects to the server once (can block for more than 30s)

    If your shield/connection type is not supported yet - you can craft it yourself easily! Here are some examples.

    Blynk.config()

    config() allows you to manage network connection yourself. You can set up your shield (WiFi, Ethernet, …) manually, and then call:

    Blynk.config(auth, server, port);

    or just

    Blynk.config(auth);

    Note: Just after Blynk.config(...), Blynk is not yet connected to the server.
    It will try to connect when it reaches first Blynk.run() or Blynk.connect()call.
    If you want to skip connecting to the server, just call Blynk.disconnect() right after configuration.

    For setting-up WiFi connection, you can use a connectWiFi (just for convenience):

    Blynk.connectWiFi(ssid, pass);

    To connect to open WiFi networks, set pass to an empty string ("").

    Connection management

    There are several functions to help with connection management:

    Blynk.connect()

    # This functions will try connecting to Blynk server.
    # Returns true when connected, false if timeout reached.
    # Default timeout is 30 seconds.
    bool result = Blynk.connect();
    bool result = Blynk.connect(timeout);

    Blynk.disconnect()

    To disconnect from Blynk server, use:

    Blynk.disconnect();

    Blynk.connected()

    To get the status of connection to Blynk Server use:

    bool result = Blynk.connected();

    Blynk.run()

    This function should be called frequently to process incoming commands and perform housekeeping of Blynk connection. It is usually called in void loop() {}.

    You can initiate it in other places, unless you run out of heap memory (in the cascaded functions with local memory). For example, it is not recommended to call Blynk.run() inside of the BLYNK_READ and BLYNK_WRITE functions on low-RAM devices.

    Digital & Analog pins control

    The library can perform basic pin IO (input-output) operations out-of-the-box:

    digitalRead
    digitalWrite
    analogRead
    analogWrite (PWM or Analog signal depending on the platform)

    No need to write code for simple things like LED, Relay control and analog sensors.

    Virtual pins control

    Virtual Pins are designed to send any data from your microcontroller to the Blynk App and back. Think about Virtual Pins as channels for sending any data. Make sure you differentiate Virtual Pins from physical pins on your hardware. Virtual Pins have no physical representation.

    Virtual Pins can be used to interface with libraries (Servo, LCD and others) and implement custom functionality. The device may send data to the App using Blynk.virtualWrite(pin, value) and receive data from the App using BLYNK_WRITE(vPIN).

    Virtual Pin data types

    The actual values are sent as strings, so there are no practical limits on the data that can be sent.
    However, remember the limitations of the platform when dealing with numbers. For example the integer on Arduino is 16-bit, allowing range -32768 to 32767. You can interpret incoming data as Integers, Floats, Doubles and Strings:

    param.asInt();
    param.asFloat();
    param.asDouble();
    param.asStr();

    You can also get the RAW data from the param buffer:

    param.getBuffer()
    param.getLength()

    Blynk.virtualWrite(vPin, value)

    You can send all the formats of data to Virtual Pins

    // Send string
    Blynk.virtualWrite(pin, "abc");
    
    // Send integer
    Blynk.virtualWrite(pin, 123);
    
    // Send float
    Blynk.virtualWrite(pin, 12.34);
    
    // Send multiple values as an array
    Blynk.virtualWrite(pin, "hello", 123, 12.34);
    
    // Send RAW data
    Blynk.virtualWriteBinary(pin, buffer, length);

    Note: Calling virtualWrite attempts to send the value to the network immediately.

    Blynk.setProperty(vPin, “property”, value)

    This allows changing widget properties

    BLYNK_WRITE(vPIN)

    BLYNK_WRITE defines a function that is called when device receives an update of Virtual Pin value from the server:

    BLYNK_WRITE(V0)
    {   
      int value = param.asInt(); // Get value as integer
    
      // The param can contain multiple values, in such case:
      int x = param[0].asInt();
      int y = param[1].asInt();
    }

    BLYNK_READ(vPIN)

    BLYNK_READ defines a function that is called when device is requested to send it’s current value of Virtual Pin to the server. Normally, this function should contain some Blynk.virtualWrite calls.

    BLYNK_READ(V0)
    {
      Blynk.virtualWrite(V0, newValue);
    }

    BLYNK_WRITE_DEFAULT()

    This redefines the handler for all pins that are not covered by custom BLYNK_WRITE functions.

    BLYNK_WRITE_DEFAULT()
    {
      int pin = request.pin;      // Which exactly pin is handled?
      int value = param.asInt();  // Use param as usual.
    }

    BLYNK_READ_DEFAULT()

    This redefines the handler for all pins that are not covered by custom BLYNK_READ functions.

    BLYNK_READ_DEFAULT()
    {
      int pin = request.pin;      // Which exactly pin is handled?
      Blynk.virtualWrite(pin, newValue);
    }

    BLYNK_CONNECTED()

    This function is called every time Blynk gets connected to the server. It’s convenient to call sync functions here.

    BLYNK_CONNECTED() {
    // Your code here
    }

    BLYNK_APP_CONNECTED()

    This function is called every time the Blynk app gets connected to the server.

    BLYNK_APP_CONNECTED() {
    // Your code here
    }

    Example

    BLYNK_APP_DISCONNECTED()

    This function is called every time the Blynk app gets connected to the server.

    BLYNK_APP_DISCONNECTED() {
    // Your code here
    }

    Example

    Blynk.syncAll()

    Request server to send the most recent values for all widgets. In other words, all analog/digital pin states will be restored and every virtual pin will generate BLYNK_WRITE event.

    BLYNK_CONNECTED() {
        Blynk.syncAll();
    }

    Blynk.syncVirtual(vPin)

    Requests virtual pins value update. The corresponding BLYNK_WRITE handler is called as the result.

    Blynk.syncVirtual(V0);
    # Requesting multiple pins is also supported:
    Blynk.syncVirtual(V0, V1, V6, V9, V16);

    BlynkTimer

    BlynkTimer enables you to perform periodic actions in the main loop() context.
    It is the same as widely used SimpleTimer, but fixes several issues.
    BlynkTimer is included in Blynk library by default, so no need to install SimpleTimer separately or include SimpleTimer.h
    Please note that a single BlynkTimer object allows to schedule up to 16 timers.

    For more information on timer usage, please see: http://playground.arduino.cc/Code/SimpleTimer
    And here is a BlynkTimer example sketch.

    Debugging

    #define BLYNK_PRINT

    #define BLYNK_DEBUG

    To enable debug prints on the default Serial, add on the top of your sketch (should be the first line):

    #define BLYNK_PRINT Serial // Defines the object that is used for printing
    #define BLYNK_DEBUG        // Optional, this enables more detailed prints

    And enable Serial Output in setup():

    Serial.begin(9600);

    Open Serial Monitor and you’ll see the debug prints.

    You can also use spare Hardware serial ports or SoftwareSerial for debug output (you will need an adapter to connect to it with your PC).

    WARNING: Enabling BLYNK_DEBUG will slowdown your hardware processing speed up to 10 times!

    BLYNK_LOG()

    When BLYNK_PRINT is defined, you can use BLYNK_LOG to print your logs. The usage is similar to printf:

    BLYNK_LOG("This is my value: %d", 10);

    On some platforms (like Arduino 101) the BLYNK_LOG may be unavailable, or may just use too much resources.
    In this case you can use a set of simpler log functions:

    BLYNK_LOG1("Heeey"); // Print a string
    BLYNK_LOG1(10);      // Print a number
    BLYNK_LOG2("This is my value: ", 10); // Print 2 values
    BLYNK_LOG4("Temperature: ", 24, " Humidity: ", 55); // Print 4 values
    ...

    Minimizing footprint

    To minimize the program Flash/RAM, you can disable some of the built-in functionality:

    1. Comment-out #define BLYNK_PRINT to remove prints
    2. Put on the top of your sketch:
      #define BLYNK_NO_BUILTIN   // Disable built-in analog & digital pin operations
      #define BLYNK_NO_FLOAT     // Disable float operations

    Please also remember that a single BlynkTimer can schedule many timers, so most probably you need only one instance of BlynkTimer in your sketch.

    Porting, hacking

    If you want to dive into crafting/hacking/porting Blynk library implementation, please also check this documemtation.

    FAQ

    Посилання

    Ліцензія

    This project is released under The MIT License (MIT)