Управляем ардуиной через интернет

doom369
Offline
Зарегистрирован: 13.05.2015

Наверное процес который запускал не закрывался.

safari
Offline
Зарегистрирован: 02.02.2015

в общем, рано радовался. после обновления клиента, ни 19.2 ни 20.1 у меня теперь нормально не фурычат.

у меня был мультидевайс на разных пинах (виртуальные и аппаратные), всё прекрасно работало, пинов хватало за глаза.

теперь ничего не работает, виджеты видны, но ничего не обновляется.

девайсы (esp-шки)  зашиты в труднодоступных местах, обновить на них прошивки затруднительно :(

doom369
Offline
Зарегистрирован: 13.05.2015

Ну токены то у Вас остались? Вы всегда можете подправить их вручную. Не переживайте. Так же сам сервер делает бекапы в папку backup.

safari
Offline
Зарегистрирован: 02.02.2015

я не понимаю, куда теперь копать. в логах только на сертификаты ругается. выводить в консоль сервера можно расширенную диагностику? типа клиент стучится, клиент подключился?

токены раньше в поле DashShareTokens были, теперь там что-то другое. новый сервер, видимо, настройки под себя переделал.

как откатиться на старый сервер+старые настройки?

doom369
Offline
Зарегистрирован: 13.05.2015
log.level=trace 

https://github.com/blynkkk/blynk-server#advanced-local-server-setup

 

Если Вы обновили приложение то назад откатится нельзя. Просто скопируйте профайл из бакаов и поднимите сервер по новой.

safari
Offline
Зарегистрирован: 02.02.2015

откатился на старый серевр + старые настройки. тьфу-тьфу.

Дмитрий, что посоветуете, теперь сидеть на попе ровно и ждать офиц. поддержку мультидевайсов на IOS? А потом разом все конроллеры выковырять и перекомпилировать с новыми библиотеками?

можно как-то сделать, чтобы старая схема (разные пины, generic ESP8266) оставалась рабочей?

doom369
Offline
Зарегистрирован: 13.05.2015

Зависит от ситуации. Если все есть и работает то не вижу смысла ничего менять. Просто нужно правильно проапдейтится. Сначало нужно заапдейтить сервер (без этих штук с двумя серверами :) ). Потом приложение. Никаких проблем после этого не должно быть. Мы обеспечили back compatibility. 

safari
Offline
Зарегистрирован: 02.02.2015

Смысл есть, т.к. в моем доме кроме ESP-шек есть еще несколько ардуин и малин (такой уж я гик).  ESP32, опять, таки на подходе популярности.
Так что, хотелось бы тру мультидевас.

Приложения я уже проапдейтил, после апдейта сервера всё встало раком. В общем, пока обожду оф. поддержку в IOS, мне не к спеху.

safari
Offline
Зарегистрирован: 02.02.2015

А есть ли возможность трекать на карте не MCU, а андроид телефон? Ну, чтобы он выступал в качестве микроконтроллера и отсылал координаты? Типа find my phone?

doom369
Offline
Зарегистрирован: 13.05.2015

В теории можно через вебхук виджет сделать. Добавляем виджет джпс, добавляем виджет вебхук. В вебхуке говорим, когда поступают данные из джпс виджета - проапдейтить карту. Но Вам надо будет разобратся с Http API и форматом команд. Это у нас плохо документировано, но возможно.

doom369
Offline
Зарегистрирован: 13.05.2015

На форуме у нас уже кстати кто-то такое делал. Можно спросить там.

safari
Offline
Зарегистрирован: 02.02.2015

интересно, надо будет посмотреть.

Reliable_Bob
Offline
Зарегистрирован: 23.10.2016
 

Доброго времени.

Подскажите, почему-то по нажатию кнопки "Erase data" не очищаются данные в History Graph.

И еще, постоянно всплывает ошибка "error processing client command"...

#define BLYNK_PRINT Serial    // Comment this out to disable prints and save space
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <SimpleTimer.h>
#include <Wire.h>
#include <Adafruit_BMP085.h>

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

// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "Blynk";
char pass[] = "12345678";
int pin =13;
int boil;

WidgetLED ledOn(V13);
Adafruit_BMP085 bmp;
SimpleTimer timer;

// Keep this flag not to re-sync on every reconnection
bool isFirstConnect = true;

void boilon()
{
  if (digitalRead(pin)==HIGH)
  {
    boil=25;
    ledOn.off();
  }
  else {
    boil=100;
    ledOn.on();
  }
  Blynk.virtualWrite(14, boil);
}
BLYNK_CONNECTED() {
  if (isFirstConnect) {
    Blynk.syncAll();
  }
  // You can also update individual virtual pins like this:
  //Blynk.syncVirtual(V3, V6, V1);
  isFirstConnect = false;
 
}
 void bmp180 () {
  int pres = bmp.readPressure();
  int temp = bmp.readTemperature();
  Blynk.virtualWrite(V25, pres/133.3);
  Blynk.virtualWrite(V26, temp);
   
}

void setup()
{
  Serial.begin(9600);
  if (!bmp.begin()) {
  Serial.println("Could not find a valid BMP085 sensor, check wiring!");
  while (1) {}
  }
  pinMode(pin,INPUT);
  Blynk.begin(auth, ssid, pass);
 
  timer.setInterval(1000L, boilon);
  timer.setInterval(2000L, bmp180);
}

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


 

 
doom369
Offline
Зарегистрирован: 13.05.2015

Erase - наша бага. Зафиксим в след релизе.

"error processing client command" - не понятно, когда возникает? Локальный сервер или нет? иОС андроид? Версия?

Reliable_Bob
Offline
Зарегистрирован: 23.10.2016
 

Сервер не локальный. Андроид 5.1.1. Возникает при выборе виртуального пина в любом измерительном виджете или графике. Использование только Лед-виджета с подключенным виртуальным пином такую ошибку не вызывает.

 
doom369
Offline
Зарегистрирован: 13.05.2015

Последняя версия приложения?

Reliable_Bob
Offline
Зарегистрирован: 23.10.2016
 

Да. С возможностью использования в проекте нескольких разных токенов.

esa
Offline
Зарегистрирован: 27.06.2015

Добрый день

Я правильно понимаю, что виджет RTC должен выдавать текущее время и дату на облачном сервере (я использую облако)?

У меня данный виджет выдает дату 01.01.1970, а время обнуляется после заливки скетча и дальше работает как секундамер.

Делал по аналогии с примером  в документации по blynk

doom369
Offline
Зарегистрирован: 13.05.2015

По RTC - http://community.blynk.cc/t/rtc-not-working-anymore/10001

 

По "Illegal command" не получается воспроизвести. Может какие-то есть степы для репродюса?

esa
Offline
Зарегистрирован: 27.06.2015

Я читал это сообщения на форуме. Но я жду уже около 3 часов, а синхранизации нету -(((

doom369
Offline
Зарегистрирован: 13.05.2015
esa
Offline
Зарегистрирован: 27.06.2015

спасибо. буду ждать.

doom369
Offline
Зарегистрирован: 13.05.2015

Вы кстати виджет добавили? Заасайнили на пин?

esa
Offline
Зарегистрирован: 27.06.2015

 

Да. все сделал.

void clockDisplay()
{
  char currentTime[11];
  char currentDate[11];
  sprintf (currentTime, "%02d:%02d", hour (), minute ());
  sprintf (currentDate, "%02d-%02d-%04d", day (), month (), year ());
  Blynk.virtualWrite (V2, currentTime);
  Blynk.virtualWrite (V6, currentDate);
}

 

Reliable_Bob
Offline
Зарегистрирован: 23.10.2016

Удалил проект в приложении и создал заново с новым токеном.

Ошибка "error processing client command" не появляется.

Данные в графике очищаются.

 

 
esa
Offline
Зарегистрирован: 27.06.2015

Всем привет.

В модуле я использую timer.setInterval (30000L, clockDisplay). Т.е. данная функция запускается каждые 30с. В этой функции я "дергаю" виртуальный пины

void clockDisplay()
{
  char currentTime[11];
  char currentDate[11];
  sprintf (currentTime, "%02d:%02d", hour (), minute ());
  sprintf (currentDate, "%02d-%02d-%04d", day (), month (), year ());
  Blynk.virtualWrite (V2, currentTime);
  Blynk.virtualWrite (V6, currentDate);
}

Когда я создаю виджет (для пина V2), там есть параметр обновление.

Вопрос: какое время обновления, для виджета указывать? Какой параметр (время обновления процедуры (30сек) или виджета (1 сек)) имеет приоритер или они (процедура и виджет) работают в параллели? Что будет если в виджете я укажу время обовления 30сек. Не будет задержка около 1 минуты. (т.к. запуск таймера не един, у процедуры свой, виджета свой).

Спасибо

 

doom369
Offline
Зарегистрирован: 13.05.2015

Есть 2 режима работы виджета. PUSH это когда вы шлете с железки (Ваш случай). Reading Frequency - это когда виджет шлет запросы (пока приложение запущено) - для этого нужен хендлер BLYNK_READ.

Reliable_Bob
Offline
Зарегистрирован: 23.10.2016

Доброго времени.

Не могу найти, как удалить ненужную закладку в Tab...

Подскажите где искать?

 
doom369
Offline
Зарегистрирован: 13.05.2015

Свайп влево в настройках :)

safari
Offline
Зарегистрирован: 02.02.2015

После обновления на IOS 8.1.4 iphone 5s приложение стало крашится сразу после логина. Удаление/установка вроде помогли. 

На ipad, традицонно, нет проблем.

Reliable_Bob
Offline
Зарегистрирован: 23.10.2016

Доброго времени.

Хочу сказать за нововведение.

Отлично, что добавили индикацию подключения устройства к серверу.

Плохо только то, что при разрыве соединения картинка не меняется.

Было бы замечательно например закрашивать ее в желтый или красный цвет, когда соединения нет.

А так, приходится нажимать на нее, что бы посмотреть состояние соединения.

И то, что отображается дата последнего подключения - это тоже отлично))

doom369
Offline
Зарегистрирован: 13.05.2015

Спасибо. Все будет, не переживайте. Просто сейчас из-за back compatibility нету возможности реализовать эту фичу на полную. Как доделаем иОС - пофиксим.

safari
Offline
Зарегистрирован: 02.02.2015

Дмитрий, подскажите, как программно считать свойство виджета?

Например, положение слайдера или зебры до того, как его нажали.

Обработчик события хорошо работает, но мне надо считать в рантайме  текущее положение слайдера/кнопки и т.д.

Есть что-то типа Blynk.getproperty(....)?

doom369
Offline
Зарегистрирован: 13.05.2015

@safari  -

Blynk.syncVirtual(V0)

BLYNK_WRITE (V0) {

}

 

http://docs.blynk.cc/#blynk-main-operations-state-syncing-for-hardware

safari
Offline
Зарегистрирован: 02.02.2015

Ага, отлично. Т.е. после вызова:

Blynk.syncVirtual(V0)

выполнится код

BLYNK_WRITE (V0) {

который тут, вне зависимости, нажимали ли мы кнопку на виджетет или нет

}

так?

doom369
Offline
Зарегистрирован: 13.05.2015

Да.

safari
Offline
Зарегистрирован: 02.02.2015

А начиная с какой версии локального сервера это поддерживается?

doom369
Offline
Зарегистрирован: 13.05.2015

Фактически с первых версий.

safari
Offline
Зарегистрирован: 02.02.2015

Тогда у меня такая проблема. В этом коде:

BLYNK_CONNECTED() {
  if (isFirstConnect) {
    Blynk.syncAll();
  }
}

компилится с ошибкой:

Elka.ino: In function 'void BlynkOnConnected()':

Elka:316: error: 'isFirstConnect' was not declared in this scope

doom369
Offline
Зарегистрирован: 13.05.2015

Ну Вы не обьявили переменную isFirstConnect. По ссылке есть полные примеры.

safari
Offline
Зарегистрирован: 02.02.2015

Ага, спасибо, разобрался.

У меня еще такой вопрос. Где взять apk-шку, в которой уже сть инверсия для кнопок, но ещё нет поддержки мультидевайсов.

А то у меня старый сервер (из-за IOS) не хочет работать с крайним андроид-клиентом (2.*). Не проходит авторизацию.

Я нашел на старом телефоне версию 1.16.4, она рабочая, но там не поддерживается инферсия кнопок.

doom369
Offline
Зарегистрирован: 13.05.2015

Нигде. Подождите пожалуйста уже 2-3 недели. Там немного осталось.

safari
Offline
Зарегистрирован: 02.02.2015

ок

russo
Offline
Зарегистрирован: 20.11.2014

Не могу понять почему соединение отваливаеться, особенно когда происходит сработка датчиков.

Delay не использую, основной цикл такого вида
void loop()
{
  Blynk.run();
  timer.run();
}

Используеться таймер

timer.setInterval(6000, sendOnOff);//устанавливаем перезапуск sendOnOff с интервалом 6с.

Темиратура отпрашиваеться раз в 30 секунд, т.е. как бы сервер не загружаеться, использовал еще две Node Mcu esp8266, результат такойже. При выборе железа esp8266 или Node Mcu в свойствах проекта, результат такой же.

 

 

doom369
Offline
Зарегистрирован: 13.05.2015

Нужен весь код. Есть ли виджеты в проекте с Frequency reading?

russo
Offline
Зарегистрирован: 20.11.2014

Код написан для загородного дома, охрана двери и датчик движения, измерение темпиратуры на улице и печного котла, включение какой нибудь внешней нагрузки по команде. На второй странице телефона (TAB2) расположен терминал, но он нифига не работает. Дверные датчики хотел сделать по прерыванию, не получилось пока. Терминал не принимает информацию. Часы не синхронизируються. Потом хочу по терминалу получать открытие дверей по времени, знать когда видео просматривать.

Главная проблема - соединение отваливаеться, часто, примерно раз-два в минуту. Программа работает по таймеру, сервер не перегружен данными, в общем танцы с бубном.

Фото приложения, кнопка домой на айфоне не работает, поэтому сфотал другим телефоном. В общем HELP!!!

http://hostingkartinok.com/show-image.php?id=19cbfffa1d130b4bc14e184f206...

#define BLYNK_PRINT Serial    // Comment this out to disable prints and save space
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <OneWire.h>
#include <DallasTemperature.h>

#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>

#include <TimeLib.h>
#include <WidgetRTC.h>
#include <SimpleTimer.h>

#define DHTPIN            2    
#define DHTTYPE           DHT22

// V0 - время  
// V1 - светодиод на телефоне открытия двери
// V2 - темпиратура от ds18b20
// V3 - светодиод принудительного включения пина
// V4 - дата
// V5 - темпиратура од AM2302
// V6 -
// V7 - влажность от AM2302
// V8 - 
// V9 - виртуальная кнопка постановки на охрану двери
// V10 - светодиод на телефоне статус принятия на охрану
// V11 - светодиод на телефоне сработки ИК датчика
// V12 - светодиод на телефоне статуса принятия на охрану ИК датчика
// V13 - виртуальная кнопка постановки на охрану ИК

DHT_Unified dht(DHTPIN, DHTTYPE);

WidgetLED led1(1);   //светодиод на телефоне открытия двери
WidgetLED led10(10); //светодиод на телефоне статус принятия на охрану двери
WidgetLED led11(11); //светодиод на телефоне сработки ИК датчика
WidgetLED led12(12); //светодиод на телефоне статуса принятия на охрану ИК датчика

WidgetLED led3(3);   //светодиод на телефоне статуса реакции нажатия на кнопку

WidgetTerminal terminal(20);   // in global

#define PIN_DOOR 12  // контролируемый пин кнопка модуля
#define PIN_IR 14    // вход ИК датчика движения
#define LED 5        // контролируемый пин для включения светодиода модуля
#define PIN_temp 0   // контролируемый пин датчика темпиратуры

OneWire ourWire(PIN_temp); 
DallasTemperature sensors(&ourWire); 

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

BLYNK_ATTACH_WIDGET(rtc, V19);

byte a;                               //переменная счетчик секунд для измерения темпиратуры
boolean flag_pressure_pin_DOOR;       //новая инфа по статусу открытия двери
boolean flag_old_pressure_pin_DOOR;   //старая инфа по статусу открытия двери
boolean flag_pressure_pin_IR;         //новая инфа по статусу сработки ИК датчика
boolean flag_old_pressure_pin_IR;     //старая инфа по статусу сработки ИК датчика
boolean flag_button_V6;               //

boolean flag_guard_DOOR;              //флаг принятия на охрану дверьного датчика V9
boolean flag_guard_IR;                //флаг принятия на охрану датчика движения V13
int     pinValue_V9;                  //статус нажатия виртуальной кнопки охрана двери
int     pinValue_V13;                 //статус нажатия виртуальной кнопки охрана ИК датчика
boolean flag_start_blynk;             //флаг старта программы

// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "ля ля ля тра ля ля"; // оппа, америка европа

// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "TP-LINK_A1CFD5";
char pass[] = "diasamir";


void sendOnOff() 
{
  BLYNK_WRITE(V9);   //читаем статус принятия на охрану двери
  BLYNK_WRITE(V13);  //читаем статус принятия на охрану ИК датчика
  
  a = a + 1;
  if (a>9) a = 0;
  
  byte x = digitalRead(PIN_DOOR);//читаем магнитоконтактный датчик двери 12 пин
  byte y = digitalRead(PIN_IR);  //читаем ИК датчик 14 пин
  
  //отправляем данные по статусу кнопки на светодиод телефона
  if (x == 1) 
  {//проверим состояние
    led1.on(); //вкл вирт.светодиод т.к дверь открыта
    //Serial.println("LED OFF");
  }
  else 
  { //иначе выключим
    led1.off();
  }
  
  if (y == 1) 
  {//проверим состояние
    led11.on(); //вкл вирт.светодиод т.к дверь открыта
    //Serial.println("LED OFF");
  }
  else 
  { //иначе выключим
    led11.off();
  }
  
//-----------------------измеряем влажность и темпиратру-----------------------------------
 if(a==7)   //прошло 60 секунд - измеряем темпиратуру (a - изменяеться от 0 до 9ти)
 {
    //Blynk.virtualWrite(V0, millis() / 1000);
    sensors_event_t event;  
    dht.temperature().getEvent(&event);
    if (!isnan(event.temperature)) 
    {
       Blynk.virtualWrite(V5, event.temperature);
    }
  
    dht.humidity().getEvent(&event);
    if (!isnan(event.relative_humidity)) 
    {
      Blynk.virtualWrite(V7, event.relative_humidity);
    }
 }
//----------------------------------------------------------------------------------------
  
 
  if(digitalRead(PIN_DOOR)) flag_pressure_pin_DOOR = 0;  //обновляем инфу по статусу открытия двери
    else               flag_pressure_pin_DOOR = 1;
 
  //посылаем пуш уведомления и обновляем флаги 
  if(flag_pressure_pin_DOOR > flag_old_pressure_pin_DOOR) 
  {
     flag_old_pressure_pin_DOOR = flag_pressure_pin_DOOR;
  }
  
  if(flag_pressure_pin_DOOR < flag_old_pressure_pin_DOOR)
  {
    if(pinValue_V9) Blynk.notify("внимание, открыли дверь!!!"); 
    terminal.println("door open"); //-------------------------------нифига не работает терминал------------
    flag_old_pressure_pin_DOOR = flag_pressure_pin_DOOR;
    
  }
  
  if(digitalRead(PIN_IR)) flag_pressure_pin_IR = 0;  //обновляем инфу по статусу сработки ИК датчика
    else               flag_pressure_pin_IR = 1;
 
  //посылаем пуш уведомления и обновляем флаги 
  if(flag_pressure_pin_IR > flag_old_pressure_pin_IR) 
  {
     //Blynk.notify("внимание, произошло нажатие кнопки"); 
     flag_old_pressure_pin_IR = flag_pressure_pin_IR;
  }
  
  if(flag_pressure_pin_IR < flag_old_pressure_pin_IR)
  {
    if(pinValue_V13) Blynk.notify("внимание, сработка ИК датчика движения!!!"); 
    terminal.println("IR alarm");   //-------------------------------нифига не работает терминал------------
    flag_old_pressure_pin_IR = flag_pressure_pin_IR;
    
  }
 
  //проверяем включение выключение светодиода
  if(digitalRead(LED)) led3.on(); //вкл вирт.светодиод
    else led3.off(); //выкл вирт.светодиод
    
  //проверяем статус принятия на охрану двери  
  if(pinValue_V9) led10.on(); //вкл вирт.светодиод
    else led10.off();         //выкл вирт.светодиод
    
  //проверяем статус принятия на охрану ИК датчика 
  if(pinValue_V13) led12.on(); //вкл вирт.светодиод
    else led12.off();         //выкл вирт.светодиод
    
  if(a==9) //прошло 10 секнд - измеряем темпир
  {
    sensors.requestTemperatures();  
    Blynk.virtualWrite(V2, sensors.getTempCByIndex(PIN_temp)); //  
  }
  
  int rssi = WiFi.RSSI();
  Serial.print("RSSI = ");
  Serial.print(rssi);
  Serial.println(" dB");
  
  clockDisplay();
}

void clockDisplay()  //-----------------нету синхронизации по часам----------------------------
{
  // You can call hour(), minute(), ... at any time
  // Please see Time library examples for details

  String currentTime = String(hour()) + ":" + minute() + ":" + second();
  String currentDate = String(day()) + " " + month() + " " + year();
  Serial.print("Current time: ");
  Serial.print(currentTime);
  Serial.print(" ");
  Serial.print(currentDate);
  Serial.println();

  // Send time to the App
  Blynk.virtualWrite(V0, currentTime);
  // Send date to the App
  Blynk.virtualWrite(V4, currentDate);
}

BLYNK_WRITE(V9)   //снятие принятие на охрану двери
{
   pinValue_V9 = param.asInt(); // assigning incoming value from pin V1 to a variable
   // You can also use:
   // String i = param.asStr();
   // double d = param.asDouble();
   Serial.print("V9 Slider value is: ");
   Serial.println(pinValue_V9);
}

BLYNK_WRITE(V13)   //снятие принятие на охрану ИК датчика
{
   pinValue_V13 = param.asInt(); // assigning incoming value from pin V1 to a variable
   // You can also use:
   // String i = param.asStr();
   // double d = param.asDouble();
   Serial.print("V13 Slider value is: ");
   Serial.println(pinValue_V13);
}


void setup()
{
  Serial.begin(9600);
  Serial.println("SETUP");
  Blynk.begin(auth, ssid, pass);
  pinMode(PIN_DOOR,  INPUT_PULLUP); //это дверь
  pinMode(PIN_IR,  INPUT_PULLUP);   //это ИК датчик
  pinMode(DHTPIN,  INPUT_PULLUP);   //это AM2302
  pinMode(LED,  OUTPUT);            //это светодиод
  
  
  timer.setInterval(6000, sendOnOff);//устанавливаем перезапуск sendOnOff с интервалом 6с.
  
  // Begin synchronizing time
  //rtc.begin();
  
  dht.begin();
  
  //проверяем флаг открытия двери
  if(digitalRead(PIN_DOOR)) 
   {
      flag_old_pressure_pin_DOOR = 0;
      flag_pressure_pin_DOOR = 0;
   } 
   else 
   {
      flag_old_pressure_pin_DOOR = 1;
      flag_pressure_pin_DOOR = 1;
   }
   
   //проверяем флаг сработки ИК датчика
  if(digitalRead(PIN_IR)) 
   {
      flag_old_pressure_pin_IR = 0;
      flag_pressure_pin_IR = 0;
   } 
   else 
   {
      flag_old_pressure_pin_IR = 1;
      flag_pressure_pin_IR = 1;
   }
   
   sensors.begin();
   sensors.setResolution(10);  //выставляем разрешение измерения темпиратуры 10 бит
   
   terminal.println("START BLYNK");  //-------------------------------нифига не работает терминал------------
   
   // Begin synchronizing time
  rtc.begin();
 
 //-------------------------------нифига не работает терминал------------ 
  terminal.println(F("Blynk v" BLYNK_VERSION ": Device started"));
  terminal.flush();

}


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

 

safari
Offline
Зарегистрирован: 02.02.2015

Дмитрий.

Подскажите пож-та, как сделать, чтобы blynk не блокировал скетч в отсутсвии wi-fi/зависании сервера и т.п.

Сделал Wi-fi выключатель на ESP8266, хотелось бы, чтобы он работал автономно от локальных кнопок, но он дальше   Blynk.begin(....) не идет, в случае отключения от сервера.

в консоли такая картина:

[324] Connecting to wl
[7825] Connected to WiFi
[7825] IP: 192.168.0.120
[7825] 
    ___  __          __
   / _ )/ /_ _____  / /__
  / _  / / // / _ \/  '_/
 /____/_/\_, /_//_/_/\_\
        /___/ v0.4.2 on NodeMCU

[7831] Connecting to 192.168.0.116
[14045] Connecting to 192.168.0.116
[20295] Connecting to 192.168.0.116
[26570] Connecting to 192.168.0.116
[32820] Connecting to 192.168.0.116

***.116 - адрес локального сервера. 

 

russo
Offline
Зарегистрирован: 20.11.2014

В общем я вас понял,

надо удалять проект,

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

russo
Offline
Зарегистрирован: 20.11.2014

Именно когда происходит сработка геркона на входе пина esp8266 происходит разрыв соединения

дребезг исключен, делал - цеплял выход со светодиода виджета кнопки привязанной к цифровому пину на esp соединял со входом пина геркона. При нажатии на телефоне виртуальной кнопки - на входе пина есп шло изменение уровня. Это для проверки делал. Также отваливаеться соединение как и с реальным герконом.

Среда ардуино последняя 1.8.0, пробовал и с 1.6.4

библиотека BLYNK 0.4.2

Как охранную систему (с магнитоконтактными датчиками) кто нибудь использовал BLYNK ?

вот что вываливаеться в монитор сомпорта

http://hostingkartinok.com/show-image.php?id=0fb11f371fb8630c98edf4ad737c973a

сам код

#define BLYNK_PRINT Serial    // Comment this out to disable prints and save space
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <SimpleTimer.h>
#include <TimeLib.h>


#include <OneWire.h>
#include <DallasTemperature.h>

#define PIN      12 // контролируемый пин кнопка модуля
#define LED      16 // контролируемый пин для включения светодиода модуля
#define DOOR     4  // дверь МК датчик
#define IR       5  // ИК датчик движения
#define PIN_temp 0  // контролируемый пин датчика темпиратуры
OneWire ourWire(PIN_temp); 
DallasTemperature sensors(&ourWire); 

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

// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "TP-LINK_A1CFD5";
char pass[] = "diasamir";

SimpleTimer timer;

WidgetLED led2(2);      //светодиод открытия двери красный
WidgetLED led3(3);      //светодиод статуса принятия на охрану двери голубой
WidgetLED led4(4);      //светодиод сработки ИК красный
WidgetLED led5(5);      //светодиод статуса принятия на охрану ИК голубой
WidgetLED led6(6);      //светодиод статуса вкл-выкл внеш нагрузки

#define LED_V2    V2    //
#define LED_V3    V3    //
#define LED_V4    V4    //
#define LED_V5    V5    //
#define LED_V6    V6    //

bool flag_open_DOOR;
bool flag_open_IR;

bool pinValue_V0;
bool pinValue_V1;
bool flag_V0_status;    //флаг принятия на охрану двери
bool flag_V1_status;    //флаг принятия на охрану ИК
bool flag_V0_DOOR_open; //открыли ли дверь?
bool flag_V1_IR_open;   //была ли сработка ИК?


//V0 - дверь кнопка 
//V1 - ИК датчик кнопка
//V2 - светодиод сработки двери
//V3 - светодиод статуса принятия на охрану двери
//V4 - светодиод сработки ИК
//V5 - светодиод статуса принятия на охрану ИК
//V6 - 
//V7 - 
//V8 - 
//V9 - 
//V10 - terminal

WidgetTerminal terminal(V10);

//-----------------------------------------------------------------------
//-----------обработчики прерывания--------------------------------------
//-----------------------------------------------------------------------
void inter_DOOR()  //выполняеться в прерывании
{
  static unsigned long millis_prev;
  if(millis()-50 > millis_prev)    // 
  {         
  
  if(digitalRead(DOOR)) 
    {
      Blynk.virtualWrite(LED_V2, 255);
      if(flag_V0_status) Blynk.notify("внимание, открыли дверь");
      Serial.println("DOOR open");
      Serial.print("flag_V0_status = ");
      Serial.println(flag_V0_status);

    }
    else 
    {
      Blynk.virtualWrite(LED_V2, LOW);
      Serial.println("DOOR closed");
    }
  }
  millis_prev = millis();
}

void inter_IR()   //выполняеться в прерывании
{
  static unsigned long millis_prev;
  if(millis()-50 > millis_prev)    // 
  {   
    if(digitalRead(IR)) 
    {
      Blynk.virtualWrite(LED_V4, 255);
      if(flag_V1_status) Blynk.notify("внимание, сработка ИК датчика");
      Serial.println("IR open");
      Serial.print("flag_V1_status = ");
      Serial.println(flag_V1_status);

    }
    else 
    {
      Blynk.virtualWrite(LED_V4, LOW);
      Serial.println("IR closed");
    }
  }  
  millis_prev = millis();    
}
//----------------------------------------------------------------------


void sendOnOff()  //эта функция выполняеться по таймеру периодически
{
   BLYNK_WRITE(V0);  //считываем было ли нажатие кнопки принятие на охрану DOOR
   BLYNK_WRITE(V1);  //считываем было ли нажатие кнопки принятие на охрану IR

   if(digitalRead(LED)) Blynk.virtualWrite(LED_V6, 255);
    else Blynk.virtualWrite(LED_V6, LOW);
   
//-----------------------------------------------------------------
  if(pinValue_V0) //проверяем на нажатие кнопку прнятия на охрану,
                  //кнопка без фиксации
   {
     flag_V0_status = !flag_V0_status;
     if(flag_V0_status) 
     {
        Blynk.virtualWrite(LED_V3, 255);
     } 
     else
     {
        Blynk.virtualWrite(LED_V3, LOW);
     }
   }
   
   
   if(pinValue_V1) //проверяем на нажатие кнопку прнятия на охрану
                   //кнопка без фиксации
   {
     flag_V1_status = !flag_V1_status;
     if(flag_V1_status) 
     {
        Blynk.virtualWrite(LED_V5, 255); 
     } 
     else
     {
        Blynk.virtualWrite(LED_V5, LOW);
     }
   }
//---------------------------------------------------------------------
    Serial.println(analogRead(A0));
    
}


BLYNK_WRITE(V0)  //считываем состояние V0
{
   int button_V0 = param.asInt() ;
   pinValue_V0 = button_V0;
} 

BLYNK_WRITE(V1)  //считываем состояние V1
{
   int button_V1 = param.asInt() ;
   pinValue_V1 = button_V1;
} 

void setup()
{
  Serial.begin(9600);
  Blynk.begin(auth, ssid, pass);
  pinMode(LED,  OUTPUT);
  pinMode(DOOR,  INPUT);
  digitalWrite(DOOR,  LOW);
  pinMode(IR,  INPUT);
  digitalWrite(IR,  LOW);
  pinMode(A0, INPUT);           //подключен фоторезистор
  
  attachInterrupt(DOOR, inter_DOOR, CHANGE); // 
  attachInterrupt(IR, inter_IR, CHANGE);     // 
  
  timer.setInterval(2000, sendOnOff);        //
}

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

 

 

russo
Offline
Зарегистрирован: 20.11.2014

В общем заработал мой проект как положенно, без косяков. Сделал на проводном инете, связка UNO и W5100. Подозреваю косячит мой wifi роутер, поэтому esp8266 постоянно отваливалась. 

400 строк кода и UNO больше не воспринимает, програмная память заполнена. Печально. Заказал mega256 железку

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

только не знаю как терминал очищать, бывает надо иногда