• Система автоматизации с открытым исходным кодом на базе 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 минут сейчас почитаю, не попадалось мне такой информации.
 
Сверху Снизу