• Система автоматизации с открытым исходным кодом на базе 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 , сервис автоматом сбрасывает такие соединение.
 
Последнее редактирование:
Сверху Снизу