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

Seltvik
Offline
Зарегистрирован: 24.10.2013

Проблема такая: есть ESP-01, я ее прошил на версию 0.22 как надо крч все вроде. пины подтянул какие надо к 3.3В. Питание стабильное от отдельного преобразователя. Если через адаптер COM порта то модуль опрашивается все ок. Если пытаюсь к меге подцепить залив такой скетч который ниже. То пишите дуня следующиее: 

[199] Blynk v0.3.5-beta
[700] Connecting to ssid
[10733] Failed to connect WiFi
 
или так 
 
[199] Blynk v0.3.5-beta
[700] Connecting to ssid
[1710] Failed to disable Echo
 
Не могу понять в чем беда. Так как параметры все мои и ключ от блинка тоже мой. У кого то были такие проблемы? скажите куда копать то((( Уже 3и дня сижу над ним ппц.
01 /**************************************************************
02  * Blynk is a platform with iOS and Android apps to control
03  * Arduino, Raspberry Pi and the likes over the Internet.
04  * You can easily build graphic interfaces for all your
05  * projects by simply dragging and dropping widgets.
06  *
07  *   Downloads, docs, tutorials: <a href="http://www.blynk.cc" title="http://www.blynk.cc" rel="nofollow">http://www.blynk.cc</a>
08  *   Blynk community:            <a href="http://community.blynk.cc" title="http://community.blynk.cc" rel="nofollow">http://community.blynk.cc</a>
09  *   Social networks:            <a href="http://www.fb.com/blynkapp" title="http://www.fb.com/blynkapp" rel="nofollow">http://www.fb.com/blynkapp</a>
10  *                               <a href="http://twitter.com/blynk_app" title="http://twitter.com/blynk_app" rel="nofollow">http://twitter.com/blynk_app</a>
11  *
12  * Blynk library is licensed under MIT license
13  * This example code is in public domain.
14  *
15  **************************************************************
16  *
17  * This example shows how to use ESP8266 Shield via Hardware Serial
18  * (on Mega, Leonardo, Micro...) to connect your project to Blynk.
19  *
20  * Note: Ensure a stable serial connection to ESP8266!
21  *       Firmware version 1.0.0 (AT v0.22) or later is needed.
22  *       You can change ESP baud rate. Connect to AT console and call:
23  *           AT+UART_DEF=115200,8,1,0,0
24  *
25  * Change WiFi ssid, pass, and Blynk auth token to run :)
26  * Feel free to apply it to any other example. It's simple!
27  *
28  **************************************************************/
29 //#define BLYNK_DEBUG
30 #define BLYNK_PRINT Serial    // Comment this out to disable prints and save space
31 #include <ESP8266_HardSer.h>
32 #include <BlynkSimpleShieldEsp8266_HardSer.h>
33  
34 // Set ESP8266 Serial object
35 #define EspSerial Serial2
36  
37 ESP8266 wifi(EspSerial);
38  
39 char auth[] = "**********************************************************";
40 char ssid[] = "Xiaomi_8D7C";
41 char pass[] = "***********";        // Set to "" for open networks
42  
43 void setup()
44 {
45   // Set console baud rate
46   Serial.begin(9600);
47   delay(100);
48   // Set ESP8266 baud rate
49   EspSerial.begin(115200);
50   delay(100);
51  
52   Blynk.begin(auth, wifi, "ssid""pass");
53 }
54  
55 void loop()
56 {
57   Blynk.run();
58 }

 

 

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

Добрый день. Для начала возьмите самую последнюю версию блинк библиотеки. 0.3.5 это довольно старая версия.

Seltvik
Offline
Зарегистрирован: 24.10.2013

Я ее сказал вроде с вашего сайта((( Можете ссылку дать где качнуть последнию версию. И какие еще могут быть вариантов. А то я уже и заряды купил в блинк)) 0и тут такое дело))

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

Теперь поставил последнию версию блинка и теперь вообще не компилет( Пишет

C:\Users\Neprokin\Desktop\Arduino_WiFi\Arduino_WiFi.ino\Arduino_WiFi.ino.ino\Arduino_WiFi.ino.ino.ino:31:29: fatal error: ESP8266_HardSer.h: No such file or directory
 
 #include <ESP8266_HardSer.h>
 
                             ^
 
compilation terminated.
 
exit status 1
Ошибка компиляции для платы Arduino/Genuino Mega or Mega 2560.
Seltvik
Offline
Зарегистрирован: 24.10.2013

Про какую директорию он пишет?

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

Мне этот скетч не нужен у меня ESP 01 подключена к меге по средством сериала физического а не виртуального. Какой скетч. Вы видели что в примерах у вас скетч криовй там нет строки про пасс и логин роутера

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

<ESP8266_HardSer.h>

 

уже был давно удален

Seltvik
Offline
Зарегистрирован: 24.10.2013

Так он в билиотеке есть(( А как тогда мне указать скетчу что мой модуль подключен к Serial2? И вообще какой тогда мне скетч использовать в моем случии когда модуль подключен к Arduino по средством реального сериала но не 1го?

Seltvik
Offline
Зарегистрирован: 24.10.2013

Так что вообще без вариантов? Т.е. я не смогу использовать ваш Blynk?((( Или там какой т оскетч все же предусмотрен? Просто в вашем релизе эти примеры есть. Поэтому я их и пробывал применить

AndrF
Offline
Зарегистрирован: 10.04.2016

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

Нужный сервис. Более того - представьте - разработчик даёт на форуме схему, плату, прошивку и ссылку/QR-код на свой проект на Blynk, включая своё вознаграждение (условные 100 руб)... Пользователь, покупая приложение, оплачивает ваши компоненты и пополняет счёт разработчика... Этим вы заинтересуете людей публиковать свои разработки и сопровождать их. Ну и привлечете клиентов.

Seltvik
Offline
Зарегистрирован: 24.10.2013

AndrF пишет:
doom369 пишет:
сейчас работаем на шарингом борда, чтобы можна было в режиме рана отдать любому ваш проект.

 

Нужный сервис. Более того - представьте - разработчик даёт на форуме схему, плату, прошивку и ссылку/QR-код на свой проект на Blynk, включая своё вознаграждение (условные 100 руб)... Пользователь, покупая приложение, оплачивает ваши компоненты и пополняет счёт разработчика... Этим вы заинтересуете людей публиковать свои разработки и сопровождать их. Ну и привлечете клиентов.

 

Я так понял это не мне)) и не по моей теме)))

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

Да все можно, я просто не могу помочь покнкретно по мега + есп, это самый сложный сетап. Могу только посоветовать поискать туториалы в гугле.

Seltvik
Offline
Зарегистрирован: 24.10.2013

Вы разработчик, у вас было предусмотрено это и вы это убрали чтоли? Вы как один из представителей скажите мне тогда, что использовать? Или надо всем заявить что Ваш Blynk не пашет с мегой! и все тут. Капец. Я же выше писал что у меня сетап с мегой у которой 4е сериал порта( У меня складывается впечатление, что в ваших бибилиотеках просто нет записи под мегу! Как тогда решать проблему будут разработчики? Я думаю я просто не единственный такой(((( Или скажите че использовать чтобы блинк подвязать Ваш. Или давайте всем сразу скажем, чтобы не покупали меги. Там столько примеров и даже в последнем релизе есть пример тип с работой с сериала. А вы говорите его нет((( Чет странно все.

Seltvik
Offline
Зарегистрирован: 24.10.2013

Кстати везде где я не гуглил до этого форума. Везде пишут про фибилотеку и пример с HardSerial. Вот например http://www.instructables.com/id/Connecting-ESP8266-01-to-Arduino-UNOMEGA-and-BLYNK/ и таких куча. А вы говорите вы тупо убрали билиотеку, тип нафиг не надо((( А как же быть тем у кого проекты на меге и им надо к Arduino цеплять например и WiFI и Nextion и как у меня еще GSM они все по UART общаются. Вот только в вашем случии с библиотекой нельзя выставить порт ему. Может вы как разработчик сделаете что либо? вы то получше меня должны разбираться в этом во всем? Заранее спасибо. А туториалы я и сам искал и как сказал выше все через одно.

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

Может хватить ныть. В инернете полно инфы. Все прекрасно работает в связке arduino + esp. У меня так работает проект "умный аквариум" (uno+esp-12f)

вот "огрызок" моего скетча

#include <ESP8266_Lib.h>
#include <BlynkSimpleShieldEsp8266.h>
#include <SimpleTimer.h>
#include <DS3231.h>
#include <Wire.h>
#include <TimeLib.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <SoftwareSerial.h>
#include <WidgetRTC.h>

#define ESP8266_BAUD 9600

char auth[] = 
char ssid[] =
char pass[] = 

SoftwareSerial EspSerial (10, 12); // RX, TX
ESP8266 wifi (&EspSerial);
void setup ()
{
  Serial.begin (9600);
  EspSerial.begin (ESP8266_BAUD);
  Blynk.config (wifi, auth, "192.168.1.1");
  Blynk.connectWiFi (ssid, pass);
  Blynk.connect ();
}
void loop ()
{
     Blynk.run ();
}

 

Seltvik
Offline
Зарегистрирован: 24.10.2013

Поди вы читаете между строк)))) Вы вообще не в теме чтоль))) У вас обычный проект на обычной плате и подключение через Программный порт а не через физический, у меня такое тоже работало на нане и на уно. Но мне для проекта надо другое и Blynk не пашет в моем сетапе. Ясно? или почитайте пару постов выше

Seltvik
Offline
Зарегистрирован: 24.10.2013

Всем спасибо решил проблему без разработчиков. Кому интересно будет пишите объясню.

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

Спасибанинада

publiser
Offline
Зарегистрирован: 16.04.2017

Подскажите в чем причина
Отваливается переодически инет
выводит раза 4-6 данные потом обрывается интернет, далее опять подключается и все повторяется по кругу
Что не так в скетче?

#define RELE D7
#define BUTTON D5
#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS_1 D2
bool rele;
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_BME280.h>

#define BME_SCK 13
#define BME_MISO 12
#define BME_MOSI 11
#define BME_CS 10

OneWire oneWire_in(ONE_WIRE_BUS_1);

DallasTemperature sensor_inhouse(&oneWire_in);

char auth[] = "[xxxxxxxxxxxxxxxxxxxxxx"; 
char ssid[] = "vvvvvvvv";
char pass[] = "mmmmmmmmmmmmm";

#define SEALEVELPRESSURE_HPA (1013.25)

Adafruit_BME280 bme; // I2C

const int buttonPin = D1;     // Замыкаем корпус на D1

const int btnPin = D1;
WidgetLED led1(V10);   //сигнал светодиода на виртуальный пин V10
BlynkTimer timer;

// светодиод
  boolean btnState;
  boolean btnInit=false;
  void buttonLedWidget()
{
  // Read button
    boolean isPressed = (digitalRead(btnPin) == LOW);
   
    if (isPressed != btnState||!btnInit) {
    if (isPressed) {
      led1.on();
        } else {
      led1.off();
         }
     btnInit=true;
    btnState = isPressed;
  }
}
void setup() {
  //digitalWrite(RELE, HIGH);
  pinMode(RELE, OUTPUT);
  
  Serial.begin(115200);
  Blynk.begin(auth, ssid, pass);
    sensor_inhouse.begin();
    Blynk.virtualWrite(V0, rele);
    
    pinMode(btnPin, INPUT_PULLUP);
    timer.setInterval(500L, buttonLedWidget);
   pinMode(BUTTON, INPUT); //обьявляем пин на вход - для кнопки
 //Serial.println();
 Serial.println(F("BME280 test"));

 if (!bme.begin())
 {
  Serial.println(F("Could not find a valid BME280 sensor, check wiring!"));
    while (true)
   delay(1);
  }
}
void sendTemps1()
{

    float temp5 = bme.readTemperature() ;
    float temp6 = bme.readPressure() / 133.33;
    //float temp7 = bme.readAltitude(SEALEVELPRESSURE_HPA);
    float temp8 = bme.readHumidity();

    Serial.print(F("Temperature = "));
    Serial.print(bme.readTemperature());
    Serial.println(F(" *C"));
    Blynk.virtualWrite(V6,temp5);
    
    Serial.print(F("Pressure = "));
    Serial.print(bme.readPressure() / 133.33);
    Serial.println(F(" hPa"));
    Blynk.virtualWrite(V7,temp6);
    
    Serial.print("Humidity = ");
    Serial.print(bme.readHumidity());
    Serial.println(" %");
    Blynk.virtualWrite(V9,temp8);
}
    
void sendTemps()
{

sensor_inhouse.requestTemperatures();
float temp1 = sensor_inhouse.getTempCByIndex(0);  //температура в доме
float temp2 = sensor_inhouse.getTempCByIndex(1);  // температура сарай
float temp3 = sensor_inhouse.getTempCByIndex(2); // температура отопление сарай
float temp4 = sensor_inhouse.getTempCByIndex(3);  // температура погреб

Serial.println("Temp1: "); Serial.println(temp1);
Blynk.virtualWrite(V2, temp1);
Serial.println("Temp2: ");Serial.println(temp2);
Blynk.virtualWrite(V3, temp2);
Serial.println("Temp3: "); Serial.println(temp3);
Blynk.virtualWrite(V4, temp3);
Serial.println("Temp4: ");Serial.println(temp4);
Blynk.virtualWrite(V5, temp4);
    
}
BLYNK_WRITE (V0)
{
 rele = param.asInt();
 digitalWrite(RELE,rele);
 
}
void loop() {
    
    //   Для кнопки сенсорной 
  if(digitalRead(BUTTON))
  {
   rele=!rele;
  digitalWrite(RELE,rele);
  Blynk.virtualWrite(V0, rele);
  delay(600);
  }
    //Serial.println();
    Blynk.run();
    sendTemps();
    sendTemps1();
    timer.run();
 delay(600);
}

 

 

Seltvik
Offline
Зарегистрирован: 24.10.2013

Ну думаю первое что надо сделать это проверить версию Blynk, а так же убрать все задержку из loop. Blynk этого не любит. Т.е. по возможности отказаться от задержек вместе с функцией Blynk.run(); И да какая плата какое ESP? И главное прошивка вашего ESP смотрели?

 
publiser
Offline
Зарегистрирован: 16.04.2017

Плата Node MCU ESP 8266 По остальным устройствам с другими прошивками  и работой 4-х датчиков температуры по Dallas Temp  нет  ни каких проблем. С этой прошивкой три контроллера выдают такую, же ошибку. Сбрасывается сеть WIFI и переподключается постоянно. Не держит. Не понятно.

Seltvik
Offline
Зарегистрирован: 24.10.2013

Попробуйте задрежку убрать в 600 мск с цикла основного и проверьте последнию прошивку. Я сам с бубнами танцевал не раз с ESP разными. именно с блинком. Он же у вас от сети отключается. Как вы определяете что отключился модуль по приложению Blуnk или вы смотрите отчет библиотеки в сериал порт?

publiser
Offline
Зарегистрирован: 16.04.2017

Два фактора отключения
В приложении blynk пишет, что обрыв связи, пропала связь с устройством, прекращается прием данных
По мониторингу порта - приостонавливается вывод данных, тормозит, потом через секунд 30 продолжается
 

Seltvik
Offline
Зарегистрирован: 24.10.2013

А Вы подключите функцию библиотенки "Blynk serial" чтобы посмотреть, что библиотека дает по "заминке" вашей, если у вас отключена эта функция включите. Т.е. например блинк пишет что, ждите подключаюсь или обрыв там то или что имеено. Очень похоже на два варианта или билиотека с косяком или с питанием беда. Ровное количество времени проходит когда сбой происходит? например ровно 30 сек или время плавает? Вы пробывали убрать задержку в 600 мс?

publiser
Offline
Зарегистрирован: 16.04.2017

библиотенки "Blynk serial" - что-то не нашел такой библиотеки
Это что, не подскажите и как им пользоваться?

 

Seltvik
Offline
Зарегистрирован: 24.10.2013

Да нет это не библиотека. Это как бы функционал билиотеки блинк для вывода состаояния ее работы в сериал. Ну типа когда подключаешь эту функцию то библиотека выводит информацуию о подключении к роутеру и состояние работы в целом. У тебя она подключается в коде вроде

Seltvik
Offline
Зарегистрирован: 24.10.2013
003 #define BLYNK_PRINT Serial

 

Seltvik
Offline
Зарегистрирован: 24.10.2013

Крч ты когда цепляешься к NodeMC то в сериале че то падает когда подаешь питание и он начнает подключатся к роутеру? Типа Connecting и т.д.?

Seltvik
Offline
Зарегистрирован: 24.10.2013

У тебя такая петрушка только с NodeMCU? Тут однозначно или питание не стабильное у нее на плате. Или скорее всего с библиотекой криво. Я всегда делаю так. Сначала заливаю обычную прошивку просто на подключение без всяких датчиков и т.д. если все работает то идешь дальше подключаешь уже датчики и дописываешь код. Датчики подключены к ней же? питание на датчики откуда взято?

publiser
Offline
Зарегистрирован: 16.04.2017

питание на датчики с самой платы Arduino 
Прошивка без датчиков отрабатывает
Как подключаю датчики - тогда
Если отдельно BME  или  DS18B20, то все ок. Как только два, то начинается пропуски. Как-то конфликтуют или конфликтует скетч? Уже стал грешить на Dallas Temperature, поменял, но все равно... Танцую с бубном 

Seltvik
Offline
Зарегистрирован: 24.10.2013

Крч я эти DS не люблю сам так как почему то они не на всех платах работают ровно. + думаю может питания не хватать раз говоришь что отдельно норм а вместе не тянет. ТОгда дело точно не в библиотеке. И еще вопрос у тебя как соединен ардуино с платой ESP? через программный сериал? Вообще BMP датчик сколкьо на него подаешь?)))) Знаеншь что он от 3.3. питаться должен? Иначе глюки бывают на пине у него в плоть до того как он перестает работать. МОжет быть такой вариант что, просто скетч и опрос датчиков DS глючит, чем их больше тем дольше он их читает. Я бы тебе предложил отказаться от них или еще лучше я бы сделал так. Датчики сделал бы на отдельной ардуино и пусть она их опрашивает и кидает в сериал просто данные а другая дуня с ESP принимает. так ты разгрузишь Blynk. Главное косяк блинка то, что он не любит задержки, если они есть он может вылетать у меня было такое один раз. И еще вариант попробуй библиотеку поставить другую на DS датчики

publiser
Offline
Зарегистрирован: 16.04.2017

спасибо, буду плясать дальше... Отпишусь.

Seltvik
Offline
Зарегистрирован: 24.10.2013

Да тут только так. Это когда 1 датчик так просто)) а когда 4е + еще давление тут надо пробывать. Но чет думаю если все они от дуни запитаны то это плохо. Она врядли их может потянуть. Лучше анчни с библиотеки на далас другой и с доп питания на датчики. Смотри сам если в пике он начинает просаживать дуню то самому МК может не хватать и он приглюкивает или может вообще перезагружается вот и связь пропадает. Ну я бы с этого попробывал бы. ПОсадил бы их на отдельное питание потом библиотеку другую на далас.

v-a-y
Offline
Зарегистрирован: 09.10.2015

Столкнулся с проблемой подключеня к серверу. Уехал в отпуск, интернет через вайфай отеля. Пинги, видимо, огромные. Все работает кроме любимого блинка :(
Пишет "не могу подключиться. Проверь соединение или попробуй еще раз". Уже 2 дня безуспешно. Инет точно живет (пишу с этого же аппарата), хотя и очень плохо.

v-a-y
Offline
Зарегистрирован: 09.10.2015

На 3-й день нагуглил про geodns, нашел человека в москве, кто пропингует сервер блинка, узнал айпи, вбил его в телефон и все заработало!

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

Обновился на v2.15.2 и вижу что баги совсем не исправили... То, что добавили новых фич молодцы конечно, но старые баги ведь тоже надо исправлять... Все касается Superchart: 1. При просмотре параметров цвет графика отображается в правильном градиенте, но цвет цифрового значения этого параметра отображается наоборот. 2. При выборе отображения графика за один день, при перемещении курсора не отображаются данные измеряемых параметров. 3. Еще с прошлой версии при перемещении курсора появились прочерки в месте отображения цифровых значений параметров. Такое ощущение, что значения пишутся через раз. Ссылка на видео: https://youtu.be/6jf-pUF_ZzQ

P.S. Сейчас вот только заметил, по пункту 2, если график развернуть в ландшафтный режим, то данные отображаются...

macros
Offline
Зарегистрирован: 07.11.2016

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

Для чего надо:

Железка накапливает некоторые значения и периодически отправляет его на сервер.

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

update:

https://community.blynk.cc/t/is-there-a-virtual-read-command/183

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

https://github.com/blynkkk/blynk-library/blob/master/examples/More/ServerAsDataStorage/ServerAsDataStorage_MultiValue/ServerAsDataStorage_MultiValue.ino

Maks2010
Offline
Зарегистрирован: 08.11.2017

Привет Знатокам!!!
Ломаю голову как написать скетч для объединия физической кнопки и виртуальной в блинке ,для управления реле.??

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

В программе управляй тем же входом к которому привязана физическая кнопка.

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

Только что сделали новый релиз с множеством багофиксов по суперчарту. Так же добавили возможность добавления X/Y осей. (как было в старом гарфе). Баги в графе должны быть пофикшены. Если нет - дайте знать пожалуйста.

@macros - можно. Вы нашли правильный пример. Только блинк асинхронный. Поэтому вы запаршиваете значение а потом в отдельном обработчике ждете ответ.

@v-a-y - сделали первый шаг в сторону фикса гео-днс проблемы. Еще месяц и пофиксим окончательно.

Seltvik
Offline
Зарегистрирован: 24.10.2013

Скажите кто знает как проще всего реализовать передачу логических значений с приложения БЛИНК? ну по умолчанию приложение на виртуал пин кидает 1 или 0. Надо преобразовывать в false true. Или как то можно проще это сделать? У кого как реализовано. Заранее спасибо за ответы.

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

Логические значения нужно передавать непосредственно на цифровой пин железки, а не на виртуальный.

 

Seltvik
Offline
Зарегистрирован: 24.10.2013

Ну а если виртуальные пины и на них надо как то передовать логику. Даже в компанентах нет передать логическое значние. 0 и 1 как бы и есть логика а я про логические переменные говорю в IDE) как лучше организовать прием и запись в такую переменную

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

Вопрос не очень понятен. В стандартном С++ и так определены:

#define true 1

#define false 0

Fireforce
Offline
Зарегистрирован: 08.09.2017
Подскажите пожалуйста где в коде функции pzem_reset_on() ошибка.
Эта функция должна управлять светодиодом оптопары которая подключена параллельно кнопке сброса счетчика PZEM004.
Логика функции должна быть такая: Светодиод включился на 5 сек., отключился на время 400 мс, снова включился на 500мс. и выключился.
 
 
Как только запускается функция pzem_reset_on()
,т.е по наступлении заданного времени
контроллер уходит на перезагрузку.
 
Вот что выдает монитор:
[5001] Connecting to blynk-cloud.com:8442
[5141] Ready (ping: 1ms).
2017/10/24 23:0:59
2017/10/24 23:1:4
Soft WDT reset
 
ctx: cont 
sp: 3fff0120 end: 3fff0340 offset: 01b0
 
>>>stack>>>
3fff02d0:  bf800000 3ffeef20 3ffeeefc 40203d74  
3fff02e0:  bf800000 65653665 3ffeeecc 402029a6  
3fff02f0:  00000001 6d517338 00000000 3ffef30c  
3fff0300:  00000000 3ffeec58 3ffeec58 3ffef30c  
3fff0310:  3fffdad0 00000000 3ffef304 4020401f  
3fff0320:  3fffdad0 00000000 3ffef304 4020622c  
3fff0330:  feefeffe feefeffe 3ffef320 40100718  
<<<stack<<<
 
Пробовал отключать WDT-таймер wdt_disable();
Все равно перезагружается, просто без вывода информации стека.
 
Но если функцию запустить в отдельном скетче, без кода для счетчика электроэнергии и прописать wdt_disable(), то она отрабатывает как надо. С "for" тоже работает, но счет идет только до 1366 и дальше заново.
#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h> //OTA Библиотека для OTA-прошивки
#include <BlynkSimpleEsp8266.h>
#include <SimpleTimer.h>
#include <SoftwareSerial.h> // Arduino IDE <1.6.6
#include <PZEM004T.h>
#include <plcStandardLib_1.h>
#include <Wire.h> //I2C library
#include <RtcDS3231.h>  //RTC library

boolean sw_on;
boolean sw_on_r_tr;
boolean out_r_tr;
boolean out_f_tr;
//boolean out_tp1;
R_TRIG R_TRIG1;
F_TRIG F_TRIG1;
int pzem_reset=16; //D0 - IO16 - сброс счетчика PZEM004
int power_max=0; //D3 - IO0 - Сигнализация "Высокая мощность"
int power_min=2; //D4 - IO2 - Сигнализация "Низкая мощность"
bool preOn;
unsigned long led1OnTime;
bool led1On;
unsigned long led2OnTime;
bool led2On;
unsigned long preOnTime;
int minute_time;
int var_comutator;
unsigned long previousMillis;
long interval;
char str[15];
bool on_off=false;

PZEM004T pzem(&Serial);
IPAddress ip(192, 168, 1, 1);
RtcDS3231<TwoWire> rtcObject(Wire); //Uncomment for version 2.0.0 of the rtc library
WidgetLCD lcd(V10);
SimpleTimer timer;
//SimpleTimer timer;
// This function sends Arduino's up time every second to Virtual Pin (5).
// In the app, Widget's reading frequency should be set to PUSH. This means
// that you define how often to send data to Blynk App.


//=========================================================================================
                                //Конфигурация//
void setup()
{
//=======Данные аутентификации
// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "dfdfdfdfjhhhhhjhkjkkjkjkjkkj";
// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "M365";//const char* ssid = "M365";
char pass[] = "12345678";//const char* pass = "12345678";
  /*RtcDateTime currentTime = RtcDateTime(17, 10, 24, 23, 04, 0); //define date and time object
    rtcObject.SetDateTime(currentTime); //Для установки времени - раскоментируй*/ 
  
Blynk.begin(auth, ssid, pass);  
pzem.setAddress(ip);
rtcObject.Begin();// запустить Wire  Wire.begin(DS3231_SCL, DS3231_SDA);
Serial.begin(9600);// запуск коммуникационного порта
pinMode(pzem_reset, OUTPUT);//D0 сброс счетчика PZEM004
pinMode(power_max, OUTPUT); //D3 работает на "выход" - Сигнализация "Высокая мощность"
pinMode(power_min, OUTPUT);//D4 работает на "выход" - Сигнализация "Низкая мощность"
led1On = false;
led2On = false;
//lcd.clear(); //Use it to clear the LCD Widget
// Setup a function to be called every second
timer.setInterval(5000L, pzm);
//timer_rtc.setInterval(1000L, RTC);

//Установка времени в модуль DS3231//
RtcDateTime currentTime = RtcDateTime(17, 10, 24, 23, 00, 50); //define date and time object
rtcObject.SetDateTime(currentTime); //Для установки времени - раскоментируй*/
//ArduinoOTA.setHostname("ESP8266-00001"); //OTA Задаем имя сетевого порта
//ArduinoOTA.begin(); //OTA Инициализируем OTA

// Debug console
// You can also specify server:
//Blynk.begin(auth, ssid, pass, "blynk-cloud.com", 8442);
//Blynk.begin(auth, ssid, pass, IPAddress(192,168,1,100), 8442);
//************************
//ArduinoOTA.setPassword((const char *)"0000"); //OTA Задаем пароль доступа для удаленной прошивки
//***********************
}

//=========================================================================================
                                    //Цикл//
void loop() 
{
//ArduinoOTA.handle(); // OTA Всегда готовы к прошивке
Blynk.run();
//pzm();
timer.run(); // Initiates SimpleTimer
RTC(); //функция часов реального времени
start_for_pzem_reset_on(); //Формирует одиночный импульс и предотвращает повторную запись "1" в "var_comutator".
                          //Функция нужна для активации функции "pzem_reset_on()"
pzem_reset_on(); //Формирование временных интервалов для оптопары сброса счетчика PZEM004.
sw_on_p();//Сигнализация "Высокая мощность"
sw_off_p();//Сигнализация "Низкая мощность"
}


//=============================================================================================
						//Функция часов реального времени//
void RTC()
{                                           
RtcDateTime currentTime = rtcObject.GetDateTime();    //get the time from the RTC
//char str[15];   //declare a string as an array of chars
sprintf(str, "%d/%d/%d %d:%d:%d",     //%d allows to print an integer to the string
          currentTime.Year(),   //get year method
          currentTime.Month(),  //get month method
          currentTime.Day(),    //get day method
          currentTime.Hour(),   //get hour method
          minute_time = currentTime.Minute(), //get minute method
          currentTime.Second()  //get second method
         );
         Serial.print(str);							
}
//==============================================================================================
                            //Функция обработки для PZEM004//
 void pzm()
{
  float v = pzem.voltage(ip);
  if (v < 0.0) v = 0.0;
  Blynk.virtualWrite(V1, v);
  Serial.print(v); Serial.print("V; ");
  float i = pzem.current(ip);
  if (i >= 0.0) {
    Blynk.virtualWrite(V2, i);
    Serial.print(i); Serial.print("A; ");
  }

  float p = pzem.power(ip);
  if (p >= 0.0) {
    Blynk.virtualWrite(V3, p);
    Serial.print(p); Serial.print("W; ");
    if ( p >= 800.00) sw_on_r_tr = true; //Формирует управляющий сигнал для детектора фронта - R_TRIG.
    if ( p < 800.00) sw_on_r_tr = false;
  }

  float e = pzem.energy(ip);
  if (e >= 0.0) {
    Blynk.virtualWrite(V4, e);
    Serial.print(e); Serial.print("Wh; ");
  }

  Serial.println();
  lcd.clear(); //Use it to clear the LCD Widget
  lcd.print(0, 0, "U="); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
  int vv = (int)v;
  lcd.print(2, 0, vv); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
  lcd.print(5, 0, "V"); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
  lcd.print(8, 0, "I="); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
  lcd.print(10, 0, i); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
  lcd.print(14, 0, " A"); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
  lcd.print(0, 1, "P="); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
  int pp = (int)p;
  lcd.print(2, 1, pp); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
  lcd.print(6, 1, "W"); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
  lcd.print(8, 1, "E="); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
  //int ee=(int)e/1000;
  lcd.print(10, 1, e / 1000); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
  lcd.print(13, 1, "kWh"); // use: (position X: 0-15, position Y: 0-1, "Message you want to print")
}

//==========================================================================================
                              //Исполнительные устройства//
 
//Сигнализация "Высокая мощность"// 
 void sw_on_p() 
{
  if (sw_on_r_tr == true) {
    preOnTime = millis();
    if (millis() - preOnTime > 10) preOn = true;
    digitalWrite(power_max, preOn);
    led1On = true;
    led1OnTime = millis(); //Записываю время включения светодиода
  }
  //if(led1On)
  if (millis() - led1OnTime > 1000) preOn = false; {
    digitalWrite(power_max, LOW);
    led1On = false;
  }
}
//====================================

//Сигнализация "Низкая мощность"//
void sw_off_p()
{
  out_f_tr = F_TRIG1.Run(sw_on_r_tr);
  if (out_f_tr == true) {
    digitalWrite(power_min, out_f_tr);
    led2On = true;
    led2OnTime = millis(); //Записываю время включения светодиода
  }
  //if(led2On)
  if (millis() - led2OnTime > 1000) {
    digitalWrite(power_min, LOW);
    led2On = false;
  }
}
//====================================
//сброс счетчика //

// запуск pzem_reset_on()//
void start_for_pzem_reset_on()
{
  out_r_tr = R_TRIG1.Run(minute_time=1);
  if (out_r_tr==true)
  {var_comutator=1;}
}


void pzem_reset_on()
{
switch (var_comutator)
{
  case 1:
  previousMillis = millis();
 interval=5000; //интервал для нахождения светодиода во включенном состоянии
  digitalWrite(pzem_reset, HIGH);
  while (millis() - previousMillis < interval){  //вошли в цикл, проверяем не прошел ли нужный интервал.
  if (millis() - previousMillis == interval) break;}
 var_comutator=2;
   digitalWrite(pzem_reset, LOW);

previousMillis = millis(); //сохраняю время последнего переключения светодиода
 interval=300;
 case 2:
  while (millis() - previousMillis < interval){ //вошли в цикл, выход из него - когда выражение станет ложно.
 if (millis() - previousMillis == interval) break;}
  var_comutator=3;
   digitalWrite(pzem_reset, HIGH);
   
previousMillis = millis();
 interval=400;
 case 3:
  while (millis() - previousMillis < interval){
 if (millis() - previousMillis == interval) break;}
 var_comutator=0;
 digitalWrite(pzem_reset, LOW);
 //цикл работы закончен.
}}

//Альтернативный способ управления сбросом счетчика при помощи "for" - работает, но счет идет до 1366 и дальше заново.
/*
void pzem_reset_on()
{	
for (int count = 0; count < 2000; count ++)
{if (count<700) digitalWrite(pzem_reset, HIGH);
{if (count>700) digitalWrite(pzem_reset, LOW);
{if (count>750) digitalWrite(pzem_reset, HIGH);
{if (count>850) digitalWrite(pzem_reset, LOW);
Serial.println(count);
}}}}}*/

 

 

Seltvik
Offline
Зарегистрирован: 24.10.2013

Какие варианты лечения проблемы переполнения буфера при работе с Blynk? таймер? тогда как лучше его вставить. Если можно ссылки или пример лечения если у Вас есть. По умолчанию я работаю с 50ть переменными виртуальными. Спасибо

Seltvik
Offline
Зарегистрирован: 24.10.2013

Вот интересный факт для пользователей Blynk. У меня щас была проблема с переполнением буфера при отправке и чтении данных с сервера. Ломал голову удалял все и делал с нуля даже на передачи 1 значения была трабла. Я обновил библиотеку и вроде все пропало. Переполнения пока нет, НО появилась еще беда. Теперь устроиство постоянно выкидывает в оффлайн и заметил что блинк пишет в сериал следующее:

[123636] Invalid HW cmd: 7

+IPD,1,98:b

[123758] Login timeout

[123992] Ready (ping: 12ms).
 
и так каждые там 10 секунд. В чем проблема кто знает? разработчики может подскажут что там нового такого сделали?
 
Так же вопрос к разработчикам билнк, пишет про переполнение буфера. из за чего это бывает (физически и программно)?
 
И как лучше работать с порядком 30-40 переменных виртуальных. У меня это все реализовано так (пример):
//Вкладка охрана-----------------------------
BLYNK_WRITE(V23){Security=param.asInt();}
BLYNK_WRITE(V24){AutoSMS=param.asInt();}
BLYNK_WRITE(V25){Alarm=param.asInt();}

И так каждая вкладка сдеана т.е. у меня в void setup расписаны все чтения и записи, но когда добавляю синхронизацию то все крашит. переполнение буфера. 

Такое ощущение что блинк не тянет больше количество виджетов. или я что то не знаю или упускаю? Направьте меня пожалуйста. А то вроде там покупай энергию и ставь виджеты сколько хочешь) Спасибо

 
 
Seltvik
Offline
Зарегистрирован: 24.10.2013

И вот новая инфа. Когда включил дебаг. Не шарю ном мало ли может разработчики вкурсе что значит все это. Те.е. это вывод когда отваливается связь

[77127] <[02|00|01|00] 74e5a58e5c744d0fa0407a647f022bc9

[77238] >[00|00|01|00|C8]

[77238] Ready (ping: 11ms).
[77239] <[11|00|02|00]iver[00]0.4.10[00]h-beat[00]10[00]buff-in[00]1024[00]d
[77509] <ev[00]Arduino Mega[00]cpu[00]ATmega2560[00]con[00]ESP82
[77609] <66[00]build[00]Nov 19 2017 18:40:00[00]
[77712] <[10|00|03|00|05]vr[00]23
[77824] >[00|00|02|00|C8]
[77835] >[14|00|03|00|07]
[77840] >vw[00]23[00]0