Нужна помощь Зависание ESP8266 с Blynk при старте и отсутствующем WiFI

stigmat1996

New member
Помогите решить проблему или дайте ссылку, если уже есть решение.

У меня ESP8266 nodemcu. Подключил к Blynk все прекрасно работает, данные приходят. Но если при старте нету WiFi, то МК виснет наглухо.

Копался в теме здесь (Code isn't working without connected Blynk) но решение так и не нашел. Помогите кто может.
 

svs2007m

Member
Ну для начала Код в студию.
Или :)
– Слухай сюда! Положь колдобину со стороны загогулины и два раза дергани за пимпочки. Опосля чего долбани плюхалкой по кувыкалке и, кады чвокнет, – отскочь дальшее, прикинься ветошью и не отсвечивай. Потому как она в энто время шмяк тудыть, сюдыть, ёксель-моксель, ёрш твою медь... Пш-ш-ш! – И ждешь пока остынет. Остыло – подымаесся, вздыхаешь. Осторожненько вздыхаешь, про себя, шобы эта быдла не рванула! И бегишь за угол за пол-литрой. Потому как пронесло!
 

stigmat1996

New member
Код:
#include <ESP8266WiFi.h>
#include <ESP8266WiFi.h>

#include <BlynkSimpleEsp8266.h>

extern "C" {
#include "user_interface.h";
}
#define BLYNK_PRINT_227476896_2 Serial

char auth_227476896_2[] = "D75TasbYkeegmH7CVXME66G1c06ceECQ";
unsigned long virt_203190254_1;
float input_OldValue_203190254_1= 0;
bool ESP8266ControllerWifiClient_HRD = 0;
bool ESP8266ControllerWifiClient_status = 1;
bool ESP8266ControllerWifiClient_isDHCP = 1;
bool ESP8266ControllerWifiClient_IsNeedReconect = 0;
bool ESP8266ControllerWifiClient_workStatus = 1;
char ESP8266ControllerWifiClient_SSID[40] = "Xiaomi";
char ESP8266ControllerWifiClient_password[40] = "84veros86wifi";
IPAddress ESP8266ControllerWifiClient_ip(0, 0, 0, 0);
IPAddress  ESP8266ControllerWifiClient_dns (0, 0, 0, 1);
IPAddress  ESP8266ControllerWifiClient_gateway (0, 0, 0, 1);
IPAddress ESP8266ControllerWifiClient_subnet (255, 255, 255, 0);
uint8_t ESP8266ControllerWifiClient_mac[6] = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0};
bool _gtv1;
bool _gen1I = 0;
bool _gen1O = 0;
unsigned long _gen1P = 0UL;
bool _gen2I = 0;
bool _gen2O = 0;
unsigned long _gen2P = 0UL;
bool _count1I = 0;
unsigned long _count1_Value = 0UL;
void setup()
{
WiFi.mode(WIFI_STA);
_esp8266WifiModuleClientReconnect();
pinMode(2, OUTPUT);

  Serial.begin(115200);
   Blynk.begin(auth_227476896_2, ESP8266ControllerWifiClient_SSID, ESP8266ControllerWifiClient_password);
Blynk.connect();
int mytimeout = millis() / 1000;
while (Blynk.connect() == false) {
  if((millis() / 1000) > mytimeout + 8){  // try for less than 9 seconds
    break;
  }
}
 




}
void loop()
{if(ESP8266ControllerWifiClient_IsNeedReconect) {_esp8266WifiModuleClientReconnect(); ESP8266ControllerWifiClient_IsNeedReconect = 0; }
ESP8266ControllerWifiClient_status = WiFi.status() == WL_CONNECTED;
if (ESP8266ControllerWifiClient_status) { if ( ! ESP8266ControllerWifiClient_HRD) { ESP8266ControllerWifiClient_ip =  WiFi.localIP();
ESP8266ControllerWifiClient_subnet =  WiFi.subnetMask();
ESP8266ControllerWifiClient_gateway =  WiFi.gatewayIP();
ESP8266ControllerWifiClient_dns =  WiFi.dnsIP();
WiFi.macAddress(ESP8266ControllerWifiClient_mac);
ESP8266ControllerWifiClient_HRD = 1;
}} else {ESP8266ControllerWifiClient_HRD = 0;}





//Плата:1
_gtv1 = ESP8266ControllerWifiClient_status;
if (1) { if (! _gen2I) { _gen2I = 1; _gen2O = 1; _gen2P = millis(); } } else { _gen2I = 0 ; _gen2O= 0;}
if (_gen2I) {  if ( _isTimer ( _gen2P , 500 )) { _gen2P = millis(); _gen2O = ! _gen2O;}}
digitalWrite(2, !(_gen2O));

//Плата:2
if (_gtv1 == 1) {
{
  if(Blynk.connect() == true){
    Blynk.run();
  }
}
}

//Плата:3
if (_gtv1 == 1) {
if (1) { if (! _gen1I) { _gen1I = 1; _gen1O = 1; _gen1P = millis(); } } else { _gen1I = 0 ; _gen1O= 0;}
if (_gen1I) {  if ( _isTimer ( _gen1P , 500 )) { _gen1P = millis(); _gen1O = ! _gen1O;}}
if (_gen1O){
if ( ! _count1I) {
_count1I = 1;
_count1_Value = _count1_Value + 1;
}} else {
_count1I = 0;}
virt_203190254_1 = _count1_Value;

  Send_203190254_1();
}




}
bool _isTimer(unsigned long startTime, unsigned long period )
  {
  unsigned long currentTime;
currentTime = millis();
if (currentTime>= startTime) {return (currentTime>=(startTime + period));} else {return (currentTime >=(4294967295-startTime+period));}
  }
void Send_203190254_1()
{
 
    if(virt_203190254_1 != input_OldValue_203190254_1)
    {
        Blynk.virtualWrite(V0, virt_203190254_1);
        input_OldValue_203190254_1 = virt_203190254_1;
    }
  
}
int hexStrToInt(String instring)
{
  byte len = instring.length();
  if  (len == 0) return 0;
  int result = 0;
  for (byte i = 0; i < 8; i++)   // только первые 8 цыфар влезуть в uint32
  {
    char ch = instring[i];
    if (ch == 0) break;
    result <<= 4;
    if (isdigit(ch))
      result = result | (ch - '0');
    else result = result | (ch - 'A' + 10);
  }
  return result;
}
void _esp8266WifiModuleClientReconnect()
{
if( _checkMacAddres(ESP8266ControllerWifiClient_mac)) {  wifi_set_macaddr(0, const_cast<uint8*>(ESP8266ControllerWifiClient_mac));}
if( ESP8266ControllerWifiClient_isDHCP) { WiFi.config(0U, 0U, 0U, 0U, 0U); } else {
WiFi.config(ESP8266ControllerWifiClient_ip, ESP8266ControllerWifiClient_gateway, ESP8266ControllerWifiClient_subnet, ESP8266ControllerWifiClient_dns , ESP8266ControllerWifiClient_dns );
}
WiFi.begin(ESP8266ControllerWifiClient_SSID, ESP8266ControllerWifiClient_password);
}
bool _checkMacAddres(byte array[])
{
  bool result = 0;
  for (byte i = 0; i < 6; i++)
  {
    if (array[i] == 255) {
      return 0;
    }
    if (array[i] > 0 ) {
      result = 1;
    }
  }
  return result;
}
Ну для начала Код в студию.
Или :)
– Слухай сюда! Положь колдобину со стороны загогулины и два раза дергани за пимпочки. Опосля чего долбани плюхалкой по кувыкалке и, кады чвокнет, – отскочь дальшее, прикинься ветошью и не отсвечивай. Потому как она в энто время шмяк тудыть, сюдыть, ёксель-моксель, ёрш твою медь... Пш-ш-ш! – И ждешь пока остынет. Остыло – подымаесся, вздыхаешь. Осторожненько вздыхаешь, про себя, шобы эта быдла не рванула! И бегишь за угол за пол-литрой. Потому как пронесло!
 

svs2007m

Member
Несколько "'экзотическое" подключение к облачному серверу Blynk.
1. В базовых примерах да и по жизни с первого раза к нему конектится --- while зачем ? Может лучше по таймерам
типа
Код:
void setup()  {
timer.setInterval(30000L, reconnectBlynk);   // проверяем каждые ... секунд, если подключение к серверу Blynk
//....
}
//----------
void loop() {
  if (Blynk.connected()) Blynk.run();        // Запуск Blynk
//.....
}
//----------
void reconnectBlynk() {                    // функция проверяет соединение с сервером Blynk
  if (!Blynk.connected()) {             
    if (Blynk.connect())                
      BLYNK_LOG("Reconnected");            // выводим в лог
    else
      BLYNK_LOG("Not reconnected");    
  }
}
2. А ошибки после удачной компиляции НО зависанию МК можно глянуть через утилиту

3. Работа МК без подключения WiFi здесь осуждалась и не раз. Поиск в пощь )
 
Сверху Снизу