• Система автоматизации с открытым исходным кодом на базе 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
 
Сверху Снизу