Переклад документації Blynk українською (неофіційний)
Вступ
Цей посібник допоможе вам зрозуміти, як почати використовувати Blynk та надати повний огляд усіх функцій.
Якщо ви хочете перейти прямо до гри з Blynk, перегляньте Початок роботи.
Як працює Blynk
Blynk був розроблений для Інтернету речей. Він може контролювати апаратне забезпечення віддалено, він може відображати дані датчиків, він може зберігати дані, візуалізувати їх і робити багато інших цікавих речей.
У платформі є три основні компоненти:
Blynk App - дозволяє створювати дивовижні інтерфейси для ваших проектів за допомогою різних віджетів, які ми надаємо.
Blynk Server - відповідальний за всі комунікації між смартфоном і апаратним забезпеченням. Ви можете скористатись нашою Хмарою Blynk або запустити свій приватний Blynk server локально. Це відкрите джерело, він може легко обробляти тисячі пристроїв і навіть може бути запущений на Raspberry Pi.
Blynk Libraries - для всіх популярних апаратних платформ - дозволити спілкування з сервером і обробляти всі вхідні та вихідні команди.
Тепер уявіть собі: кожного разу, коли ви натискаєте кнопку в додатку Blynk, повідомлення переходить до простору Хмараи Blynk
де воно чарівно знаходить свій шлях до вашого обладнання. Це працює в протилежному напрямку і Blynk бачить все, що відбувається.
Особливості
- Подібний API & UI для всього підтримуваного обладнання та пристроїв
- Підключення до хмари використовується:
- WiFi
- Bluetooth and BLE
- Ethernet
- USB (Serial)
- GSM
- …
- Набір простих у використанні віджетів
- Прямий маніпуляції з пінами без написання коду
- Легко інтегрувати та додавати нові функції за допомогою віртуальних контактів
- Історія моніторингу даних через віджет History Graph
- Зв'язок між пристроями за допомогою Bridge widget
- Надсилання електронних листів, твітів, push-сповіщень тощо.
- … нові функції постійно додаються!
Ви можете знайти приклади ескізів покриття базових можливостей 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
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 :
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(); }
Запустіть скрипт, який зазвичай знаходиться в
/scripts
папці:- Windows:
My Documents\Arduino\libraries\Blynk\scripts
- Mac
User$/Documents/Arduino/libraries/Blynk/scripts
- Windows:
У 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". Перед завантаженням нового ескізу потрібно скасувати сценарій.
Додаткові матеріали:
- Підручник: керування Arduino через USB за допомогою програми Blynk. Ніякого шилда не потрібно. Mac OS)
- Як керувати arduino (бездротовий) з blynk через USB. Windows
- Інструкція: контроль Arduino з Blynk через USB
Raspberry Pi
- Під'єднайте Raspberry Pi до Інтернету та відкрийте консоль.
Запустіть цю команду (вона оновлює ваш сховище пакетів OS, щоб включити необхідні пакунки).:
curl -sL "https://deb.nodesource.com/setup_6.x" | sudo -E bash -
Завантажте та створіть бібліотеку 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
Запустіть сценарій тестування Blynk (введіть свій авторизований токен):
blynk-client 715f8cafe95f4a91bae319d0376caa8c
Ви можете написати наш власний сценарій на основі прикладів
Щоб увімкнути Blynk для автоматичного перезапуску для Pi, знайдіть
/etc/rc.local
файл і додати туди:node full_path_to_your_script.js <Auth Token>
Додаткові матеріали:
- Інструкції: Blynk на Javascript для Raspberry Pi, Intel Edison та інші
- Інструкції: За допомогою датчиків DHT11 / DHT12 з Raspberry Pi і Blynk
Примітка: Замість того, щоб використовувати 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
Додаткові матеріали:
- Інструкції: ESP8266 ESP-12(Standalone)+ Blynk
- Інструкції: ESP8266-12 standalone Blynk lm35 temperature sensor
Крок за кроком підручник російською мовою
NodeMCU
Будь ласка Слідуйте це докладна інструкція. Або дивись цей відео-підручник.
Arduino + ESP8266 WiFi з AT командами
Цей тип з'єднання не рекомендується для початківців.
Якщо ви хочете спробувати, уважно прочитайте цю довідкову тему
Примітка: Деякі плати, такі як Arduino UNO WiFi від Arduino.org, не використовують AT команди (і не надають відповідних бібліотек), тому вони стають непридатними для використання в Blynk.
Частинка
Blynk працює з усією сім'єю виробів Particle: Core, Photon та Electron
- Відкритий Particle Web IDE.
- Переходьте до бібліотек.
- Шукайте Blynk в бібліотеках спільноти та натисніть на неї
- Відкритий
01_PARTICLE.INO
приклад - Натисніть “use this example”
- Вставте свій 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, коли програма активна, встановіть параметр "Частота читання" до певного інтервалу:
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
події.
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 сек у найгіршому випадку.
Параметри проекту
У кожного проекту є власні налаштування:
- Тема - перемикання між темою "Світлою" та "Темною" (бізнес-рахунки мають ширший вибір);
- Зберегти екран завжди - дозволяє користуватися програмою Blynk, не переходячи в сплячий режим (зазвичай це робить усі мобільні пристрої);
- Надіслати команду зі з'єднанням із додатком -за допомогою цієї опції сервером буде надіслано команди "Підключено до програми" та "Від'єднано від програми" на вашому апаратному забезпеченні, коли ваш додаток Blynk надходить у режимі онлайн / офлайн. Приклад використання;
- Не показувати в режимі офлайн-сповіщень - зараз, для налагодження, кожного разу, коли ваше обладнання виходить в автономному режимі, - Blynk Сервер сповістить вас про спливаюче вікно у програмі. Однак, коли налагодження не потрібне або використовується лише програма Blynk через HTTP/S ці сповіщення безглузді. Таким чином, цей перемикач дозволяє вимкнути ці спливаючі вікна. Також цей вимикач вимикається опція "Повідомити, коли в автономному режимі".
Змінити властивості віджету
Також підтримується зміна деяких властивостей віджетів з боку апаратного забезпечення.
Наприклад, ви можете змінити колір світлодіодного віджета на основі умови:
//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.
Обмеження та рекомендації
Не кладіть
Blynk.virtualWrite
і будь-яку іншуBlynk.*
команду усерединіvoid loop()
- це призведе до великої кількості вихідних повідомлень на наш сервер, і ваше з'єднання буде припинено;Ми рекомендуємо викликати функції з інтервалами. Наприклад, використовуйте BlynkTimer
Уникайте тривалих затримок з
delay()
– це може призвести до перерв зв'язку;Якщо ви надсилаєте понад 100 значень за секунду, це може призвести Flood Error і ваше обладнання буде автоматично відключено від сервера;
Будьте обережні, надсилайте багато
Blynk.virtualWrite
команд, оскільки більшість апаратних засобів не дуже потужні (наприклад, ESP8266), тому він може не обробляти багато запитів.
Віджети
Віджети - це модулі інтерфейсу. Кожен з них виконує певну функцію вводу/виводу при спілкуванні з апаратним забезпеченням.
Існує 4 типи віджетів:
- Controllers - вони відправляють команди на апаратне забезпечення. Використовуйте їх, щоб контролювати ваші речі;
- Displays - використовується для різних візуалізацій даних, що надходять від апаратного забезпечення до смартфону;
- Notifications - різні віджети для надсилання повідомлень;
- Interface - це різні віджети, які роблять ваш інтерфейс краще;
- Others - віджети, які не належать до жодної категорії;
Кожен віджет має власні налаштування.
Деякі віджети (наприклад Bridge Widget) використовуються для ввімкнення деяких функцій, і вони не мають жодних налаштувань.
Загальні налаштування віджету
Вибір піна
Це один з основних параметрів, які потрібно встановити. Він визначає, яким піном можна керувати або читати.
Digital Pins - представляють собою фізичні цифрові піни IO на вашому апаратному забезпеченні. Піни з підтримкою PWM позначені символом ~
Analog Pins - представляють фізичні аналогові IO піни на вашому апаратному забезпеченні
Virtual Pins - не мають фізичного представлення. Вони використовуються для будь-якої передачі даних між програмою Blynk та вашим обладнанням. Дізнайтеся більше про Віртуальні піни тут.
Data Mapping
Якщо ви хочете відобразити вхідні значення до певного діапазону, ви можете використовувати кнопку відображення :
Скажімо, ваш датчик передає значення від 0 до 1023. Але ви хочете відображати значення в діапазоні від 0 до 100 в додатку. Якщо ввімкнуто відображення даних, вхідне значення 1023 буде відображено до 100.
SPLIT/MERGE
Деякі віджети можуть надсилати більше одного значення. І за допомогою цього вимикача ви можете контролювати, як відправити їх.
SPLIT: Кожен параметр надсилається безпосередньо на Pin у вашому апаратурі (наприклад, D7). Вам не потрібно писати жодного коду.
ПРИМІТКА: У цьому режимі ви надсилаєте декілька команд з одного віджета, що може знизити ефективність вашого обладнання.
Приклад: якщо у вас є Joystick Widget і він встановлений на D3 та D4, він надсилатиме 2 команди через Інтернет:
digitalWrite(3, value); digitalWrite(4, value);
MERGE: Коли вибрано режим MERGE, ви надішлете лише 1 повідомлення, яке складається з масиву значень. Але вам потрібно буде проаналізувати його на апаратному рівні.
Цей режим можна використовувати тільки з Virtual Pins.
Приклад: додайте віджет zeRGBa та встановіть його в режим MERGE. Виберіть віртуальний контакт V1
BLYNK_WRITE(V1) // There is a Widget that WRITEs data to V1 { int r = param[0].asInt(); // get a RED channel value int g = param[1].asInt(); // get a GREEN channel value int b = param[2].asInt(); // get a BLUE channel value }
Send On Release
Цей параметр доступний для більшості віджетів контролера та дозволяє зменшити трафік даних на вашому апаратному забезпеченні. Наприклад, коли ви переміщаєте віджет джойстика, команди постійно потокуються на апаратне забезпечення, під час переміщення одного джойстика ви можете надсилати десятки команд. Є випадки використання, де це необхідно, однак створення такого навантаження може спричинити скидання апаратного забезпечення. Ми рекомендуємо ввімкнути Send On Release функцію для більшості випадків, якщо вам не потрібно миттєвого зворотного зв'язку. Цей параметр ввімкнено за умовчанням.
Write interval
Аналогічно варіанту вище . Тим не менш, ви можете передавати значення на ваш апаратне забезпечення протягом певного інтервалу. Наприклад, встановлення інтервалу запису до 100 мс - означає, що під час переміщення слайдера лише 1 значення буде передано на апаратне забезпечення протягом 100 мс. Цей параметр також використовується для зменшення трафіку даних на вашому апаратному забезпеченні.
Color gradient
Деякі віджетні дисплеї мають можливість вибору градієнта. Градієнт дозволяє розфарбувати віджети без кодування. На даний момент ми надаємо 2 типи градієнтів :
- Warm: Green - Orange - Red;
- Cold : Green - Blue - Violet;
Градієнт змінює колір вашого віджету на основі властивостей 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:
SPLIT/MERGE режими - читати тут
Rotate on Tilt
Коли він увімкнений, Джойстик автоматично повертається, якщо ви використовуєте свій смартфон у альбомній орієнтації
- Auto-Return
-
Коли він вимкнений, рукоятка джойстика не повернеться до центральної позиції. Він залишиться там, де ви його залишили.
Sketch: JoystickTwoAxis
zeRGBa
zeRGBa це звичайний контролер RGB (вибір кольорів).
Налаштування:
- SPLIT: Кожен параметр надсилається безпосередньо на Pin у вашому апаратурі (наприклад, D7). Вам не потрібно писати жодного коду.
ПРИМІТКА: У цьому режимі ви надсилаєте декілька команд з одного віджета, що може знизити ефективність вашого обладнання.
Приклад: Якщо у вас є віджет zeRGBa і він встановлений на D1, D2, D3, він надсилатиме 3 команди через Інтернет:
digitalWrite(1, r);
digitalWrite(2, g);
digitalWrite(3, b);
- MERGE: Коли вибрано режим MERGE, ви надішлете лише 1 повідомлення, що складається з масиву значень. Але вам потрібно буде проаналізувати його на апаратному рівні.
Цей режим можна використовувати тільки з 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, вам потрібно буде натискати дані з апаратного забезпечення з потрібним інтервалом за допомогою таймерів.
Ось основний приклад для натискання даних.
Взаємодії:
Переключення між діапазонами часу та Режим Live
Натисніть діапазони часу в нижній частині віджету, щоб змінити часові діапазониНатисніть елементи "Легенда" показати або приховати базі даних
Tap'n'hold, щоб переглянути позначку часу та відповідні значення
- Швидко проведіть пальцем зліва направо, щоб відкрити попередні дані
Тоді ви зможете прокрутити дані назад і вперед протягом заданого діапазону часу.
- Повноекранний режим
Натисніть цю кнопку, щоб відкрити повноекранний режим у альбомній орієнтації:
Просто поверніть телефон у портретний режим. Діаграма повинна обертатися автоматично. У повноекранному режимі ви побачите X (час) та кілька Y масштабів. Повноекранний режим може бути відключений від налаштувань віджетів.
- Кнопка меню
Кнопка меню відкриє додаткові функції:- Експортувати в CSV
- Видалити дані на сервері
Налаштування SuperChart:
Назва діаграми
Розмір шрифту заголовка У вас є вибір з трьох розмірів шрифту
Вирівнювання заголовків Виберіть вирівнювання заголовка діаграми. Цей параметр також впливає на позицію назви та легенди у віджеті.
Datastreams - додати стежки даних (читайте нижче, як налаштувати datrereams)
- Show/Hide Title
- Show/Hide Legend
Налаштування Datastream
Віджет підтримує до 4 Datastreams. Натисніть піктограму параметрів Datastream, щоб відкрити Настройки Datastream.
Дизайн: Виберіть доступні типи графіків:
- Line
- Area
- Bar
- Binary (anchor LINK to binary)
Color: Виберіть суцільні кольори або градієнти
Джерело та вхідні дані: Ви можете використовувати 3 типи джерела даних:
1. Virtual Pin Виберіть потрібний пристрій та віртуальний PIN, щоб прочитати дані з.
2. Tags SuperChart може збирати дані з кількох пристроїв за допомогою вбудованих функцій агрегації. Наприклад, якщо у вас є 10 температурних датчиків, що відправляють температуру з заданим періодом, ви можете побудувати середнє значення від 10 датчиків на віджеті.
To use Tags:
- Add Tag для кожного пристрою, з якого потрібно збирати дані.
- Натисніть дані на той же Virtual Pin на кожному пристрої (наприклад,
Blynk.virtualWrite (V0, temperature);
) - Виберіть Тег як джерело у SuperChart Widget і використовуйте контактний сигнал, де дані надходять (наприклад, V0)
Доступні функції:
- SUM, буде підбивати підсумки всіх вхідних значень до зазначеного віртуального контакту на всіх пристроях, позначених вибраною тегом
- AVG, буде складати середню величину
- MED, знайде медіанне значення
- MIN, буде складати мінімальне значення
- MAX буде складати мінімальне значення
☝️ ВАЖЛИВО: мітки не працюють у режимі Live.
- Device Selector Якщо ви додаєте до вашого проекту віджета вибору пристрою, ви можете використовувати його як джерело для SuperChart. У цьому випадку, коли ви змінюєте пристрій у Device Selector, діаграма буде оновлено відповідно
Параметри осі Y
Існує два режими масштабування даних вздовж осі Y
- Values
Якщо вибрано цей режим, масштаб Y буде встановлено до вибраних вами значень. Наприклад, якщо ваш апаратне забезпечення передає дані зі значеннями від -100 до 100, ви можете встановити діаграму до цих значень і даних будуть виправлені правильно.
Ви також можете переглядати дані в певному діапазоні. Скажімо, що вхідні дані мають значення в діапазоні 0-55, але ви хочете бачити лише значення в діапазоні 30-50. Ви можете встановити його, і якщо значення не входять у шкалу Y, яку ви налаштовували, діаграма буде обрізана
- % висоти
Ця опція дозволяє автоматично масштабувати вхідні дані на віджеті та розташовувати їх так, як ви хочете. У цьому режимі ви встановлюєте відсоток висоти віджетів на екрані, від 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 градації :
- По хвилинах -
1h
,6h
; - по годинах -
1d
,1w
; - По днях -
1m
,3m
;
Це означає, що мінімальний інтервал оновлення графіка - 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);
- Кожне повідомлення, яке апаратне надсилає серверу, зберігається автоматично на сервері. Режим PUSH не вимагає, щоб програма
-
- працювала в режимі онлайн або відкривалася.
Sketch: Push Example
Notifications
Віджет Twitter підключає ваш обліковий запис Twitter до Blynk і дозволяє відправляти твіти з вашого обладнання.
Приклад коду:
Blynk.tweet("Hey, Blynkers! My Arduino can tweet now!");
Обмеження :
- ви не можете надіслати 2 твіти з таким самим повідомленням (це політика Twitter)
- дозводено відправляти тільки 1 твіт за 15 секунд
Sketch: Twitter
Віджет електронної пошти дозволяє надсилати електронні листи з вашого обладнання на будь-яку адресу.
Приклад коду:
Blynk.email("my_email@example.com", "Subject", "Your message goes here");
Він також містить поле to
. За допомогою цього поля ви можете визначити одержувача електронної пошти в додатку.
У цьому випадку вам не потрібно вказувати приймача на Вашому обладнанні :
Blynk.email("Subject", "Your message goes here");
Обмнжнння :
- Максимально дозволена електронна пошта + тема + довжина повідомлення - 120 символів. Проте ви можете збільшити це обмеження, якщо необхідно,
додавши
#define BLYNK_MAX_SENDBYTES XXX
до Вашого скетчу. ДеXXX
є бажаною максимальною довжиною електронної пошти. Наприклад, для ESP це можна встановити максимальну довжину до 1200#define BLYNK_MAX_SENDBYTES 1200
. The#define BLYNK_MAX_SENDBYTES 1200
must be included before any of the Blynk includes. - Дозволено лише 1 електронну пошту за 15 секунд
- У випадку, якщо ви використовуєте Gmail на локальному сервері, ви обмежені 500 повідомленнями на день (за допомогою Google). Інші постачальники можуть мати подібні обмеження, тому будьте уважні.
- Користувач обмежений 100 повідомленнями на день у хмарі Blynk;
Sketch: Email
Push Notifications
Віджет Push Notification дозволяє надсилати push-сповіщення з вашого обладнання на пристрій. В даний час він також містить 2 додаткові опції :
- Повідомляти про те, що апаратне обладнання в автономному режимі - ви отримаєте push-сповіщення, якщо ваше обладнання буде відключено.
- Період автономного ігнорування - визначає, як довго апаратне забезпечення може перебувати в автономному режимі (після того, як він перейшов в автономний режим), перш ніж надсилати повідомлення. У разі перевищення періоду - надсилатиметься повідомлення "апаратний офлайн". Ви не отримаєте жодного сповіщення, якщо апаратне забезпечення було відновлено протягом зазначеного періоду.
- Пріоритет високий пріоритет дає більше шансів, що ваше повідомлення буде доставлено без затримок. Див. докладні пояснення тут.
УВАГА : високий пріоритет сприяє більшій витраті батареї порівняно з звичайними пріоритетними повідомленнями.
Приклад коду:
Blynk.notify("Hey, Blynkers! My hardware can push now!");
Обмнжнння :
- Максимальна допустима довжина тіла - 120 символів.
- Дозволено лише 1 сповіщення за 15 секунд
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:
- Add Device Selector Widget to the project
- Add 2 widgets (for example Value Display Widget) to show Temperature and Humidity
- In Widgets Settings you will be able assign them to Device Selector (Source or Target section)
- 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:
Share access to your hardware. Think about giving someone an App for your Project. They can’t modify, but can control and see what’s there.
Share your Project configuration. Others will get a clone of your project by scanning a given QR link, but they won’t be able to control your hardware. It’s great for tutorials, instructables, etc.
Shared access to your hardware
Imagine giving someone an App to control your Project.
- people you’ve shared your project with can’t modify anything. They can only use it
- you can update your app, change the layout, add widgets and it’s immediately synced to everyone
- you can revoke access at any moment
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 (https://github.com/blynkkk/blynk-library)
- Arduino Uno, Duemilanove
- Arduino Nano, Mini, Pro Mini, Pro Micro, Due, Mega
- Arduino 101 (Intel Curie, with BLE)
- Arduino MKR1000
- Arduino Zero
- Arduino Yún (onboard WiFi and Ethernet, via Bridge)
- Arduino.org UNO WiFi
Arduino-like
- Blynk Board
- ESP8266 (Generic, NodeMCU, Witty Cloud, Huzzah, WeMos D1, Seeed Wio Link, etc.)
- ESP32 (WiFi, BLE)
- Nordic nRF51/nRF52 - based boards
- Teensy 3.2/3.1
- Blue Pill (STM32F103C)
- Realtek RTL8710 / Ameba via RTLduino
- BBC micro:bit
- LightBlue Bean , soon
- DFRobot Bluno
- RedBear Duo (WiFi, BLE)
- RedBearLab Blend Micro
- RedBearLab BLE Nano (v1 and v2)
- Seeed Tiny BLE
- Simblee BLE
- RFduino BLE
- The AirBoard (BLE-Link, RN-XV)
- Feather M0 WiFi
- Feather 32u4 BLE
- Intel Edison
- Intel Galileo
- Fishino Guppy, Uno, Mega
- TinyCircuits TinyDuino (CC3000)
- Microduino/mCookie Core, Core+, CoreUSB
- Wicked WildFire V2, V3, V4
- Digistump Oak
- chipKIT Uno32
- Alorium XLR8 (FPGA)
- LinkIt ONE (WiFi only)
Energia
- Texas Instruments
- CC3200-LaunchXL
- Tiva C Connected LaunchPad
- Stellaris LM4F120 LaunchPad
- MSP430F5529 + CC3100
- LaunchPad MSP432
- RedBearLab (CC3200, WiFi Mini)
- Texas Instruments
Particle https://github.com/vshymanskyy/blynk-library-spark)
- Core
- Photon
- Electron
- RPi
- SparkFun RedBoard
- RedBear Duo (WiFi & BLE)
ARM mbed (https://developer.mbed.org/users/vshymanskyy/code/Blynk/)
- Seeed Tiny BLE
- RedBearLab BLE Nano
- BBC micro:bit
- STM32 Nucleo + Wiznet 5100 , soon
JavaScript (Node.js, Espruino, Browsers) (https://www.npmjs.com/package/blynk-library)
- Regular PC with Linux / Windows / OS X
- Raspberry Pi (Banana Pi, Orange Pi, …)
- BeagleBone Black
- Onion Omega
- Onion Omega 2
- Intel Galileo
- Intel Edison
- Intel Joule
- LeMaker Guitar
- LeMaker Banana Pro
- Samsung ARTIK 5
- PandaBoard, CubieBoard, pcDuino, Tessel 2
- VoCore (OpenWRT + Espruino package)
- Espruino Pico
- …
Python (https://github.com/vshymanskyy/blynk-library-python)
- MicroPython
- Python 2
- Python 3
Lua (https://github.com/blezek/blynk-esp)
- NodeMCU
Arduino connection types
USB (Serial), connected to your laptop or desktop
Ethernet:
- Arduino Ethernet Shield (W5100)
- Arduino Ethernet Shield 2 (W5500)
- SeeedStudio Ethernet Shield V2.0 (W5200)
- ENC28J60-based modules
WiFi:
- ESP8266 as WiFi modem (running original firmware)
- Arduino WiFi 101 Shield
- Arduino WiFi Shield
- WIZnet WizFi310
- Adafruit CC3000 WiFi Breakout / Shield
- RN-XV WiFly
Bluetooth Smart (BLE 4.0):
- HM-10, HC-08
- DFRobot BLE-Link module
- Microduino/mCookie BLE
- RedBearLab BLE Mini
- nRF8001-based boards (Adafruit Bluefruit LE, etc.)
Bluetooth 2.0 Serial Port Profile (SPP)
- HC-05, HC-06, …
GSM/3G:
- SIMCom SIM800 series (SIM800A, SIM800C, SIM800L, SIM800H, SIM808, SIM868)
- SIMCom SIM900 series (SIM900A, SIM900D, SIM908, SIM968)
- A6/A7
- M590 (beta)
- GPRSbee
- Microduino GSM
- Adafruit FONA (Mini Cellular GSM Breakout)
- Adafruit FONA 800/808 Shield
Made by Community
- WIZnet-W5500-EVB
- LabVIEW
- Node-RED (can be used as bridge to HTTP, TCP, UDP, MQTT, XMPP, IRC, OSC…)
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:
- 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. - 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.
- 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.
. - 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.
- 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:
- You’re trying to connect to “WPA & WPA2 Enterprise” network (often used in offices), and your shield does not support this security method
- Your WiFi network has a login page that requests entering an access token (often used in restaurants)
- Your WiFi network security disallows connecting alien devices completely (MAC filtering, etc)
- There is a firewall running. Default port for hardware connections is 8442. Make sure it’s open.
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:
- Use Local Blynk Server
ping blynk-cloud.com
from the network your hardware is connected to. Use the IP address that you get during this ping and put it in mobile app like that:
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.
- 8441 - SSL/TLS connection for hardware
- 8442 - plain TCP connection for hardware (no security)
- 8443 - mutual authentication (mutual SSL) connection for Mobile Apps
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?
- You need to use regular sketch for exported apps;
- After you launched your hardware you are ready for OTA;
- You can trigger the firmware update for the specific hardware via it’s token or for all hardware.
Flow
- User triggers OTA with one of below HTTPS request;
- User provides within HTTPS request admin credentials and firmware binary file to update hardware with;
- 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;
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(); ... }
- 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
Template_ESP8266.ino.nodemcu.bin
- is relative (or full) path to your firmware;--insecure
flag for servers with self-generated certificates. You don’t need this flag if you used Let’s Encrypt or other trusted certificates;admin@blynk.cc:admin
admin credentials to your server. This is default ones. Format isusername:password
. You can change it inserver.properties
file;token
is token of your hardware you want apply the firmware update to. The firmware update will be initiated only in case device is online;
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:
Why do I need Local Blynk Server?
- Better security. You are the only one who knows about the server. You can setup security policies tied to your specific needs (MAC, IPs, login names, etc). You can also make it accessible only within your private network.
- Better stability. No need to rely on 3rd party Cloud solution. You have the full control.
- Lower latency. Server is as close to you as it could be.
- Maximum privacy. All data is stored locally and is not shared with anyone.
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:
- Connects to network (WiFi, Ethernet, …)
- Calls
Blynk.config(...)
- sets auth token, server address - 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
}
BLYNK_APP_DISCONNECTED()
This function is called every time the Blynk app gets connected to the server.
BLYNK_APP_DISCONNECTED() {
// Your code here
}
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:
- Comment-out
#define BLYNK_PRINT
to remove prints - 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
Я підтримав Blynk на Kickstarter. Де мої віджети та чому додаток безкоштовний?
Додаток безкоштовний, тому що інакше вам доведеться заплатити, щоб його завантажити. Так працює AppStore і Google Play. Поточний реліз Blynk має обмежений обсяг віджетів. Ми вирішили зробити їх вільними для всіх, доки ми не реалізуємо магазин. Після цього кожний віджет буде заплачений. Однак кожен захисник отримає їх безкоштовно (згідно з їхніми обіцянками).
Що таке Blynk Cloud?
Blynk Cloud - це програмне забезпечення з відкритим кодом, написане на Java за допомогою простого TCP/IP та захищеного TCP/IP (для апаратного забезпечення, що його підтримує) розеток і працює на нашому сервері. За замовчуванням Blynk програми iOS та Android підключаються до Blynk Cloud. Доступ для кожного користувача Blynk є безкоштовним. Ми також надаємо розповсюдження приватного сервера для тих, хто бажає встановити його локально.
Скільки коштує доступ до Cloud Blynk Server?
Це безкоштовно для кожного користувача Blynk.
Чи можу я запустити Blynk сервер локально?
Так. Ті з вас, хто хоче додаткової безпеки або не мають підключення до Інтернету, можуть встановити Local Blynk Server і запустити його у своїй локальній мережі. Blynk Server є відкритим вихідним кодом, і для розгортання потрібно менше кількох секунд. Всі інструкції та файли є тут.
Які вимоги до запуску приватного сервера Blynk?
Щоб запустити приватний Blynk Server, вам потрібно лише Java Runtime Environment.
Чи можу я запустити Blynk сервер на Raspberry Pi?
Так, звичайно! Ось інструкція.
Чи працює додаток Blynk над Bluetooth?
Так. Це зараз в бета-версії.
Чи підтримує Blynk Ethernet/Wi-FI/UART?
Так, всі вони. Див. Повний список підтримуваного обладнання ти шилдів.
У мене немає шилда. Чи можу я використовувати Blynk з моїм комп'ютером?
Так, ви можете використовувати Blynk просто за допомогою USB-кабелю. Тут поступово інструкція про те, як це зробити.
Чи може Blynk керувати кількома Arduino?
Так. Існує 3 способи прямо зараз :
- додайте декілька пристроїв до вашого проекту.
- ви можете використовувати той самий Auth Token для різних апаратних засобів. У такому випадку ви можете контролювати декілька програм з однієї інформаційної панелі.
- ви можете це зробити, використовуючи функцію мосту (Bridge) яка дозволяє відправляти повідомлення від одного апарату до іншого.
Чи зберігає Blynk сервер дані датчиків, коли програма йде в автономному режимі?
Так, кожна команда, яка передає апаратне забезпечення на сервер, зберігається. Ви могли б використовувати History Graph віджет, щоб переглянути їх.
Скільки віртуальних пінів я можу використовувати?
В основному це залежить від вашого обладнання. Низькотехнологічне обладнання може використовувати до 32 віртуальних пінів. Більш потужний (наприклад, ESP8266) може використовуйте до 128, але у вашому скетчі також потрібна властивість BLYNK_USE_128_VPINS. Зразок.
Чому додаток вимагає всіх цих дозволів?
http://help.blynk.cc/faq/blynk-android-permissions-explained
Посилання
- Blynk site
- Blynk community
- Blynk Library
- Blynk Examples
- Blynk Server
- Kickstarter campaign
Ліцензія
This project is released under The MIT License (MIT)