• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Node MCU ESP8266, не дружат FTP и ВЕБ обработчики

madmeur

New member
Пытаюсь собрать веб сервер + фтп, самое начало работы, при включении обработчика фтп, не работает ни фтп ни веб сервер, если выключить обработчик фтп сервера //ftpSrv.handleFTP();, веб сервер функционирует. Помогите разобраться, пожалуйста.


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

const char* ssid = "Waffle 33";                                // Указываем имя WiFi-сети, к которой будет подключаться ESP8266
const char* password = "pass";                            // Указываем пароль для подключения к WiFi-сети
const char* ftp_user = "esp8266";
const char* ftp_password = "esp8266";

ESP8266WebServer server(25566);                               // Создаём объект для работы с нашим веб-сервером, указав номер порта, по которому он будет доступен в WWW
WiFiClient client;                                            // Создаём объект для работы с удалёнными хостами
FtpServer ftpSrv;                                                       // Определяем объект для работы с модулем по FTP (для отладки HTML)

void setup(void){
  Serial.begin(115200);                                         // Инициализируем вывод данных на серийный порт со скоростью 9600 бод
 
  WiFi.begin(ssid, password);                                 // Соединяемся с WiFi-сетью
                                                  // Инициализируем работу с файловой системой, её необходимо вызывать первой, перед другими системами
  delay(500);
 
  while (WiFi.status() != WL_CONNECTED)                       // Пока соединение не установено
    delay(500);                                               //  делаем задержку в пол секунды, пока соединение не установится
  Serial.println("WiFi connected");                           // Выводим сообщение о том, что устройство соединилось с WiFi-сетью
  server.begin();                                             // Инициализируем работу веб-сервера
  server.on("/", root);                                       // Сообщаем о том, что при обращении к корневой директории нашего веб-сервера должна вызываться функция root
  server.on("/on", turnOn);
  server.on("/off", turnOff);
  delay(500);
  // Mount SPIFFS File system
  if (SPIFFS.begin()) {
    Serial.println("SPIFFS opened!");
    // Then start FTP server when WiFi connection in On
    ftpSrv.begin(ftp_user, ftp_password);   
  }
  delay(500);
  Serial.println("FTP started");                           // Выводим сообщение о том, что FTP работает

 
  Serial.println("HTTP server started");                      // Выводим на монитор серийного порта сообщение о том, что веб-сервер запущен
  Serial.print("Local IP: ");                                 // Выводим на монитор серийного порта сообщение о том, что сейчас будем выводить локальный IP
  Serial.println(WiFi.localIP());                             // Выводим локальный IP-адрес ESP8266
 
 
  Serial.print("MAC-address: ");                              // Выводим на монитор серийного порта сообщение о том, что сейчас будем выводить MAC-адрес ESP8266
  Serial.println(WiFi.macAddress());                          // Выводим MAC-адрес ESP8266
  pinMode(LED_BUILTIN, OUTPUT);     // Initialize the LED_BUILTIN pin as an output

}
 
void loop(void){
 
  //ftpSrv.handleFTP();                                         // Ожидаем обращение к FTP-серверу
  //Serial.println("im listening");
  server.handleClient();                                      // Ожидаем обращение к веб-серверу
  digitalWrite(LED_BUILTIN, HIGH);  // Turn the LED off by making the voltage HIGH
 
}

void turnOn(){                                                   // Функция,вызывающаяся при обращении клиента к корневой дирректории нашего веб-сервера
  server.send(200, "text/html","<h1>Im On!</h1>"); // Сервер отправляет клиенту информацию о том, что
  Serial.println("im On!");
} 

void turnOff(){                                                   // Функция,вызывающаяся при обращении клиента к корневой дирректории нашего веб-сервера
  server.send(200, "text/html","<h1>Im Off!</h1>"); // Сервер отправляет клиенту информацию о том, что
  Serial.println("im Off!");
} 

void root(){                                                   // Функция,вызывающаяся при обращении клиента к корневой дирректории нашего веб-сервера
  server.send(200, "text/html","<h1>Web-server ESP8266</h1>"); // Сервер отправляет клиенту информацию о том, что
  digitalWrite(LED_BUILTIN, LOW);  // Turn the LED off by making the voltage HIGH
  delay(1000);
}                                                              // 200 - запрос успешно обработан
                                                               // text/html - ответ на запрос предоставляется в формате HTML
                                                               // третий параметр (<h1>Web-server ESP8266</h1>) содержит текст ответа в формате HTML
 

Alvikskor

New member
Пытаюсь собрать веб сервер + фтп, самое начало работы, при включении обработчика фтп, не работает ни фтп ни веб сервер, если выключить обработчик фтп сервера //ftpSrv.handleFTP();, веб сервер функционирует. Помогите разобраться, пожалуйста.


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

const char* ssid = "Waffle 33";                                // Указываем имя WiFi-сети, к которой будет подключаться ESP8266
const char* password = "pass";                            // Указываем пароль для подключения к WiFi-сети
const char* ftp_user = "esp8266";
const char* ftp_password = "esp8266";

ESP8266WebServer server(25566);                               // Создаём объект для работы с нашим веб-сервером, указав номер порта, по которому он будет доступен в WWW
WiFiClient client;                                            // Создаём объект для работы с удалёнными хостами
FtpServer ftpSrv;                                                       // Определяем объект для работы с модулем по FTP (для отладки HTML)

void setup(void){
  Serial.begin(115200);                                         // Инициализируем вывод данных на серийный порт со скоростью 9600 бод

  WiFi.begin(ssid, password);                                 // Соединяемся с WiFi-сетью
                                                  // Инициализируем работу с файловой системой, её необходимо вызывать первой, перед другими системами
  delay(500);

  while (WiFi.status() != WL_CONNECTED)                       // Пока соединение не установено
    delay(500);                                               //  делаем задержку в пол секунды, пока соединение не установится
  Serial.println("WiFi connected");                           // Выводим сообщение о том, что устройство соединилось с WiFi-сетью
  server.begin();                                             // Инициализируем работу веб-сервера
  server.on("/", root);                                       // Сообщаем о том, что при обращении к корневой директории нашего веб-сервера должна вызываться функция root
  server.on("/on", turnOn);
  server.on("/off", turnOff);
  delay(500);
  // Mount SPIFFS File system
  if (SPIFFS.begin()) {
    Serial.println("SPIFFS opened!");
    // Then start FTP server when WiFi connection in On
    ftpSrv.begin(ftp_user, ftp_password);  
  }
  delay(500);
  Serial.println("FTP started");                           // Выводим сообщение о том, что FTP работает


  Serial.println("HTTP server started");                      // Выводим на монитор серийного порта сообщение о том, что веб-сервер запущен
  Serial.print("Local IP: ");                                 // Выводим на монитор серийного порта сообщение о том, что сейчас будем выводить локальный IP
  Serial.println(WiFi.localIP());                             // Выводим локальный IP-адрес ESP8266


  Serial.print("MAC-address: ");                              // Выводим на монитор серийного порта сообщение о том, что сейчас будем выводить MAC-адрес ESP8266
  Serial.println(WiFi.macAddress());                          // Выводим MAC-адрес ESP8266
  pinMode(LED_BUILTIN, OUTPUT);     // Initialize the LED_BUILTIN pin as an output

}

void loop(void){

  //ftpSrv.handleFTP();                                         // Ожидаем обращение к FTP-серверу
  //Serial.println("im listening");
  server.handleClient();                                      // Ожидаем обращение к веб-серверу
  digitalWrite(LED_BUILTIN, HIGH);  // Turn the LED off by making the voltage HIGH

}

void turnOn(){                                                   // Функция,вызывающаяся при обращении клиента к корневой дирректории нашего веб-сервера
  server.send(200, "text/html","<h1>Im On!</h1>"); // Сервер отправляет клиенту информацию о том, что
  Serial.println("im On!");
}

void turnOff(){                                                   // Функция,вызывающаяся при обращении клиента к корневой дирректории нашего веб-сервера
  server.send(200, "text/html","<h1>Im Off!</h1>"); // Сервер отправляет клиенту информацию о том, что
  Serial.println("im Off!");
}

void root(){                                                   // Функция,вызывающаяся при обращении клиента к корневой дирректории нашего веб-сервера
  server.send(200, "text/html","<h1>Web-server ESP8266</h1>"); // Сервер отправляет клиенту информацию о том, что
  digitalWrite(LED_BUILTIN, LOW);  // Turn the LED off by making the voltage HIGH
  delay(1000);
}                                                              // 200 - запрос успешно обработан
                                                               // text/html - ответ на запрос предоставляется в формате HTML
                                                               // третий параметр (<h1>Web-server ESP8266</h1>) содержит текст ответа в формате HTML
Попробуйте перед строкой server.handleClient(); поставить задержку delay (10); Возможно ЕСП не хватает времени на фоновую обработку сети. Кстати , проверьте ping Вашего сервера после подключения к вифи. Если он не стабильный, слишком длинный или его вообще нет, тогда это оно.
 
Сверху Снизу