• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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 - отдать файл...
 
Сверху Снизу