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

Нужна помощь ESP8266 данные датчиков новой строкой.

olegmsn

New member
както так. могут быть мелкие ошибки.... компилятором не проверял

Код:
webString = "<html><head><meta http-equiv='refresh' content='5'/><title>ESP8266 Demo</title><style>body { background-color: #cccccc; font-family: Arial, Helvetica, Sans-Serif; Color: #000088; }</style></head><body>";
while (Loghtm.available()) {  // пока не достигнем конца файла
     webString += Loghtm.read();                  //добавляем прочитанный символ к строке
     }
webString += "</body></html>";
Serial.print("Sent: ");         
Serial.println(webString);    
server.send(200, "text/html", webString);            // send to someones browser when asked
переводы строк - <br/>
 

Oleeeg

New member
А еще надо подумать о том, что переменная webString не резиновая.....
и через некоторое время оно упадет. Поэтому надо время от времени укорачивать переменную.
чето типа
Код:
if (webString.length() > 200 ) {
  webString = webString.substring(100);
}
хелп по substring тут:
Arduino - StringSubstring
Ты был прав, через 100 значений начало глючить, а вот смысла укорачивания переменной не понял...
 

VicSpectator

New member
Ты был прав, через 100 значений начало глючить, а вот смысла укорачивания переменной не понял...
Могу ещё предложить использовать
Код:
server.sendContent(webString);
. Данная функция (метод) позволяет отправлять данные большего размера, чем может метод send. Поможет, но тоже решение для данной задачи плохое :) То есть неполное.
Под укорачиванием, наверное, подразумевалось, что более старые данные будут из переменной webString удаляться, а новые записываться. Например, можно сделать массив из 100 элементов и после записи сотого элемента сдвигать их (второй элемент в первую ячейку, третий элемент во вторую ячейку, ..., сотый элемент в девяносто девятую ячейку). В сотую ячейку записать новое значение.
 

Oleeeg

New member
Могу ещё предложить использовать
Код:
server.sendContent(webString);
. Данная функция (метод) позволяет отправлять данные большего размера, чем может метод send. Поможет, но тоже решение для данной задачи плохое :) То есть неполное.
Под укорачиванием, наверное, подразумевалось, что более старые данные будут из переменной webString удаляться, а новые записываться. Например, можно сделать массив из 100 элементов и после записи сотого элемента сдвигать их (второй элемент в первую ячейку, третий элемент во вторую ячейку, ..., сотый элемент в девяносто девятую ячейку). В сотую ячейку записать новое значение.
Смысл вроде понял, не могли бы вы подсказать пример такой реализации....
 

olegmsn

New member
да оно всеравно упрется в размер памяти.... рано или поздно..... надо укорачивать)))

самый простой путь так:
Код:
if (webString.length() > 200)
  webString = webString.substring(50);
дальше можно наворачивать в тему поиска новой строки (чтоб не резало по середине строки)
както так:
Код:
if (webString.length() > 200) {
  webString = webString.substring(50);
  int indx = webString.indexOf("\n");
  if (indx >= 0)
    webString = webString.substring(indx + 1);  
}
компилятором примеры не проверял, так что могут быть баги.....


а если совсем нормально, то или линейный или кольцевой буфер
(std::vector и рядом стоящие технологии и пример кольцевого есть в ссылке вверху)

если совсем просто из того что нормально) - просто объявить массив String-ов и туда засовывать по кругу, но это вызовет фрагментацию памяти... в принципе в простом примере это не важно...
 
Последнее редактирование:

Oleeeg

New member
Подскажи плиз, не знаю с чего начать, esp записывает файлы в эксель, лежащий на sd карте, паралельно поднят сервак на вай фай точке доступа....необходимо подключиться, зайти на страницу и скачать эксель файл, все.
Для этого, как я понимаю, там же на sd карте, создаю htm файл, где прописываю кнопку на странице
<input type=button onclick==”Log.csv”
name=»openFile» value=Скачать>
</form>
Не понимаю, что нужно прописать в скетч ардуино, чтобы он обратился к этому htm файлу....
 

olegmsn

New member
добавить это перед стартом сервера
Код:
  server.on("/csv", handleCSV);
и в процедуре handleCSV - отдать файл...
 
Сверху Снизу