• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Обсуждение Blynk - примеры, документация и FAQ

Victor

Administrator
Команда форума
Последнее редактирование:

Jon

Member
Срочно нужні примері на украинско-русском язіке.
Примеров много на форуме производителя, но для начала можно просто передать на смартфон счетчик секунд.
Код:
//на смартфоне ставим виджет  Value Display
//настраиваем его на виртуальный порт №1

#define BLYNK_PRINT Serial    // лог работы модуля в мониторе
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <SimpleTimer.h>

SimpleTimer timer; // библиотека таймера (скачиваем от куда угодно.)

// Как получить токен, читать у производителя (вставить вместо звездочек)
char auth[] = "*******************************";


void sendUptime()
{
Blynk.virtualWrite(V1, millis() / 1000); // на виртуальный пин №1 отправляем текущее время.
}


void setup()
{
  Serial.begin(9600);  // скорость для мониторинга нашей платки

  Blynk.begin(auth, "WiFi сеть", "пароль"); //подключаем свою WIFI сеть

  timer.setInterval(5000, sendUptime);//3000=3 sec //периодичность отправки данных (не делать меньше секунды, система зависнет!)
}

void loop()
{
  Blynk.run();
  timer.run(); // Initiates SimpleTimer
}
Не отправлять данные чаще чем раз в секунду! Подвесите приложение.
 
Последнее редактирование:

AVL

Member
Не компилится.
Где взять библиотеку SimpleTimer.h?
Спасибо!

Сам себе и отвечаю.
Вот здесь: https://github.com/jfturcot/SimpleTimer

Ура, заработало!!!
Я начинаю понимать КАК ОНО РАБОТАЕТ!!!!!!
Значит, можно паралельно две подпрограммы выполнять:
Код:
void loop()
{
  Blynk.run();
  timer.run(); // Initiates SimpleTimer
}
Что ещё полезное можно вставить ?
Как отобразить в Андроиде состояние ПИНа 8266? Это сейчас меня интересует.
Спасибо!
 
Последнее редактирование:

Jon

Member
Как отобразить в Андроиде состояние ПИНа 8266? Это сейчас меня интересует.
Это вообще не требует программирования модуля.
Чтение и запись физических пинов выполняется соответствующими виджетами на смартфоне.
Чтение: выбираем допустим виджет LED у него настраиваем цифровой вход на конкретный GPIO модуля. И все. Светодиод на смартфоне начнет показывать состояние пина.
Запись, аналогично:
Берем виджет BUTTON его цифровой пин настраиваем на конкретный GPIO модуля. На модуле к этому GPIO цепляем релюшку или светодиод.
Тыкаем бутон на смартфоне - релюшка щелкает, светодиод мыргает.
 
  • Like
Реакции: AVL

AVL

Member
Чтение: выбираем допустим виджет LED у него настраиваем цифровой вход на конкретный GPIO модуля. И все. Светодиод на смартфоне начнет показывать состояние пина.
ТАК не работает индикация. Вы говорите взять в LED ЦИФРОВОЙ ВХОД, а у него нет ЦИФРОВОГО входа, только ВИРТУАЛЬНЫЙ. Во всяком случае его нет в моём Андроид приложении. Я могу выставить аж 31 (почему так много?) виртуальный вход, но ни один из них не даёт мне индикацию "единички" на моём хардовом входе.
Через BUTTON управлять - у меня получается, а считывать через LED - НЕТ. Я в шоке. Почему ТАК?
Из этой строчки я, вроде, понимаю, что виртуальный ПИН надо всё-таки как-то конфигурировать
[inline]Blynk.virtualWrite(V1, millis() / 1000); // на виртуальный пин №1 отправляем текущее время.[/inline]
Как перенаправить мой хардовый ПИН в виртуальный?

И ещё вопрос.
Я могу с нескольких Андроидов одновременно управлять одним 8266?
Спасибо.
 
Последнее редактирование:

AVL

Member
И свежая непонятка в банальном коде.
Как только я добавляю в РАБОЧИЙ базовый БЛИНК мигпние светодиодом, то БЛИНК перестаёт управляться с андроида, хотя светодиод на плате ритмично мигает.
[HASHTAG]#define[/HASHTAG] BLYNK_PRINT Serial // Comment this out to disable prints and save space
[HASHTAG]#include[/HASHTAG] <ESP8266WiFi.h>
[HASHTAG]#include[/HASHTAG] <BlynkSimpleEsp8266.h>

// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "e68c15mhytr3ebaa04ce89b5949b81688867184e99";

void setup()
{
Serial.begin(9600);
Blynk.begin(auth, "DIR-615", "1197011970");
pinMode(BUILTIN_LED, OUTPUT); // Initialize the BUILTIN_LED pin as an output
}

void loop()
{
Blynk.run();
digitalWrite(BUILTIN_LED, LOW); // Turn the LED on (Note that LOW is the voltage level
// but actually the LED is on; this is because
// it is acive low on the ESP-01)
delay(1000); // Wait for a second
digitalWrite(BUILTIN_LED, HIGH); // Turn the LED off by making the voltage HIGH
delay(2000); // Wait for two seconds (to demonstrate the active low LED)
}
Спасибо!
 

Jon

Member
Согласен, я немного наврал про светодиод.
Нужно объявить в программе, что на виртуальном пине будет висеть светодиод,
а в теле программы уже управлять им параллельно с физическим.

WidgetLED led(5); //программное имя: led, в скобках пятый (любой из 32 свободных) виртуальный пин.

void loop()
{
Blynk.run();
digitalWrite(BUILTIN_LED, LOW); // Turn the LED on (Note that LOW is the voltage level
led.off();
delay(1000); // Wait for a second
digitalWrite(BUILTIN_LED, HIGH); // Turn the LED off by making the voltage HIGH
led.on();
delay(2000); // Wait for two seconds (to demonstrate the active low LED)
}
 
Последнее редактирование:

AVL

Member
Спасибо, но не ясно. Не ясно зачем нам мигать ЛЕДом в виджете. Согласен, что смотрится КРАСИВО. Но,
я хочу понять как сделать так, если я подал на хардовый ПИН 8266 единичку, то у меня загорелся светодиод в виджете.
Извините за непонятливость. Спасибо.
 

Jon

Member
Есть такая встроенная функция:
BLYNK_WRITE(V15) //кнопка на мобиле привязана к V15
{ int y = param.asInt();
if ( y == 1)
{ digitalWrite(BUILTIN_LED, LOW);
led.on();
}
else {
digitalWrite(BUILTIN_LED, HIGH);
led.off();
}
}
правда она срабатывает только если к кнопке привязан виртуальный пин.
Таким образом нажимая кнопку на смартфоне, мы можем внутри этой функции выполнить любую задачу, включая управление физическим пином, и обратным ходом
зажечь диод на смартфоне.
Лучшего решения я пока не нашел.
Да и уже не ищу, потому как телеметрия передается очень не стабильно. Постоянно рвется связь между смартфоном и модулем.
 
  • Like
Реакции: AVL

AVL

Member
Jon, спасибо, но я спрашиваю нечто другое, чем то, что Вы мне отвечаете.
У меня НЕТ БАТТОНА.
В Андроиде у меня всего один виджет ЛЕД. Один светодиод на весь екран.
Я на хардовый пин IO12, к примеру, подаю логическую единицу, и очень хочу, что б этот виджет ЛЕД у меня синхронно зажигался.
Все, большего мне не надо пока-что.
Спасибо.
 

Jon

Member
Я так понимаю управление хард.пином 12, выполняется внутри программы ESP8266?
Так там и добавить строчку вкл/выкл диода led.on(); / led.off();
Или из вне при помощи физической кнопки?
Тогда надо ловит изменение этой кнопки и там опять же пристроить вкл/выкл диодом.
Считывание состояния кнопки - это уже чисто Ардуиновская процедура, примеров полно.
 
Последнее редактирование:
  • Like
Реакции: AVL

AVL

Member
Нет, не внутри. Снаружи я подаю сигнал на ПИН. С помощью физической кнопки.
 

AVL

Member
Мы не понимаем друг друга. Люди, спасите!!!
У меня нет хардового светодиода.
У меня есть Андроид планшет с BLYNK программой и одним виджетом LED в программе.
Также есть 8266 девайс только одной кнопкой.
Как сделать так, что б когда я нажал на хардовую кнопку на 8266 у меня загорался LED а Андроиде?
Спасибо!
 

Schatten_A

New member
Мы не понимаем друг друга. Люди, спасите!!!
У меня нет хардового светодиода.
У меня есть Андроид планшет с BLYNK программой и одним виджетом LED в программе.
Также есть 8266 девайс только одной кнопкой.
Как сделать так, что б когда я нажал на хардовую кнопку на 8266 у меня загорался LED а Андроиде?
Спасибо!
Здравствуйте. У меня аналогичная проблема: нужно подтверждение на виртуальном пине Led виджета Blynk, о том какое состояние, на хардовом пине железки (в моём случае, это arduino pro mini плюс ENC28J60). Перепробовал много скетчей, но поскольку в программировании, не силён - пребываю в полной прострации. Кстати вы нашли решение своей проблемы?
 

Jon

Member
я вроде выше все разжевал про виртуальные пины... Попробую еще раз...
В отдельной подпрограмме, которую нужно запускать допустим раз в секунду, опрашиваем хардовский пин модуля и в зависимости от его состояния зажигаем или гасим виртуальный светодиод на виджете.
Код:
#define BLYNK_PRINT Serial    // Comment this out to disable prints and save space
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>

// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "YourAuthToken";

#define PIN 5 // контролируемый пин модуля
WidgetLED led1(1); //светодиод на смарте

#include <SimpleTimer.h> //таймер
SimpleTimer timer;

void sendOnOff() {
  int x = digitalRead(PIN);//читаем пин модуля
  if (x == 1) {//проверим состояние
    led1.on(); //вкл вирт.светодиод
  }
  else { //иначе выключим
    led1.off();
  }
}

void setup() {
  Serial.begin(9600);
  Blynk.begin(auth, "ssid", "pass");
  pinMode(PIN, INPUT);
  timer.setInterval(1000, sendOnOff);//устанавливаем перезапуск sendOnOff с интервалом 1с.

}

void loop() {
  Blynk.run();
  timer.run();

}
 

Schatten_A

New member
я вроде выше все разжевал про виртуальные пины... Попробую еще раз...
В отдельной подпрограмме, которую нужно запускать допустим раз в секунду, опрашиваем хардовский пин модуля и в зависимости от его состояния зажигаем или гасим виртуальный светодиод на виджете.

Большое спасибо, за информацию, для "особо одарённых":). Я в принципе уже копал в этом направлении, но сам запутался в собственном скетче: в общем наложение слабых знаний в программировании и невнимательности.
 

StalSan

New member
Доброго времени суток, пытаюсь рулить гаражными воротами через esp8266 и blynk, рулить ими собственно получается отлично, встал вопрос обратной связи, набросал скетч, который по моим скромным представлениям и познаниям должен слать notification при определенной комбинации состояния 12 и 14 пинов, возможные варианты: open, close, opening, closing. На pin 12 и 14 соотвественно приходит +5v когда ворота находятся в открытом или закрытом состоянии, когда ворота в движении на них LOW. Все бы хорошо, только при подаче +5v на 12 или 14 пин у меня идет циклический реконнект к облаку blynk (сама esp не ребутается) и с каждым реконнектом валится notification с текущим состоянием, подскажите где ошибка задолбался уже :(
Код:
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>

char auth[] = "xxxxxx";
const int OSPin = 12; //open State Pin
const int CSPin = 14; //close State Pin
const int ActPin = 4; //Action Pin
boolean LastStateCSPin;
boolean LastStateOSPin;
int state;

void setup()
{
  Serial.begin(9600);
  Blynk.begin(auth, "xxxx", "xxxxx");

  while (Blynk.connect() == false) {
  // Wait until connected
  }
  pinMode(ActPin, OUTPUT);
  pinMode(OSPin, INPUT);
  pinMode(CSPin, INPUT);
}

void checkState()
{
  if(digitalRead(OSPin)==HIGH&&state!=0)
  {
    state = 0;
    Blynk.notify("open");
  }
  if(digitalRead(CSPin)==HIGH&&state!=1)
  {
    state = 1;
    Blynk.notify("close");
  }
  if(digitalRead(OSPin)==LOW&&digitalRead(CSPin)==LOW&&LastStateCSPin==HIGH&&state!=3)
  {
    state = 3;
    Blynk.notify("opening");
  }
  if(digitalRead(OSPin)==LOW&&digitalRead(CSPin)==LOW&&LastStateCSPin==HIGH&&state!=4)
  {
    state = 4;
    Blynk.notify("closing");
  }
  LastStateCSPin = digitalRead(CSPin);
  LastStateOSPin = digitalRead(OSPin);
}

void loop()
{
  checkState();
  Blynk.run();
}
 
Последнее редактирование:

Jon

Member
Все свои процедуры, связанные с обращением к сервису, нужно запускать через таймер не чаще 1 сек. Нельзя их на прямую запихивать в loop , сервис автоматом сбрасывает такие соединение.
 
Последнее редактирование:
Сверху Снизу