Arduino Mega Server

Модератор: Alex

serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв

Re: Arduino Mega Server

Сообщение serghei »

1. Да , виноват. Файл tcal.js добавить надо.
tcal.js
(11.54 КБ) 284 скачивания
И вообще то только браузером страницу не открыть. Обязательно надо закинуть на карту памяти. Работает только в составе AMS/. файл стилей подтянется сам.
2. Файл *.msg генерирует ардуина. Как - есть для этого вкладка sd_message.ino

Код: Выделить всё

/*
  Modul Message ver 0.1
  part of Arduino Mega Server project
  Модуль архивных сообщений
  для Ардуино Мега Сервер
*/

/* Создает запись в файле *.msg 
 * Необходимо передать функции:
 * MessText - название сообщения
 * MessType - тип сообщения
*/

void MessLoger(String MessText, String MessType){
  
// собираем Имя путь и имя файла
String MessName;
     if(day()<10)
       MessName+="0"+String(day(),DEC);
     else
       MessName+=String(day(),DEC);
     if(month()<10)
       MessName+="-0"+String(month(),DEC);
     else
       MessName+="-"+String(month(),DEC);
       MessName+="-"+String(year()-2000,DEC);
       //MessName+=".csv";

       MessName+=".msg";

    File file = SD.open(String (MessName), FILE_WRITE);
        if(file){
        if(day() < 10) {file.print('0');}
        file.print(String (day()));
        file.print("-");  
        if(month() < 10) {file.print('0');}
        file.print(String (month()));
        file.print("-");
        file.print( String (year()));
        file.print(",");
        if(hour() < 10) {file.print('0');}
        file.print( String (hour()));
        file.print(":");
        if(minute() < 10) {file.print('0');}
        file.print(String (minute()));
        file.print(":");
        if(second() < 10) {file.print('0');}
        file.print(String (second()));
        file.print(",");
        file.print( String (MessText));
        file.print(",");
        file.println( String (MessType));
        file.close();
        }
        else{}
}
3. Файл descr.txt - это просто перечень имен графиков. Пишется руками в текстовом редакторе.

Код: Выделить всё

Серверная,Кухня,Улица,Влажность DHT,Температура DHT,Температура BME,Влажность BME,Давление BME
Имена пишутся по порядку как объявлены в коде.
Это сделано для удобства - иначе пришлось бы в двух местах прописывать.

4. Ну и самое главное - *.log Опять же пишет сама ардуина во вкладке tlog.ino

Код: Выделить всё

/*
  Module TLOG DUE
  part of Arduino Mega Server project
*/
/*
  Модуль создаёт два файла :
   1 "Gotdata.css" для страницы "Chart.htm". Автор идеи и сода Ledmax.
   2 "/день-месяц-год/.log" для страницы "Graf.htm". Автор кода Ser009.

  Страницу "Graf.htm" создал Alexsis_76.
  
 */
 
#ifdef TLOG_FEATURE
void TlogInit() {                                        // Инициализируем модуль

   moduleTlog = MODULE_ENABLE;                           // Если модуль активен
  started("TLog");                                       // Старт модуля
  
}


void TlogWorks(){

    if(cycle5m){                                         // Каждые 5 минут записываем данные
 
// собираем Имя путь и имя файла
String Mess1Name;
     //MessName+="/Alarm/";
     if(day()<10)
       Mess1Name+="0"+String(day(),DEC);
     else
       Mess1Name+=String(day(),DEC);
     if(month()<10)
       Mess1Name+="-0"+String(month(),DEC);
     else
       Mess1Name+="-"+String(month(),DEC);
       Mess1Name+="-"+String(year()-2000,DEC);
       Mess1Name+=".log";    
         
        File dataFile = SD.open(String (Mess1Name), FILE_WRITE); // Открываем файл для записи логов страницы "Graf.htm"


if (dataFile) {                                                // Если удалось открыть файл
  dataFile.println(logString());                               // Записываем строку логов в файл
  dataFile.close();                                            // Закрываем файл
}else                                                          // Если не удалось открыть файл
Serial.println("Can't open file");                             // Выводим сообщение об ошибке

    }

//================================================================================================

        if(cycle5m){                                           // Каждые 5 минут записываем данные

      File dataFile = SD.open("gotdata.css", FILE_WRITE);      // Открываем файл для записи логов для страницы "Chart.htm"



if (dataFile) {                                                // Если удалось открыть файл
  dataFile.println(logString());                               // Записываем строку логов в файл
  dataFile.close();                                            // Закрываем файл
}else                                                          // Если не удалось открыть файл
Serial.println("Can't open file");                             // Выводим сообщение об ошибке

    }

  }

String logString() {                                           // Функция для генерации логов

String dataString = String (year()) + "-" + String (month()) + "-" + String (day()) + " " + String (hour()) + ":" + String (minute()) + ":" + String (second())+ " " + ","
+ String (current_temp[0]) + "," + String (current_temp[1]) + "," + String (current_temp[2]) + "," + String (dht.readHumidity()) + "," + String (dht.readTemperature())+ " " + ","                                    
+ String (temp) + "," + String (hum) + "," + String (pres);            // Помещаем дату и температуру в новую строку логов ( можно добавить еще данных. 6 штук работают уверенно )
  Serial.println(dataString);                                  // Выводим строку логов на монитор серийного порта

  return(dataString);                                          // Возвращаем полученные значения в место вызова функции 

}

#endif // DATALOG_FEATURE 
Для теста просто закинь на карту файлик
30-03-18.LOG
(19.12 КБ) 266 скачиваний
На странице календарём надо выбрать эту дату или переименовать на текущее число.
28-04-20.txt
(1.39 КБ) 248 скачиваний
Расширение .txt переименовать в .msg
Вложения
12-11-17.LOG
(20.37 КБ) 276 скачиваний
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
Smeech
Сообщения: 12
Зарегистрирован: Сб мар 21, 2020 9:28 am

Re: Arduino Mega Server

Сообщение Smeech »

Вроде потихоньку разбираюсь. Вопрос - а сообщения о событиях из файла *.msg - они накладываются на график в виде меток-лейблов каких-то?
Вчера зашел на сайт amcharts, покурил-почитал, подумал о том, а не быстрее ли будет самому по их мануалам эти самые графики прикрутить.. С АМС сервером почти так и вышло уже у меня- как тут чуть выше говорили, насобирал из скетчей-примеров нужного мне кода, нацеплял к есп-шке датчиков, запустил wifi, поднял веб-сервер. Все работает, логов уже недели за две насобирал. И далласы работают прекрасно, а на АМС не хотели ни в какую. Видать библиотеки там старые очень. Получилось уже почти все, что надо, без того, что совсем не надо :)
Вот разве веб-морду теперь тоже самому рисовать надо. Ну или все-таки что-то взять за основу. Кстати, а поделитесь, плз, библиотекой фтп-сервера для есп. С фтп много проще будет веб-мастерингом заниматься. На гитхабе какие-то странные узко специальные версии только лежат.
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв

Re: Arduino Mega Server

Сообщение serghei »

Нет , не накладываются. Так исторически получилось , что логирование и графики на одной странице. Просто разрабатывали одновременно и параллельно )) По уму эту страницу надо разделить на две.
Так библа amcharts и так локально лежит. Быстрее не получится обработать. Может , конечно , и новее есть. Три года всё таки прошло.
Кстати , если гафкнуть на название графика на странице - он исчезнет. Вот с полосой прокрутки глюк вышел - там картинка лежит во вложенной папке , а АМС я так и не научил работать с новой библиотекой SD/ карты. Хотя ser009 вроде бы её заменил на новую.

Сам дистрибутив АМС - по сути это и есть движек для рисования сайтов. 98 % кода только этим и занимается.

Далласы работают на всех платформах - и библиотека тут ни причём. Просто надо их ID правильно вписать в код - в сериале при старте они видны.

С библиотекой для FTP не понятный глюк - Отдельно на ESP32 работает прекрасно. Скорость приличная. 20 метров файл влетает за несколько секунд. А вот в составе сервера не хочет работать. Как только устанавливаю соединение - сервер сбрасывается. Почему - я не знаю. Это Егорку пытать надо.

К тому же сейчас заливка файлов по воздуху нативно работает очень шустро. ( на есп32 ))
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
Smeech
Сообщения: 12
Зарегистрирован: Сб мар 21, 2020 9:28 am

Re: Arduino Mega Server

Сообщение Smeech »

Все получилось, графики увидел, архив сообщений тоже. Даже свой лог сегодняшний подредактировал под нужный формат, подсунул, увидел отрисованные графики. Благодарствую ))
serghei писал(а): Вт апр 28, 2020 11:14 pm Нет , не накладываются. Так исторически получилось , что логирование и графики на одной странице. Просто разрабатывали одновременно и параллельно )) По уму эту страницу надо разделить на две.
Так библа amcharts и так локально лежит. Быстрее не получится обработать. Может , конечно , и новее есть. Три года всё таки прошло.
Там сейчас красота ваще... Последняя версия текущая, amCharts 4, такое позволяет рисовать и так круто выглядит, прям руки чешутся.. ;)
serghei писал(а): Вт апр 28, 2020 11:14 pm
Вот с полосой прокрутки глюк вышел - там картинка лежит во вложенной папке , а АМС я так и не научил работать с новой библиотекой SD/ карты. Хотя ser009 вроде бы её заменил на новую.
Угу, обратил внимание. Еще и картинка какая-то необычная, *.svg расширение, первый раз такое вижу.
serghei писал(а): Вт апр 28, 2020 11:14 pm Далласы работают на всех платформах - и библиотека тут ни причём. Просто надо их ID правильно вписать в код - в сериале при старте они видны.
Ну не знаю.. Вроде обращался по адресам, помню что в момент инициализации они находились, и на этом все заканчивалось. Установка разрешения уже не работала, и дальше по ходу работы АМС стабильно -127 выдавали показания.
serghei писал(а): Вт апр 28, 2020 11:14 pm К тому же сейчас заливка файлов по воздуху нативно работает очень шустро. ( на есп32 ))
Это же или сама прошивка, или файлы в SPIFFS. А если на SD карту надо?
eGorka
Сообщения: 182
Зарегистрирован: Чт ноя 24, 2016 10:47 am

Re: Arduino Mega Server

Сообщение eGorka »

Smeech писал(а): Ср апр 29, 2020 12:15 amА если на SD карту надо?
ESP8266
SD --> libraries/ESP8266WebServer/examples/SDWebServer
Прошивка --> libraries/ESP8266WebServer/examples/WebUpdate
SPIFFS --> libraries/ESP8266WebServer/examples/FSBrowser

ESP32
SD --> libraries/WebServer/examples/SDWebServer
Прошивка --> libraries/WebServer/examples/WebUpdate
SPIFFS --> libraries/WebServer/examples/FSBrowser
serghei писал(а): Вт апр 28, 2020 11:14 pmК тому же сейчас заливка файлов по воздуху нативно работает очень шустро. ( на есп32 ))
Очень шустро!?, да ладно, для сравнения.
SPOILERSPOILER_SHOW

Код: Выделить всё

19:53:28.248 -> *** Test upload WebServer.h ***
19:53:28.248 -> Upload Start: update_test_ESP32.ino.esp32.bin
19:53:39.855 -> SDK: v3.3.1-61-g367c3c09c
19:53:39.855 -> Time UPLOAD: 11.62 sec.
19:53:39.855 -> Speed UPLOAD: 536.85 Kbit/s
19:53:39.855 -> Upload Success: 798768 bytes
19:53:39.855 -> 
19:54:03.161 -> *** Test upload ESPAsyncWebServer.h ***
19:54:03.161 -> Upload Start: update_test_ESP32.ino.esp32.bin
19:54:04.050 -> SDK: v3.3.1-61-g367c3c09c
19:54:04.050 -> Time UPLOAD: 0.92 sec.
19:54:04.050 -> Speed UPLOAD: 6775.65 Kbit/s
19:54:04.050 -> Upload Success: 798768 bytes
update_test_ESP32.7z
(627.09 КБ) 368 скачиваний
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв

Re: Arduino Mega Server

Сообщение serghei »

ace.js.gz
(96.62 КБ) 396 скачиваний
Smeech писал(а): Ср апр 29, 2020 12:15 am Это же или сама прошивка, или файлы в SPIFFS. А если на SD карту надо?
Заливать по воздуху можно как саму прошивку , так и файлы. К тому же файлы можно редактировать прямо в браузере. Но осторожно! , после такого редактирования не будет файла в исходнике!
Для ESP32 c SD картой забрось на карту 5 файлов именно АРХИВАМИ!
ace.js.gz
(96.62 КБ) 396 скачиваний
mode-css.js.gz
(5.96 КБ) 426 скачиваний
mode-html.js.gz
(16.64 КБ) 382 скачивания
mode-javascript.js.gz
(6.17 КБ) 437 скачиваний
Так же страницу edit.htm с заменой старой
edit.zip
(6.05 КБ) 397 скачиваний
Так же сам код в ЕСП32 с картой

Код: Выделить всё

/*
  Modul HTTP
  part of Arduino Mega Server project

*/
#ifdef HTTP_FEATURE

#include "WebServer.h"
#include "Update.h"

#define HTTP_PORT 8080
WebServer HTTP(HTTP_PORT);

File fsUploadFile;

String getContentType(String filename){
  if(HTTP.hasArg("download")) return "application/octet-stream";
  else if(filename.endsWith(".htm")) return "text/html";
  else if(filename.endsWith(".html")) return "text/html";

  else if(filename.endsWith(".css")) return "text/css";
  else if(filename.endsWith(".csv")) return "text/plain";
  else if(filename.endsWith(".cfg")) return "text/plain";
  else if(filename.endsWith(".js")) return "application/javascript";
  else if(filename.endsWith(".png")) return "image/png";
  else if(filename.endsWith(".gif")) return "image/gif";
  else if(filename.endsWith(".jpg")) return "image/jpeg";
  else if(filename.endsWith(".ico")) return "image/x-icon";
  else if(filename.endsWith(".xml")) return "text/xml";
  else if(filename.endsWith(".pdf")) return "application/x-pdf";
  else if(filename.endsWith(".zip")) return "application/x-zip";
  else if(filename.endsWith(".gz")) return "application/x-gzip";
  return "text/plain";
}

bool handleFileRead(String path){
  Serial.println("handleFileRead: " + path);
  if(path.endsWith("/")) path += "index.htm";
  String contentType = getContentType(path);
  String pathWithGz = path + ".gz";
  if(SD.exists(pathWithGz) || SD.exists(path)){
    if(SD.exists(pathWithGz)) 
      path += ".gz";
    File file = SD.open(path, "r");
    HTTP.streamFile(file, contentType);
    file.close();
    return true;
  }
  return false;
}

void handleFileUpload() {
  if(HTTP.uri() != "/edit") return;
  HTTPUpload& upload = HTTP.upload();
  if(upload.status == UPLOAD_FILE_START){
    String filename = upload.filename;
    if(!filename.startsWith("/")) filename = "/"+filename;
    fsUploadFile = SD.open(filename, "w");
    filename = String();
  } else if(upload.status == UPLOAD_FILE_WRITE){
    if(fsUploadFile)
      fsUploadFile.write(upload.buf, upload.currentSize);
  } else if(upload.status == UPLOAD_FILE_END){
    if(fsUploadFile)
      fsUploadFile.close();
  }
} // handleFileUpload()

void handleFileDelete() {
  if(HTTP.args() == 0) return HTTP.send(500, "text/plain", "BAD ARGS");
  String path = HTTP.arg(0);
  if(path == "/")
    return HTTP.send(500, "text/plain", "BAD PATH");
  if(!SD.exists(path))
    return HTTP.send(404, "text/plain", "FileNotFound");
  SD.remove(path);
  HTTP.send(200, "text/plain", "");
  path = String();
} // handleFileDelete()

void handleFileCreate() {
  if(HTTP.args() == 0)
    return HTTP.send(500, "text/plain", "BAD ARGS");
  String path = HTTP.arg(0);
  if(path == "/")
    return HTTP.send(500, "text/plain", "BAD PATH");
  if(SD.exists(path))
    return HTTP.send(500, "text/plain", "FILE EXISTS");
  File file = SD.open(path, "w");
  if(file)
    file.close();
  else
    return HTTP.send(500, "text/plain", "CREATE FAILED");
  HTTP.send(200, "text/plain", "");
  path = String();
} // handleFileCreate();

void handleFileList() {
  if(!HTTP.hasArg("dir")) {HTTP.send(500, "text/plain", "BAD ARGS"); return;}
  String path = HTTP.arg("dir");
  if(path != "/" && !SD.exists((char *)path.c_str())) {HTTP.send(500, "text/plain", "BAD PATH"); return;}
  File dir = SD.open((char *)path.c_str());
  path = String();
  if(!dir.isDirectory()){
    dir.close();
    HTTP.send(500, "text/plain", "BAD DIR");
    return;
  }
  dir.rewindDirectory();
  HTTP.setContentLength(CONTENT_LENGTH_UNKNOWN);
  HTTP.send(200, "text/json", "");

  HTTP.sendContent("[");
  for (int cnt = 0; true; ++cnt) {
    File entry = dir.openNextFile();
    if (!entry)
    break;

    String output;
    if (cnt > 0)
    output = ',';
    output += "{\"type\":\"";
    output += (entry.isDirectory()) ? "dir" : "file";
    output += "\",\"name\":\"";
    output += String(entry.name()).substring(1);
    output += "\"";
    output += "}";
    HTTP.sendContent(output);
    entry.close();
    Serial.println(output);//============== вывод в сериал
 }
 HTTP.sendContent("]");
 dir.close();
} // handleFileList()

String Fail = "<!DOCTYPE html><html><head><meta http-equiv='Content-type' content='text/html; charset=utf-8'><meta name='viewport' content='width=device-width, initial-scale=1'></head><style>body{background:#FFA07A;}</style><body><h3>Firmware update:</h3><h2>&emsp;&ensp;FAIL</h2><h3>&ensp;&ensp;Restart ESP</h3></body></html>";

String Ok = "<!DOCTYPE html><html><head><meta http-equiv='Content-type' content='text/html; charset=utf-8'><meta name='viewport' content='width=device-width, initial-scale=1'><meta http-equiv='refresh' content='15;update.htm'></head><style>body{background:#E0EEE0;}</style><body><h3>Firmware update:</h3><h2>&emsp;&ensp;OK!</h2></body></html>";

void updateInit() {
  HTTP.on("/update", HTTP_POST, [](){
  HTTP.sendHeader("Connection", "close");
  HTTP.send(200, "text/plain", (Update.hasError()) ? "FAIL" : "OK");
  ESP.restart();
  },[](){
    HTTPUpload& upload = HTTP.upload();
    if(upload.status == UPLOAD_FILE_START){
      uint32_t maxSketchSpace = 0x140000;
      if(!Update.begin(maxSketchSpace)){
        Update.printError(Serial);
      }
    } else if(upload.status == UPLOAD_FILE_WRITE){
      if(Update.write(upload.buf, upload.currentSize) != upload.currentSize){
        Update.printError(Serial);
      }
    } else if(upload.status == UPLOAD_FILE_END){
      if(Update.end(true)){
        Serial.printf("Update Success: %u B\nDownload time: %d sec.\nRebooting...\n", upload.totalSize);
      } else {
        Update.printError(Serial);
      }
    }
    yield();
  });
} // updateInit()

void initHttp() {
  HTTP.on("/list", HTTP_GET, handleFileList);
  HTTP.on("/edit", HTTP_GET, []() { if (!handleFileRead("edit.htm")) HTTP.send(404, "text/plain", "FileNotFound"); });
  HTTP.on("/edit", HTTP_PUT, handleFileCreate);
  HTTP.on("/edit", HTTP_DELETE, handleFileDelete);
  HTTP.on("/edit", HTTP_POST, []() { HTTP.send(200, "text/plain", ""); }, handleFileUpload);
  HTTP.onNotFound([]() { if (!handleFileRead(HTTP.uri())) HTTP.send(404, "text/plain", "FileNotFound"); });

  updateInit();
  HTTP.begin();
  timeStamp();
  printValue("HTTP port", String(HTTP_PORT));
  moduleHTTP = ENABLE;
  started(F("Http"), true);
} // initHttp()

void httpWork() {
  HTTP.handleClient();
}

#endif // HTTP_FEATURE 
Вызов страницы - ВАШ IP:8080/edit.htm Для заливки прошивки заменить файл
update.zip
(1.14 КБ) 362 скачивания
Предварительно скомпилировать *.bin файл , на странице выбрать его ( он будет в папке скетча )
Для ESP32 с SPIFFS системой скетч выше )

PS / В хроме может не корректно открываться страница edit ( не будет списка файлов в левой части). Попробуй фаер фокс или оперу
Вложения
worker-html.js.gz
(48.85 КБ) 383 скачивания
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
Smeech
Сообщения: 12
Зарегистрирован: Сб мар 21, 2020 9:28 am

Re: Arduino Mega Server

Сообщение Smeech »

SDWebServer - да, вроде как позволяет заливать файлы на флешку. Даже что-то вроде дерева файлов и текстового редактора в браузере в примере есть, правда я так до конца и не разобрался, как оно работает. Но хотелось бы все же фтп - я привык открывать файл, скажем, .htm или .jss в текстовом редакторе прямо с сервера через фтп-соединение, и с ним работать. Внес изменения, нажал кнопку сохранить, в браузере нажал кнопку перегрузить страницу - и вуаля, результат налицо.
Попутно вопрос - а почему асинхронный этот веб-сервер, ESPAsyncWebServer.h на порядок быстрее? Просто в силу особенностей кода самой библиотеки? Пробовал я тут погуглить на счет связи двух и более есп32 по http, и в первой же статье наткнулся именно на пример с этой асинхронной библиотекой.
Попутно еще вопрос - а есть на примете пример реализации связи двух и более есп32 по http? Глянул мельком на примеры в MySensors, там есть все что угодно, кажись, но не вайфай и хттп. Может не особо внимательно смотрел, конечно, боюсь увлекшись далеко в сторону забрести.. :)
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв

Re: Arduino Mega Server

Сообщение serghei »

Сумбурно , но по порядку.
Когда то , когда небо было синее и трава зеленее Alexsis_76 показывал тут на форуме весь вред HTTP реквеста - пакеты размером 118 байт имеют полезную нагрузку 1 байт. То есть чтобы загрузить страницу в 1 кило надо прокачать 118 кило по сети. Это особенность протокола. Подробности надо спрашивать у него. Как костыль - в каком то коде встречал такую реализацию - сначала набиваем буфер в 60 байт и затем его передаём.

По FTP я уже говорил - взял первую попавшуюся библу с гита , залил и всё заработало. НО в составе АМС нет.

По поводу связи двух ЕСП. На форуме есть пример реализации Тут. Но если честно - у меня не получилось с ним разобраться.

Если есть MQTT брокер , то можно связать любое количество ЕСР . писать сценарии прямо в браузере и видеть результат в приложении. Реализация в телеге https://t.me/esp_zigbee

MySensors - это отдельная песня. Главный смысл - собрать данные с кучи ардуин на радио модулях и куда нибудь отправить. там есть и ESP8266 и 32 . HTTP там нет .
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
eGorka
Сообщения: 182
Зарегистрирован: Чт ноя 24, 2016 10:47 am

Re: Arduino Mega Server

Сообщение eGorka »

Smeech писал(а): Ср апр 29, 2020 11:02 pmПопутно вопрос - а почему асинхронный этот веб-сервер, ESPAsyncWebServer.h на порядок быстрее?
ESPAsyncWebServer писал человек знающий протоколы обмена на уровне разработчика, и кстати благодаря ему же WebServer начал загружать файлы на адекватной скорости.
alexsis_76
Сообщения: 792
Зарегистрирован: Пт янв 22, 2016 10:08 am

Re: Arduino Mega Server

Сообщение alexsis_76 »

Добрый день друзья!!!
Очень рад услышать голоса идущих вперед последователей славной АМС )))
Когда то , когда небо было синее и трава зеленее Alexsis_76 показывал тут на форуме весь вред HTTP реквеста - пакеты размером 118 байт имеют полезную нагрузку 1 байт. То есть чтобы загрузить страницу в 1 кило надо прокачать 118 кило по сети. Это особенность протокола
Это не особенности протокола, это написанный кем то и повторенный последователями корявый код))). Что бы увеличить эффективность передачи нужно набить буфер пакета максимально возможным количеством данных.

Как костыль - в каком то коде встречал такую реализацию - сначала набиваем буфер в 60 байт и затем его передаём.
Это не костыль, просто у меги очень сильно мало оперативной памяти, так что это скорее компромисс))).

Попутно еще вопрос - а есть на примете пример реализации связи двух и более есп32 по http?
Примеры можно черпать из практически неограниченного источника- Интернета и папки Ардуино с примерами, смысл в том что в контексте сетевого взаимодействия существует два субъекта- Клиент и Сервер. Cервер это тот кто слушает порт и может отвечать на входящие соединения, в сети играет пассивную роль. Клиент- более интересная реализация, выступает инициатором соединения(передает запросы).
Например браузер будет клиентом, ардуина тоже может быть клиентом и отправлять запросы вида GET/script?val1=value&val2=value, есть класс
HTTPClient собсвенно им и надо воспользоваться, примеры там-же.
Вот в принципе все вводные данные что бы построить модель Клиент-Сервер
Ответить