Мигание сведодиодом на ESP8266 через BLYNK

Кирилл123
Offline
Зарегистрирован: 07.08.2019

Всем добрый день. Сразу прошу прощения за, наверное, простейший вопрос.

Подскажите пожалуйста, завел на приложении BLYNK кнопку и задал ей виртуальный пин. Светодиод исправно включается по нажатии. Теперь хочу усложнить задачу и сделать так, чтобы встроенный светодиод при нажатии кнопки в приложении моргал с заданной частотой, до тех пор, пока не выключу кнопку в приложении.

Вот код, которым включаю штатный светодиод. :

#define BLYNK_PRINT Serial
#define Ledpin 2

#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>

char auth[] = "XXXXXXXXXXXXXXXX";
char ssid[] = "YYYYYYY";
char pass[] = "ZZZZZZZ";
 /*BLYNK_CONNECTED(){Blynk.syncVirtual(V1);}*/

 BLYNK_WRITE(V1)
{  
    int pinValue = param.asInt(); 
    if (pinValue == 1) {

      pinMode(Ledpin, OUTPUT);
      digitalWrite (Ledpin, LOW);
      delay (500);
      digitalWrite (Ledpin, HIGH);
      delay (250);  
      /*Blynk.virtualWrite(V1, LOW);*/
                        }                
}
void setup()
{
  Serial.begin(9600);
  Blynk.begin(auth, ssid, pass);
}

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

Подскажите пожалуйста направление, как сделать мигание непрерывным и при этом, чтобы не терялась связь с приложением, чтобы программа могла увидеть изменение состояния пина V1.

Спасибо заранее.

Rostislav_lv
Offline
Зарегистрирован: 12.02.2019

https://github.com/blynkkk/blynk-library/blob/master/examples/More/Strob...
Готовый скетч с регулировкой частоты в приложении.

Кирилл123
Offline
Зарегистрирован: 07.08.2019

Большое спасибо. буду разбираться как оно работает. 

Кирилл123
Offline
Зарегистрирован: 07.08.2019

Всем добрый день! вчера обновились некие библиотеки и теперь даже этот мой код перестал работать нормально. Если раньше при нажатии кнопки светодиод загорался и тух. то теперь он почемуто просто загорается и не тухнет. Подскажите пожалуйста, тут идёт не так??

Спасибо.

b707
Offline
Зарегистрирован: 26.05.2017

Кирилл123 пишет:

 Подскажите пожалуйста, тут идёт не так??

 

мало информации.

Напоминает "Товарищи ученые, у меня в подполе иногда раздается стук..." Подскажите, что это?

Кирилл123
Offline
Зарегистрирован: 07.08.2019

Перестал работать код из первого моего сообщения. Через блинк нажимал кнопку, светодиод включался и выключался бесконечно, согласно выставленным интервалам в delay и обрывалась связь с приложением. Подумал, что контроллер не может повторно опросить кнопку и сваливается в бесконечный цикл еще в операторе if. Добавлял for, к примеру с счётом от 0 до 4, нажимал кнопку, светодиод моргал 5 раз и успокаивался. Потом в конце добавил принудительный возврат кнопки в приложении в выключенное состояние - закомментированый участок. 

Следующим этапом, хотел всё таки заставить контроллер мигать по нажатии бесконечно, пока не отожму кнопку опять. Как мне подсказали, посмотрел стробоскоп, там реализовано на таймере, но вчера возникли две проблемы. 1. Код стробоскопа компилируется, но в приложении нет подключения к контроллеру. В том коде есть только строка, где вводится токен блинка. Не могу понять как в контроллер внести данные сети - имя и пароль. 2. Решив прикрутить таймер к уже имеющемуся скетчу, столкнулся с ситуацией, что теперь даже вариант, конда светодиод бесконечно моргает не работает. Т.е. при нажатии кнопки в приложении, вместо того, чтобы включить и потом выключить светодиод, пусть хоть 1 раз, хоть бесконечно, светодиод просто включается. Связь с приложением не теряется, и повторным нажатием, светодиод гаснет.

Я в тупике. Простейшая, по идее логика, выдать на пин низкий уровень, чтобы включить светодиод и через определённую задержку выдать на пин высокий уровень. Перестало работать даже это((((

Ну и вопрос номер 3. откуда и по какому принципу подключаюся библиотеки, например того же BLYNK? В списке библиотек у меня нет #include <BlynkSimpleEsp8266.h>. Но если удалю - не будет работать скетч. В скетче стробоскопа эта библиотека не используется вообще... 

На этом форуме, я, видимо, самый дно....

nik182
Offline
Зарегистрирован: 04.05.2015

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

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

Кирилл123
Offline
Зарегистрирован: 07.08.2019

Всем доброго дня!

Спасибо всем, кто откликнулся, увидел некоторые свои ошибки и направление движения.

С кнопкой разобрался - создавал новый проект и на кнопку обозначил хардовый пин 2, а не виртуальный. 

Попробовал скетч со стробоскопом. Не смог подключить ESP к блинку, потому попробовал немного изменить скетч, на основе примера 
StandAlone.  Светодиод мигает, но нет управления частотой со слайдера. В этот раз несколько раз перепроверил. Кнопку и слайдер повесил на виртуальные пины, слайдеру поставил значения от 100 до 1000, как в примере. Светодиод мигает с интервалом в полсекунды. Подскажите пожалуйста, что не так с кодом? Такое впечатление, что либо вообще не обрабатывается код для слайдера, либо значение ползунка не прописывается в интервал таймера. Вот код, который собрал из двух:

#include <ESP8266WiFi.h>
#include <SPI.h>
#include <BlynkSimpleEsp8266.h>

char auth[] = "xxxxxxxxxxxxxxxx";  //параметры сети для блинка
char ssid[] = "ssssssssssssss";
char pass[] = "zzzzzzzzzzzzz";


#define BLYNK_PRINT Serial

BlynkTimer timer;  //объявляем таймер
int t1;

#define Ledpin 2

void ledBlynk()  //функция мигания. если светодиод включен - выключаем, и наоборот.
{
  digitalWrite(Ledpin, !digitalRead(Ledpin));
}

BLYNK_WRITE(V1)
{
  if (param.asInt()) {
    timer.enable(t1);
  } else {
    timer.disable(t1);
    digitalWrite(Ledpin, HIGH);
  }
}
BLYNK_WRITE(V2)
{
  long interval = param.asLong();
  boolean wasEnabled = timer.isEnabled(t1);
  timer.deleteTimer(t1);
  t1 = timer.setInterval(interval, ledBlynk);
  if (!wasEnabled) {
    timer.disable(t1);
  }
}

void setup() {
  Serial.begin(9600);
  Blynk.begin(auth, ssid, pass);
  pinMode(Ledpin, OUTPUT);
  t1 = timer.setInterval(500L, ledBlynk);
  timer.disable(t1);
  
}

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

 

Пробовал добавить второй таймер в виджет слайдера, чтобы также обращался к функции ledBlynk со своими параметрами, но то ли он игнорируется, толи опять же код для слайдера V2 игнорируется. 

Помогите с направлением, пожалуйста