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

вызов srv:listen(80, function(conn) дает ошибку - out of memory

vaz_mz

New member
Здравствуйте уважаемые.

пытался поднять небольшой сервер на ESP-01:
Код:
do

srv = net.createServer(net.TCP)
function receiver(sck, data)
    print(data)
    sck:send("<h1> Hello, NodeMCU!!! </h1>")
    sck:on("sent", function()
        sck:close()
    end)
end
srv:listen(80, function(conn)
  conn:on("receive", receiver)
end)
end
получаю вышеуказанную ошибку.

прошивка nodemcu:
NodeMCU custom build by frightanic.com
branch: master
commit: 11592951b90707cdcb6d751876170bf4da82850d
SSL: false
modules: am2320,cron,enduser_setup,file,gpio,http,i2c,mdns,mqtt,net,node,tmr,uart,websocket,wifi
build created on 2019-02-11 16:19
powered by Lua 5.1.4 on SDK 2.2.1(6ab97e9)

в прошивке кроме этого кода ничего нет. ОЗУ 40 кб свободно. что я делаю не так?
 

vaz_mz

New member
заработало с добавлением следующих вызовов:
Код:
station_cfg={}
station_cfg.ssid=""
station_cfg.pwd=""
wifi.setmode(wifi.STATION);
wifi.sta.config(station_cfg);
wifi.sta.autoconnect(1);
tmr.alarm(0, 1000, 1, function()
    ip = wifi.sta.getip();
    if ip~=nil then
        print(ip);
        tmr.stop(0);
        --httpserver();
    else
        print("no connect");
    end
end)
странно что подключение к роутеру с только 4 раза проходит...

и ошибка out of memory никуда не исчезла, но - РАБОТАЕТ:-D
 

nikolz

Well-known member
совершенно верно, как это вы умудрились заметить?
так Вы же сами написали про это.
А скрипт либо выкладывайте полностью либо вообще не выкладывайте. Гадать никто не будет а читать мысли никто на этом форуме не умеет.
 

vaz_mz

New member
кроме вышеуказанного куска кода, ничего в прошивку не загружено. (остальное работает, и частями, и все вместе)
прошивка вылетала на строчке с вызовом:
srv:listen(80, function(conn)

после того как в коде оформил wifi станцию. код заработал, но тоже кривовасто.

меня как программера бесит отсутствие отладки. даже сборка прошивки в режиме отладки, практически ничего не дает.

вот что значило out_of_memory в моем случае? только когда все заработало стало понятно что вызов ушел куда-то в подпространство. я понимаю что ошибки детские, но как их диагностировать?
 

nikolz

Well-known member
кроме вышеуказанного куска кода, ничего в прошивку не загружено. (остальное работает, и частями, и все вместе)
прошивка вылетала на строчке с вызовом:
srv:listen(80, function(conn)

после того как в коде оформил wifi станцию. код заработал, но тоже кривовасто.

меня как программера бесит отсутствие отладки. даже сборка прошивки в режиме отладки, практически ничего не дает.

вот что значило out_of_memory в моем случае? только когда все заработало стало понятно что вызов ушел куда-то в подпространство. я понимаю что ошибки детские, но как их диагностировать?
Вы пишите на луа. верно?
Луа знаете?
документацию эту смотрели?
nodemcu/nodemcu-firmware
Overview - NodeMCU Documentation
там есть примеры.
 

vaz_mz

New member
читал. но там даже на заглавной странице пример неправильный для текущей(2.2.1) версии прошивки. там:
wifi.sta.config("ххх", "ххх") -- а это работает только в 1.5.2 версии

а должно быть:
station_cfg={}
station_cfg.ssid="ххх"
station_cfg.pwd="ххх"
wifi.sta.config(station_cfg);

и по отладке ничего внятного не нашел. вот как к примеру проверить существует ли мой вызов функции?

не подавилась ли она аргументом?

есть ли в этой версии прошивки аргумент который я передаю или синтаксис вызова поменялся?
 

nikolz

Well-known member
читал. но там даже на заглавной странице пример неправильный для текущей(2.2.1) версии прошивки. там:
wifi.sta.config("ххх", "ххх") -- а это работает только в 1.5.2 версии
а должно быть:
station_cfg={}
station_cfg.ssid="ххх"
station_cfg.pwd="ххх"
wifi.sta.config(station_cfg);
и по отладке ничего внятного не нашел. вот как к примеру проверить существует ли мой вызов функции?
не подавилась ли она аргументом?
есть ли в этой версии прошивки аргумент который я передаю или синтаксис вызова поменялся?
Там Все правильно, так как написано что это для версии 1.5.4 .
вообще-то версия SDK не влияет на вызов функций в луа.
Версия SDK влияет на процесс сборки VMLua.
Возможно Вы взяли самопальную сборку в которой функции переделаны
-------------------------------------
Поэтому ,есть два варианта:
1) поставить сборку от nodemcu и брать примеры из ее исходников
nodemcu/nodemcu-firmware.
2) Взять документацию (исходники) на ту версию , которую вы поставили.
--------------
То как Вы написали - это обращение в ардуине.
-----------------------
 

nikolz

Well-known member
что же касается отладки, то я Вас спросил
Вы знаете луа?
Если нет, то изучите и узнаете как и что отлаживать.
 

vaz_mz

New member
Если нет, то изучите и узнаете как и что отлаживать.
хорошо. в нашем случае(прошивка nodemcu)
вызов библиотечной функции это вызов кода на lua или кода
на Си?

какую оболочку использовать pcall или lua_pcall
и как в них обернуть к примеру вызов:

model, version, serial=am2320.setup()

или вызов

i2c.setup(id, sda, scl, i2c.SLOW)??
 

vaz_mz

New member
2) Взять документацию (исходники) на ту версию , которую вы поставили.
--------------
То как Вы написали - это обращение в ардуине.
-----------------------
в документации нет рабочих примеров по работе с am2320. тот код что есть в виде примеров в описании функций - не работает.

и указанный мной код относительно синтаксиса вызова wifi станции, взят из примеров nodemcu а не ардуины))
 

vaz_mz

New member
так. тема закрыта. был дохлый датчик.

но вопрос с отладкой для меня открытый. может знает кто что почитать по отладке кроме иерусалимски?
 
Сверху Снизу