• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Проблемы с вайфай.

Захар

New member
Здравствуйте. Работаю с модулем недавно Nodemcu. При подключении модуля кабелем к usb порту проходит пинг 2-3 раза затем отваливается, прошить модуль возможность остается. Бывает что модуль работает без проблем. Или пинг проскакивает 2-3 раза и опять обрыв.


C++:
#include <ESP8266WiFi.h>                  // Библиотека для создания Wi-Fi подключения (клиент или точка доступа)
#include <ESP8266WebServer.h>             // Библиотека для работы с http
#include <FS.h>                           // Библиотека для работы с файловой системой
#include <ESP8266FtpServer.h>             // Библиотека для работы с SPIFFS по FTP

const char* ssid = "Unknowlenge";         // Указываем имя WiFi-сети, к которой будет подключаться ESP8266 для доступа в Интернет
const char* password = "9988776655";      // Указываем пароль для подключения к WiFi-сети
const char* lgFTP = "Genri";
const char* psFTP = "3333";

ESP8266WebServer HTTP(80);
FtpServer ftpSrv;                         // Создаём объект для работы с FTP

void setup() {
  Serial.begin(115200);
  while (!Serial) {};
  Serial.println("\nSereal OK");

  WiFi.mode(WIFI_STA);                    // Отключаем точку доступа
  WiFi.begin(ssid, password);             // Соединяемся с WiFi-сетью
  while (WiFi.status() != WL_CONNECTED)   // Пока соединение не установлено
  delay(500);
  Serial.println("WI-FI OK");

  SPIFFS.begin();                         // Инициализируем работу с файловой системой
  HTTP.begin();                           // Инициализируем Web-сервер
  ftpSrv.begin(lgFTP, psFTP);             // Инициализируем FTP-сервер (на 21-й порт)

  // Обработка HTTP-запросов

  HTTP.on("/log=14919129/pass=5555555555", []() {                     
    HTTP.send(200, "text/plain", "Все работает успешно");                  
  });
  //Страница не найдена
  HTTP.onNotFound([]() {                               
    if (!handleFileRead(HTTP.uri())) {                
      File file = SPIFFS.open("/list404.html", "r");  
      String data = file.readString();                 
      file.close();                                    
      HTTP.send(404, "text/html", data);               
    };
  });
};

void loop() {
  HTTP.handleClient();                                              
  ftpSrv.handleFTP();
};
посмотрите подскажите в чем проблема, пожалуйста? Далее идут функции но они не выполняются если запросов нет.

Код:
//ДОПОЛНИТЕЛЬНЫЕ ФУНКЦИИ

bool handleFileRead(String path) {                   // Функция работы с файловой системой  
   
  if (path == "/bd.txt"){return false;};             //  Если злоумыленник ломиться к базе.                            
  
 if (path.startsWith("/log=")) {                                      //  Если пришел логин и пароль на проверку                                    
   const byte COLLOMS_ARR = 4;
   String dataReqestArr[2];                                            //  Объявляем массив с данными из запроса    
   createArrReqest(path, dataReqestArr);                               //  Заполняем массив запроса   
   int sizeBD = counterSizeBD();                                       //  Считаем кол-во человек в БД
   String dataArrBD[sizeBD][COLLOMS_ARR];                              //  Объявляем массив с данными из БД  
   createArrBD (dataArrBD);                                            //  Заполняем массив данными из БД
   searchRecordInBaseData(dataArrBD,dataReqestArr,sizeBD);
   return true;
  };
  
  if (path.endsWith("/")) path += "index.html";      // Если устройство вызывается по корневому адресу, то должен вызываться файл index.html (добавляем его в конец адреса)
  String contentType = getContentType(path);       // С помощью функции getContentType (описана ниже) определяем по типу файла (в адресе обращения) какой заголовок необходимо возвращать по его вызову 
 
  if (SPIFFS.exists(path)) {                                            // Если в файловой системе существует файл по адресу обращения
    File file = SPIFFS.open(path, "r");                                 //  Открываем файл для чтения
    size_t sent = HTTP.streamFile(file, contentType);                   //  Выводим содержимое файла по HTTP, указывая заголовок типа содержимого contentType
    file.close();                                                       //  Закрываем файл
    return true;                                                        //  Завершаем выполнение функции, возвращая результатом ее исполнения true (истина)
  };   
  return false;                                                         // Завершаем выполнение функции, возвращая результатом ее исполнения false (если не обработалось предыдущее условие)}
};
String getContentType(String filename) {                                // Функция, возвращающая необходимый заголовок типа содержимого в зависимости от расширения файла
  if (filename.endsWith(".html")) return "text/html";                   // Если файл заканчивается на ".html", то возвращаем заголовок "text/html" и завершаем выполнение функции
  else if (filename.endsWith(".css")) return "text/css";                // Если файл заканчивается на ".css", то возвращаем заголовок "text/css" и завершаем выполнение функции
  else if (filename.endsWith(".js")) return "application/javascript";   // Если файл заканчивается на ".js", то возвращаем заголовок "application/javascript" и завершаем выполнение функции
  else if (filename.endsWith(".png")) return "image/png";               // Если файл заканчивается на ".png", то возвращаем заголовок "image/png" и завершаем выполнение функции
  else if (filename.endsWith(".jpg")) return "image/jpeg";              // Если файл заканчивается на ".jpg", то возвращаем заголовок "image/jpg" и завершаем выполнение функции
  else if (filename.endsWith(".gif")) return "image/gif";               // Если файл заканчивается на ".gif", то возвращаем заголовок "image/gif" и завершаем выполнение функции
  else if (filename.endsWith(".ico")) return "image/x-icon";            // Если файл заканчивается на ".ico", то возвращаем заголовок "image/x-icon" и завершаем выполнение функции
  return "text/plain";                                                  // Если ни один из типов файла не совпал, то считаем что содержимое файла текстовое, отдаем соответствующий заголовок и завершаем выполнение функции
};

void createArrReqest(String path, String* arr) {
  byte indLog = path.indexOf("/log=");
  byte indPass = path.indexOf("/pass=");
  String getLog = path;
  String getPass = path;  
  getLog.remove(indPass);
  getLog.remove(indLog, indLog + 5);
  getPass.remove(0, indPass + 6);
  arr [0] = getLog;
  arr [1] = getPass; 
};

int counterSizeBD(){
  File file = SPIFFS.open("/bd.txt", "r");
  String data = file.readString();
  file.close();
  int i = 0;
  int j = 0;
  while(data.indexOf("#", 0+i)!=-1){
    i = data.indexOf("#", 0+i)+1;
    j++;
  };
  return j;     
};

void createArrBD(String arr[][4]){
  File file = SPIFFS.open("/bd.txt", "r");
  String data = file.readString();
  file.close();
  int i = 0;
  int j = 0;
  while(data.length() > 3){
    while (data.indexOf("|") < data.indexOf("#")){    
      arr[j][i] = data.substring(0, data.indexOf("|"));
      data.remove(0,data.indexOf("|")+1);
      if(data.length() <= 3) {break;};
      ++i;
    };
  ++j;
  i = 0;
  data.remove(0,data.indexOf("#")+1);
  };
};

int searchRecordInBaseData(String arrBD[][4], String* arrReq, int count){
  for(int i = 0;i<count;i++){
    if (String(arrReq[0]).equalsIgnoreCase(String(arrBD[i][0])) && String(arrReq[1]).equals(String(arrBD[i][1]))){   
      HTTP.send(200, "text/plain", "*Нашев лог:" + arrReq[0] + " пар:" + arrReq[1] + "; в базе данных запись номер: " + String(i));
      return 13; 
    };
  };
    HTTP.send(200, "text/plain", "*НЕНАШЕВ в бд лог:" + arrReq[0] + " пар:" + arrReq[1]);
Вот функции мало ли помогут ESP Экстрасенсам над проблемой колдовать)
 

Вложения

CodeNameHawk

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

nikolz

Well-known member
Здравствуйте. Работаю с модулем недавно Nodemcu. При подключении модуля кабелем к usb порту проходит пинг 2-3 раза затем отваливается, прошить модуль возможность остается. Бывает что модуль работает без проблем. Или пинг проскакивает 2-3 раза и опять обрыв.


C++:
#include <ESP8266WiFi.h>                  // Библиотека для создания Wi-Fi подключения (клиент или точка доступа)
#include <ESP8266WebServer.h>             // Библиотека для работы с http
#include <FS.h>                           // Библиотека для работы с файловой системой
#include <ESP8266FtpServer.h>             // Библиотека для работы с SPIFFS по FTP

const char* ssid = "Unknowlenge";         // Указываем имя WiFi-сети, к которой будет подключаться ESP8266 для доступа в Интернет
const char* password = "9988776655";      // Указываем пароль для подключения к WiFi-сети
const char* lgFTP = "Genri";
const char* psFTP = "3333";

ESP8266WebServer HTTP(80);
FtpServer ftpSrv;                         // Создаём объект для работы с FTP

void setup() {
  Serial.begin(115200);
  while (!Serial) {};
  Serial.println("\nSereal OK");

  WiFi.mode(WIFI_STA);                    // Отключаем точку доступа
  WiFi.begin(ssid, password);             // Соединяемся с WiFi-сетью
  while (WiFi.status() != WL_CONNECTED)   // Пока соединение не установлено
  delay(500);
  Serial.println("WI-FI OK");

  SPIFFS.begin();                         // Инициализируем работу с файловой системой
  HTTP.begin();                           // Инициализируем Web-сервер
  ftpSrv.begin(lgFTP, psFTP);             // Инициализируем FTP-сервер (на 21-й порт)

  // Обработка HTTP-запросов

  HTTP.on("/log=14919129/pass=5555555555", []() {                    
    HTTP.send(200, "text/plain", "Все работает успешно");                 
  });
  //Страница не найдена
  HTTP.onNotFound([]() {                              
    if (!handleFileRead(HTTP.uri())) {               
      File file = SPIFFS.open("/list404.html", "r"); 
      String data = file.readString();                
      file.close();                                   
      HTTP.send(404, "text/html", data);              
    };
  });
};

void loop() {
  HTTP.handleClient();                                             
  ftpSrv.handleFTP();
};
посмотрите подскажите в чем проблема, пожалуйста? Далее идут функции но они не выполняются если запросов нет.

Код:
//ДОПОЛНИТЕЛЬНЫЕ ФУНКЦИИ

bool handleFileRead(String path) {                   // Функция работы с файловой системой 
  
  if (path == "/bd.txt"){return false;};             //  Если злоумыленник ломиться к базе.                           
 
if (path.startsWith("/log=")) {                                      //  Если пришел логин и пароль на проверку                                   
   const byte COLLOMS_ARR = 4;
   String dataReqestArr[2];                                            //  Объявляем массив с данными из запроса   
   createArrReqest(path, dataReqestArr);                               //  Заполняем массив запроса  
   int sizeBD = counterSizeBD();                                       //  Считаем кол-во человек в БД
   String dataArrBD[sizeBD][COLLOMS_ARR];                              //  Объявляем массив с данными из БД 
   createArrBD (dataArrBD);                                            //  Заполняем массив данными из БД
   searchRecordInBaseData(dataArrBD,dataReqestArr,sizeBD);
   return true;
  };
 
  if (path.endsWith("/")) path += "index.html";      // Если устройство вызывается по корневому адресу, то должен вызываться файл index.html (добавляем его в конец адреса)
  String contentType = getContentType(path);       // С помощью функции getContentType (описана ниже) определяем по типу файла (в адресе обращения) какой заголовок необходимо возвращать по его вызову

  if (SPIFFS.exists(path)) {                                            // Если в файловой системе существует файл по адресу обращения
    File file = SPIFFS.open(path, "r");                                 //  Открываем файл для чтения
    size_t sent = HTTP.streamFile(file, contentType);                   //  Выводим содержимое файла по HTTP, указывая заголовок типа содержимого contentType
    file.close();                                                       //  Закрываем файл
    return true;                                                        //  Завершаем выполнение функции, возвращая результатом ее исполнения true (истина)
  };  
  return false;                                                         // Завершаем выполнение функции, возвращая результатом ее исполнения false (если не обработалось предыдущее условие)}
};
String getContentType(String filename) {                                // Функция, возвращающая необходимый заголовок типа содержимого в зависимости от расширения файла
  if (filename.endsWith(".html")) return "text/html";                   // Если файл заканчивается на ".html", то возвращаем заголовок "text/html" и завершаем выполнение функции
  else if (filename.endsWith(".css")) return "text/css";                // Если файл заканчивается на ".css", то возвращаем заголовок "text/css" и завершаем выполнение функции
  else if (filename.endsWith(".js")) return "application/javascript";   // Если файл заканчивается на ".js", то возвращаем заголовок "application/javascript" и завершаем выполнение функции
  else if (filename.endsWith(".png")) return "image/png";               // Если файл заканчивается на ".png", то возвращаем заголовок "image/png" и завершаем выполнение функции
  else if (filename.endsWith(".jpg")) return "image/jpeg";              // Если файл заканчивается на ".jpg", то возвращаем заголовок "image/jpg" и завершаем выполнение функции
  else if (filename.endsWith(".gif")) return "image/gif";               // Если файл заканчивается на ".gif", то возвращаем заголовок "image/gif" и завершаем выполнение функции
  else if (filename.endsWith(".ico")) return "image/x-icon";            // Если файл заканчивается на ".ico", то возвращаем заголовок "image/x-icon" и завершаем выполнение функции
  return "text/plain";                                                  // Если ни один из типов файла не совпал, то считаем что содержимое файла текстовое, отдаем соответствующий заголовок и завершаем выполнение функции
};

void createArrReqest(String path, String* arr) {
  byte indLog = path.indexOf("/log=");
  byte indPass = path.indexOf("/pass=");
  String getLog = path;
  String getPass = path; 
  getLog.remove(indPass);
  getLog.remove(indLog, indLog + 5);
  getPass.remove(0, indPass + 6);
  arr [0] = getLog;
  arr [1] = getPass;
};

int counterSizeBD(){
  File file = SPIFFS.open("/bd.txt", "r");
  String data = file.readString();
  file.close();
  int i = 0;
  int j = 0;
  while(data.indexOf("#", 0+i)!=-1){
    i = data.indexOf("#", 0+i)+1;
    j++;
  };
  return j;    
};

void createArrBD(String arr[][4]){
  File file = SPIFFS.open("/bd.txt", "r");
  String data = file.readString();
  file.close();
  int i = 0;
  int j = 0;
  while(data.length() > 3){
    while (data.indexOf("|") < data.indexOf("#")){   
      arr[j][i] = data.substring(0, data.indexOf("|"));
      data.remove(0,data.indexOf("|")+1);
      if(data.length() <= 3) {break;};
      ++i;
    };
  ++j;
  i = 0;
  data.remove(0,data.indexOf("#")+1);
  };
};

int searchRecordInBaseData(String arrBD[][4], String* arrReq, int count){
  for(int i = 0;i<count;i++){
    if (String(arrReq[0]).equalsIgnoreCase(String(arrBD[i][0])) && String(arrReq[1]).equals(String(arrBD[i][1]))){  
      HTTP.send(200, "text/plain", "*Нашев лог:" + arrReq[0] + " пар:" + arrReq[1] + "; в базе данных запись номер: " + String(i));
      return 13;
    };
  };
    HTTP.send(200, "text/plain", "*НЕНАШЕВ в бд лог:" + arrReq[0] + " пар:" + arrReq[1]);
Вот функции мало ли помогут ESP Экстрасенсам над проблемой колдовать)
Поясните для начала следующее:
1) У вас в сообщениях меняется IP адрес. Вы что сканируете всю сетку?
2) Как вы определили что ответ от ESP а не от чего-то другого?
3) Вы уверены что ESP у вас будет отвечать на пинг?
 

Захар

New member
Поясните для начала следующее:
1) У вас в сообщениях меняется IP адрес. Вы что сканируете всю сетку?
2) Как вы определили что ответ от ESP а не от чего-то другого?
3) Вы уверены что ESP у вас будет отвечать на пинг?
Доброго времени суток.
1) "ping 192.168.16.111 -t" это адрес есп задан статично дхцп, тот что проскакивает 192.168.16.100 это адрес компьютера с которого пингую.
2) По этому есть уверенность что пингую именно контролер.
3) До этого же прекрасно отвечала, на пинг, только на момент запросов "GET" уходила в "неадекват".
Спасибо Вам за отзывчивость.
 

Захар

New member
Здравствуйте, подскажите по отладке, звучит технологично.)
Спасибо Вам за отзывчивость.
UPD. я как понял вы имели ввиду утилиту EspExceptionDecoder. Дело в том что когда вылетают "нули" и "единицы" я знаю где ошибся в большинстве случаев. Тут же все проходит без перезагрузки контролера, соответственно без ошибок в порт.
 

Захар

New member
Ну вроде разобрался и подключил даже первые цифры удалось получить. Не скажете где уточнить по режимам и уровням отладки? Вопрос 2 в том что это значит?

Код:
WS:ac
:ref 1
WS:av status=4 WCav=0
:ref 2
:ur 2
:ref 2
:ur 2
:rn 536
:c0 1, 536
:rn 19
WS:ac
:c0 1, 19
:wr 85 0
:wrc 85 85 0
:wr 2826 0
:wrc 987 2826 0
:ack 621
:wr 1839 987
:wrc 621 1839 0
:ack 987
:wr 1218 1608
:wrc 987 1218 0
:ack 621
:wr 231 2595
:wrc 231 231 0
SPIFFS_close: fd=1
SPIFFS_close: fd=1
:ack 451
:ack 231
:rcl pb=0 sz=-1
:abort
:rn 440
:ur 1
:dsrcv 0
WS:dis
:del
:ref 1
WS:av status=4 WCav=440
:ref 2
:ur 2
:ref 2
:ur 2
:c0 1, 440
WS:ac
:rn 425
:wr 84 0
:wrc 84 84 0
:wr 4163 0
:wrc 988 4163 0
:ack 620
:wr 3175 988
:wrc 620 3175 0
:ack 988
:wr 2555 1608
:wrc 988 2555 0
:ack 620
:wr 1567 2596
:wrc 620 1567 0
:ack 988
:wr 947 3216
:wrc 947 947 0
SPIFFS_close: fd=2
SPIFFS_close: fd=2
:ack 620
:ack 411
:rcl pb=0 sz=-1
:abort
:ur 1
:dsrcv 0
WS:dis
:del
:ref 1
WS:av status=4 WCav=425
:ref 2
:ur 2
:ref 2
:ur 2
:c0 1, 425
:wr 98 0
:wrc 98 98 0
:wr 3542 0
:wrc 974 3542 0
:ack 634
:wr 2568 974
:wrc 634 2568 0
:ack 974
:wr 1934 1608
:wrc 974 1934 0
:ack 634
:wr 960 2582
:wrc 634 960 0
:ack 974
:wr 326 3216
:wrc 326 326 0
SPIFFS_close: fd=3
SPIFFS_close: fd=3
:ack 98
:ack 326
:rcl pb=0 sz=-1
:abort
:ur 1
:dsrcv 0
WS:dis
:del
WS:ac
:ref 1
WS:av status=4 WCav=0
:ref 2
:ur 2
:rn 470
:ref 2
:ur 2
:c0 1, 470
:wr 84 0
:wrc 84 84 0
:wr 4163 0
:wrc 988 4163 0
:ack 620
:wr 3175 988
:wrc 620 3175 0
:ack 988
:wr 2555 1608
:wrc 988 2555 0
:ack 620
:wr 1567 2596
:wrc 620 1567 0
:ack 988
:wr 947 3216
:wrc 947 947 0
SPIFFS_close: fd=2
SPIFFS_close: fd=2
:ack 84
:rcl pb=0 sz=-1
:abort
:ur 1
:dsrcv 0
WS:dis
:del
:rn 5
:c0 1, 5
:wr 33 0
:wrc 33 33 0
:wr 2 0
:wrc 2 2 0
:ack 33
:ack 2
:rn 8
:c0 1, 8
:wr 20 0
:wrc 20 20 0
:wr 2 0
:wrc 2 2 0
:ack 20
:ack 2
:rn 6
:c0 1, 6
:wr 50 0
:wrc 50 50 0
:wr 2 0
:wrc 2 2 0
:ack 50
:ack 2
:rn 6
:c0 1, 6
WS:ac
:ref 1
WS:av status=4 WCav=0
:ref 2
:ur 2
:ur 1
:dsrcv 0
WS:dis
:del
:ref 2
:ur 2
:wr 28 0
:wrc 28 28 0
:wr 2 0
:wrc 2 2 0
:wr 51 0
:wrc 51 51 0
:wr 2 0
:wrc 2 2 0
:wr 51 0
:wrc 51 51 0
:wr 2 0
:wrc 2 2 0
:wr 53 0
:wrc 53 53 0
:wr 2 0
:wrc 2 2 0
:wr 52 0
:wrc 52 52 0
:wr 2 0
:wrc 2 2 0
:wr 54 0
:wrc 54 54 0
:wr 2 0
:wrc 2 2 0
:wr 55 0
:wrc 55 55 0
:wr 2 0
:wrc 2 2 0
:ack 28
:wr 52 0
:wrc 52 52 0
:wr 2 0
:wrc 2 2 0
:wr 49 0
:wrc 49 49 0
:wr 2 0
:wrc 2 2 0
:ack 51
:wr 18 0
:wrc 18 18 0
:wr 2 0
:wrc 2 2 0
:wr 19 0
:wrc 19 19 0
:wr 2 0
:wrc 2 2 0
:ack 2
:ack 382
:close
:ack 41
 
Сверху Снизу