• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Общие баги/глюки/проблемы в пакете Sming

JustACat

Moderator
Команда форума
Если вы нашли/столкнулись с какой-либо общей проблемой/багом в сборке Sming - например, что-то не устанавливается, не подключается, имеются какие-то ошибки в общей документации, в SDK, в библиотеках. Тогда постарайтесь описать эту проблему в данной теме.

- Старайтесь быть краткими и четко формулировать мысль.
- Опишите, что вы делали, когда обнаружили ошибку.
- Приложите по возможности логи/скриншоты (под Спойлер), куски кода (под Спойлер и в тег Код).
- Не пишите проблемы с конкретными примерами из сборки, для этого есть отдельная тема.

Внимание: оффтоп будет удаляться, пожалуйста, придерживайтесь темы! Спасибо!
 
Последнее редактирование:

verzi

New member
При прошивке нового примера остаются файлы от старого.
Например был HttpServer_Bootstrap, после решил попробовать FtpServer_Files, но когда подключаюсь по ftp и делаю ls, то вижу:
01-01-15 01:00AM 4294967295 ???aa@@t?tB
01-01-15 01:00AM 6173 index.html
01-01-15 01:00AM 15615 bootstrap.css.gz
01-01-15 01:00AM 30153 jquery.js.gz
Хотя там должны быть example.txt и data.bin, насколько я понимаю.
И кстати, ничего кроме ls не работает, ни put, ни get, ни delete.
ftp> get index.html
local: index.html remote: index.html
421 Service not available, remote server has closed connection.
Как очищать файловую систему? Нужно прошить пустой файл, но какого размера и по какому адресу?
 

anakod

Moderator
Команда форума
Самый надежный способ отчисти spiffs_format() :)
FTP должен работать но:
  • Пока не верные таймауты, очень быстро рвется соединение
  • Есть проблемы совместимости тк вся текущая реализация протокола была написана за одну ночь. Но из Total Commander у меня все отрабатывает корректно кроме переименования (его временно отключил)
 

JustACat

Moderator
Команда форума
несколько человек написало о проблемах с загрузкой файлов
А мне, видимо, повезло. В моем случае после компиляции и загрузки примера с сервером в модуль - все подключилось к моему роутеру домашнему, сразу же выкачало нужные файлы с вашего сервера и завелось без проблем...
Возможно дело в том, что действительно от примера к примеру файловая система не очищается (у меня как раз ее не было никакой, модуль был чистый)?

Как-то бы вот так понять четко, как нужно прошивать прошивку, чтобы в ESP не осталось ничего от старой. (думаю, что этот вопрос нубский, и я просто еще не дорос, т.к. только пробую писать под ESP в eclipse под SDK)

И еще вот сам вчера столкнулся с интересной особенностью:
- Пробовал пример Basic_WiFi, после него в модуле остались данные по WiFi.
- После загрузки в модуль примера Basic_Serial вроде, в терминале (кроме вывода, который реально написан в коде примера Basic_serial) я увидел еще и информацию о том, что модуль к WiFi подключился, то есть некую отладочную сетевую информацию.

Понятное дело, что это не дело :)
Если организовывать общение ESP с каким-то контроллером по UART, то лишнего вывода в UART со стороны ESP быть не должно. А тут получается, что я нигде этот вывод в коде не прописывал, а в UART он попадает.
Но, мне кажется, что я просто еще не разобрался, и как-то этот вывод должен отключаться, просто пока времени не было дальше поразбираться.
 

aloika

Active member
- После загрузки в модуль примера Basic_Serial вроде, в терминале (кроме вывода, который реально написан в коде примера Basic_serial) я увидел еще и информацию о том, что модуль к WiFi подключился, то есть некую отладочную сетевую информацию.
Тоже такое замечал. Вроде как это лечится выполнением цели flashinit перед flash.
 

Dr. Morg

New member
Создал в Sming функцию для отдачи XML (кстати, типа контента XML не было, пришлось добавить static const char* XML = "text/xml"; в WebConstants.h) ответа Ajax функции:

Код:
void onAjax_inputs(HttpRequest &request, HttpResponse &response)
{
    //response.setHeader("Access-Control-Allow-Origin","*");
    response.setContentType(ContentType::XML);
    TemplateFileStream *tmpl = new TemplateFileStream("ajax_inputs.xml");
    auto &vars = tmpl->variables();
    vars["IntTemp"] = "35";
    vars["TargTemp"] = "101";
    vars["Pval"] = "136";
    vars["Ival"] = "34";
    vars["Dval"] = "20";
    vars["CurTemp"] = "96";
    vars["OnTimer"] = "0";
    vars["OnAlarm"] = "0";
    vars["Alarm1"] = "6:40";
    vars["Alarm2"] = "17:20";
    vars["Alarm3"] = "9:40";
    vars["CurrTime"] = "03.04.2015 11:42";
    vars["BrewTime"] = "20.46";
    vars["EspressoCounter"] = "97";
    vars["HeaterState"] = "0";
    response.sendTemplate(tmpl); // this template object will be deleted automatically
}
Шаблон ajax_inputs.xml:
Код:
<?xml version = "1.0" ?>
<inputs>
    <TargTemp>{TargTemp}</TargTemp>
    <Pval>{Pval}</Pval>
    <Ival>{Ival}</Ival>
    <Dval>{Dval}</Dval>
    <IntTemp>{IntTemp}</IntTemp>
    <CurTemp>{CurTemp}</CurTemp>
    <OnTimer>{OnTimer}</OnTimer>
    <OnAlarm>{OnAlarm}</OnAlarm>
    <BrewTime>{BrewTime}</BrewTime>
    <Alarm1>{Alarm1}</Alarm1>
    <Alarm2>{Alarm2}</Alarm2>
    <Alarm3>{Alarm3}</Alarm3>
    <CurrTime>{CurrTime}</CurrTime>
    <HeaterState>{HeaterState}</HeaterState>
    <EspressoCounter>{EspressoCounter}</EspressoCounter>
</inputs>
Из-за удобства написания кода решил использовать шаблон, но, видимо из-за этого через непродолжительное время веб-сервер перестаёт отвечать (Ajax запросы отправляются на сервер 1 раз в секунду).
Иногда ESP8266 уходит в ребут (в логе это видно).
Лог работы (до ребута, после ребута, до полного ступора) во вложении.

Слишком много переменных для шаблона или причина в чём-то другом?
Почему модуль уходит в ребут? Почему после ребута работает корректно, но очень быстро уходит в ступор и помогает только хард ресет или передёргивание питания?

Так же не работают длинные имена файлов.
Например, apple-touch-icon-precomposed-180x180.png не отрабатывал, пришлось переименовать в icon.png.
Вероятно, особенность реализации SpifFS, но нужно иметь в виду.
 

Вложения

anakod

Moderator
Команда форума
1. Попробуйте, пожалуйста, повторить тест на более редком интервале (например 1 раз в 5-10 секунд). Поможет ли это?
2. Нельзя ли использовать JSON вместо XML? Он встроен в Sming и весьма эффективен (как в генерации так и в отдаче).
 

anakod

Moderator
Команда форума
По Вашей наводке добавил text/xml в MIME типы. Спасибо!
 

Dr. Morg

New member
@anakod, тогда ещё тип ICO добавьте, его тоже не было: static const char* ICO = "image/x-icon";

Касательно меньшего интервала,- протестирую и отпишусь о результате.
Насколько JSON будет эффективно работать на коротких интервалах (1р/сек)?
 

anakod

Moderator
Команда форума
Готово. JSON будет существенно эффективнее, он преобразуется в текст только на финальном этапе. И объем текста сильно меньше.
 

Dr. Morg

New member
@anakod, протестировал работу с интервалом 5 и 10 сек,- работает чуть дольше, но всё равно что-то происходит, после чего (видимо по ватчдогу) модуль уходит в ребут:
Код:
continue to plaint text
plain template text pos: 474, len: 28
TCP connection send: 28 (28)
Stream completed
TCP connection closing
~TCP connection
-TCP connection

ets Jan  8 2013,rst cause:4, boot mode:(3,6)

wdt reset
load 0x40100000, len 30988, room 16
tail 12
chksum 0xb7
ho 0 tail 12 room 4
load 0x3ffe8000, len 2528, room 12
tail 4
chksum 0xa5
load 0x3ffe89e0, len 10880, room 4
tail 12
chksum 0x75
csum 0x75
slЋѓrlЊћгЊcЊb||lЏмтnоЂnoгЊlа|мЊllЏlЊlЏЂll`Ђoь
 

Dr. Morg

New member
Переписал функцию на JSON:
Код:
void onJSON(HttpRequest &request, HttpResponse &response)
{
    JsonObjectStream* stream = new JsonObjectStream();
    JsonObject& vars = stream->getRoot();
    vars["IntTemp"] = "35";
    vars["TargTemp"] = "101";
    vars["Pval"] = "136";
    vars["Ival"] = "34";
    vars["Dval"] = "20";
    vars["CurTemp"] = "96";
    vars["OnTimer"] = "0";
    vars["OnAlarm"] = "0";
    vars["Alarm1"] = "6:40";
    vars["Alarm2"] = "17:20";
    vars["Alarm3"] = "9:40";
    vars["CurrTime"] = "03.04.2015 11:42";
    vars["BrewTime"] = "20.46";
    vars["EspressoCounter"] = "97";
    vars["HeaterState"] = "0";
    response.sendJsonObject(stream);
}
Но даже при обращении напрямую к функции (не через AJAX), периодически и достаточно часто возникают таймауты:
onAccept state: 0 K=0
Free heap size=27752, K=0
+TCP connection
path=/ajax_inputs
Host === 192.168.88.207
parsed
Request: GET, nodata
TCP received: 412 bytes
onReadyToSendData: 1
response sendHeader
TCP connection send: 17 (17)
TCP connection send: 19 (19)
TCP connection send: 32 (32)
TCP connection send: 2 (2)
response sendBody
TCP connection send: 398 (398)
Stream completed
TCP connection closing
~TCP connection
onAccept state: 0 K=0
Free heap size=26296, K=0
+TCP connection
-TCP connection
onReadyToSendData: 3
onReadyToSendData: 3
onReadyToSendData: 3
onReadyToSendData: 3
onReadyToSendData: 3
onReadyToSendData: 3
onReadyToSendData: 3
onReadyToSendData: 3
onReadyToSendData: 3
onReadyToSendData: 3
onReadyToSendData: 3
onReadyToSendData: 3
onReadyToSendData: 3
onReadyToSendData: 3
onReadyToSendData: 3
onReadyToSendData: 3
onReadyToSendData: 3
onReadyToSendData: 3
onReadyToSendData: 3
onReadyToSendData: 3
onReadyToSendData: 3
onReadyToSendData: 3
onReadyToSendData: 3
onReadyToSendData: 3
onReadyToSendData: 3
onReadyToSendData: 3
onReadyToSendData: 3
onReadyToSendData: 3
onReadyToSendData: 3
onReadyToSendData: 3
onReadyToSendData: 3
onReadyToSendData: 3
onReadyToSendData: 3
onReadyToSendData: 3
onReadyToSendData: 3
onReadyToSendData: 3
onReadyToSendData: 3
onReadyToSendData: 3
onReadyToSendData: 3
TCP connection closed by timeout
TCP connection closing
~TCP connection
-TCP connection
onAccept state: 0 K=0
Free heap size=28104, K=0
+TCP connection
path=/ajax_inputs
Host === 192.168.88.207
parsed
Request: GET, nodata
TCP received: 412 bytes
onReadyToSendData: 1
response sendHeader
TCP connection send: 17 (17)
TCP connection send: 19 (19)
TCP connection send: 32 (32)
TCP connection send: 2 (2)
response sendBody
TCP connection send: 398 (398)
Stream completed
TCP connection closing
~TCP connection
-TCP connection

Кстати, при скачивании файлов во флеш после заливки прошивки, тоже есть проблемы с onReadyToSendData: 3:
I'm CONNECTED
Download file: index.htm 1
Download: http://api.myhost.ru:80/ESP/index.htm
connect to: api.myhost.ru
DNS record found: api.myhost.ru = xxx.xxx.xxx.xxx
TcpConnection::connect port: 80, 0
OnConnected 3FFEB5D8
TCP connected
onReadyToSendData: 0
TCP connection send: 53 (53)
TcpClient request completed
onReadyToSendData: 3
TCP sent: 53
onReadyToSendData: 2
Header pos: 244
Server === nginx/1.6.2
Date === Sun, 05 Apr 2015 15:41:48 GMT
Content-Type === text/html
Content-Length === 12136
Connection === close
Last-Modified === Fri, 03 Apr 2015 11:45:52 GMT
ETag === "1d26caa-2f68-512d07d91dfe6"
Accept-Ranges === bytes
TCP received: 1420 bytes
onReadyToSendData: 1
TCP received: 1420 bytes
onReadyToSendData: 1
TCP received: 1420 bytes
onReadyToSendData: 1
onReadyToSendData: 3
onReadyToSendData: 3
onReadyToSendData: 3
TCP received: 1420 bytes
onReadyToSendData: 1
onReadyToSendData: 3
onReadyToSendData: 3
onReadyToSendData: 3
onReadyToSendData: 3
onReadyToSendData: 3
onReadyToSendData: 3
onReadyToSendData: 3
onReadyToSendData: 3
onReadyToSendData: 3
onReadyToSendData: 3
TCP received: 1420 bytes
onReadyToSendData: 1
onReadyToSendData: 3
onReadyToSendData: 3
TCP received: 1420 bytes
onReadyToSendData: 1
TCP received: 1420 bytes
onReadyToSendData: 1
TCP received: 1420 bytes
onReadyToSendData: 1
onReadyToSendData: 3
TCP received: 1024 bytes
onReadyToSendData: 1
TCP received: (null)
Download file len written: 12136, res^ 1
TCP connection closing
-TCP connection

Как итог,- модуль вновь уходит в ребут:
Код:
 ets Jan  8 2013,rst cause:4, boot mode:(1,0)

wdt reset
Может проблема всё-таки в lwip?
 
Последнее редактирование:

anakod

Moderator
Команда форума
Таймауты - это не так страшно. Браузер иногда открывает упреждающие соединения с целью оптимизации будущих запросов, Sming их автоматически закрывает для оптимизации памяти по таймауту.
Главный вопрос - повторяется ли на JSON проблема с перезагрузкой/зависанием?
 

anakod

Moderator
Команда форума
Нужен Лог этого момента. Может даже несколько логов для того чтобы выявить закономерность/последовательность запросов которые приводят к такому результату.
 

Dr. Morg

New member
@anakod, добавил счётчик запросов, чтобы посмотреть где вылетит. Полный лог от старта до ребута во вложении.
Хотел добавить ещё вывод времени в консоль, но прошивка не компилируется с кодом:
Код:
time_t now = time(0);
char* dt = ctime(&now);
Serial.println(String(dt));
AR out/build/app_app.a
LD out/build/app.out
c:/espressif/xtensa-lx106-elf/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/bin/ld.exe: out/build/app.out section `.text' will not fit in region `iram1_0_seg'
c:/espressif/xtensa-lx106-elf/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/lib\libc.a(lib_a-time.o):(.literal+0x0): undefined reference to `_gettimeofday_r'
c:/espressif/xtensa-lx106-elf/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/lib\libc.a(lib_a-time.o): In function `time':
d:\Neo\Project\ESP8266\DevKit\build\compiler\dl\esp-newlib\build\xtensa-lx106-elf\newlib\libc\time/../../../../../newlib/libc/time/time.c:46: undefined reference to `_gettimeofday_r'
c:/espressif/xtensa-lx106-elf/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/lib\libc.a(lib_a-freer.o):(.literal+0x14): undefined reference to `_sbrk_r'
c:/espressif/xtensa-lx106-elf/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/lib\libc.a(lib_a-freer.o): In function `_malloc_trim_r':
d:\Neo\Project\ESP8266\DevKit\build\compiler\dl\esp-newlib\build\xtensa-lx106-elf\newlib\libc\stdlib/../../../../../newlib/libc/stdlib/mallocr.c:3325: undefined reference to `_sbrk_r'
d:\Neo\Project\ESP8266\DevKit\build\compiler\dl\esp-newlib\build\xtensa-lx106-elf\newlib\libc\stdlib/../../../../../newlib/libc/stdlib/mallocr.c:3332: undefined reference to `_sbrk_r'
d:\Neo\Project\ESP8266\DevKit\build\compiler\dl\esp-newlib\build\xtensa-lx106-elf\newlib\libc\stdlib/../../../../../newlib/libc/stdlib/mallocr.c:3340: undefined reference to `_sbrk_r'
c:/espressif/xtensa-lx106-elf/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/lib\libc.a(lib_a-mallocr.o): In function `malloc_extend_top':
d:\Neo\Project\ESP8266\DevKit\build\compiler\dl\esp-newlib\build\xtensa-lx106-elf\newlib\libc\stdlib/../../../../../newlib/libc/stdlib/mallocr.c:2165: undefined reference to `_sbrk_r'
c:/espressif/xtensa-lx106-elf/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/lib\libc.a(lib_a-mallocr.o):d:\Neo\Project\ESP8266\DevKit\build\compiler\dl\esp-newlib\build\xtensa-lx106-elf\newlib\libc\stdlib/../../../../../newlib/libc/stdlib/mallocr.c:2202: more undefined references to `_sbrk_r' follow
collect2.exe: error: ld returned 1 exit status
C:/Sming-master/HttpServer_Bootstrap/Makefile:225: recipe for target 'out/build/app.out' failed
mingw32-make.exe: *** [out/build/app.out] Error 1

21:05:49 Build Finished (took 52s.756ms)
 

Вложения

anakod

Moderator
Команда форума
В Sming есть встроенный тип DateTime, можете попробовать его.
 

anakod

Moderator
Команда форума
Т.е. Sming обработал 595 запросов а затем перезагрузился? Через сколько это произошло, не те ли самые ~15 минут о которых писали в соседней ветке?
 

Dr. Morg

New member
@anakod, DateTime использует тот же time.h и компиляция валится с теми же ошибками...
Время, к сожалению, не засечь, так как функции времени не работают, а непрерывно наблюдать за процессом можно с ума сойти :)
Про 15 минут сейчас почитаю, не попадалось мне такой информации.
 
Сверху Снизу