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

nodemcu-httpserver

Загрузил от сюда файлы https://github.com/Hoksmur/uLuaNode для запуска сервера,есть удобная настройка пароля и ssid. Вообщем загрузил все,веб сервер запустился,а вот страничка с настройками сети,как у автора не отображаются.Помогите,где может быть ошибка.Не могу я как то вникнуть в этот LUA.

Вот фото автора
 
Последнее редактирование:

Victor

Administrator
Команда форума
проверял прошивки старые тоже.Дело в том что мне нужен рабочий какой то пример,где я мог бы уже чего добавлять,чего убрать,да и изучать рабочий пример на много удобнее
 

Victor

Administrator
Команда форума
проверял прошивки старые тоже.Дело в том что мне нужен рабочий какой то пример,где я мог бы уже чего добавлять,чего убрать,да и изучать рабочий пример на много удобнее
У автора на гихабе написано
Now it is pre-pre-alpha, idea only
так что бросьте это, даже автор это бросил
 
Я всегда говорил себе что, чем разбираться в чужом коде,легче и быстрее самому написать все с нуля;)
 
Всем добрый день.Пытаюсь просканировать точки доступа,в ответ получаю nil.
Код:
<?lua
local scanresults = ""
function listap(t)
  res = "\n"
  for k,v in pairs(t) do
    res = res .. k .. " : " .. v .. "\n"
    scanresults = res
  end
  wifi.sta.getap(listap)
end    
?>

<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
</head>
<body>
<p><?lua print(scanresults)?></p>
</body>
</html>
файл pht,сервер нормально запускается.Подскажите,где допущена ошибка?
 
Последнее редактирование:

JustACat

Moderator
Команда форума
@Климатехник, эм, так а вы функцию listap объявили, но ни разу ее не вызвали в коде. Получается что в коде у вас объявляется переменная scanresults и далее по коду она так пустая и выводится (print)...
А, вижу, у вас вызов этой функции идет в ней же самой: wifi.sta.getap(listap) :)
Вам его бы перенести пониже на 1 строку:
Код:
<?lua
local scanresults = ""
function listap(t)
  res = "\n"
  for k,v in pairs(t) do
    res = res .. k .. " : " .. v .. "\n"
    scanresults = res
  end
end
wifi.sta.getap(listap)
?>
 
Попробовал,то же самое значение.Попробовал с обычным примером без работы сервера вот это
Код:
 function listap(t)
      for k,v in pairs(t) do
        print(k.." : "..v)
      end
    end
    wifi.sta.getap(listap)
скан получается,пробовал даже с одной переменной (k),чтобы выходило только одни ssid.
Пробую загнать в html страницу,результат nil.есть подозрения,что сервер не успевает обработать список ssid,и порт закрывается.Нужно как то указать серверу,что пока не получены данные,порт не закрывался бы
 

JustACat

Moderator
Команда форума
Климатехник, ну в любом случае на счет места расположения вызова - ошибка.
Далее, у меня такое предположение: вы пишете код, и он исполняется в таком же порядке.
Но судя по виду, функция wifi.sta.getap - не блокирующая. Это значит, что вызвав ее и передав ей ссылку на функцию callback код продолжает выполняться дальше.
И скорее всего у вас порядок получается такой:
1) объявили scanresults и положили в нее пусто
2) объявили функцию listap
3) вызвали сканирование сетей и ему приказали вызвать вашу listap по завершении сканирования
4) вывели пользователю весь html что у вас там далее расположен (включая то, что в scanresults - а в ней на этот момент пусто)
5) функция wifi.sta.getap отработала, вызвала вашу listap, которая положила в scanresults результаты, только они уже никому не нужны
Другими словами - некорректный порядок получается.
Вам нужно, чтобы у вас либо wifi.sta.getap работала в блокирующем режиме, либо выводить html уже из функции listap, чтобы это происходило только после получения точек, а не до.
 

Past

New member
Проблема только в том, что непонятно как передать в wifi.sta.getap сокет.
Можно попытаться периодически писать в глобальную переменную, что-то типа
Код:
aplist = nil

local function storelist(t)
 aplist = cjson.encode(t)
end

 wifi.sta.getap(storelist)
Но тогда высока вероятность, что размер aplist рано или поздно превысит node.heap()

Есть еще вариант :
Код:
local function storelist(t)
 file.remove("http/aplist.json")
 file.open("http/aplist.json","w")
 file.writeline(cjson.encode(t))
 file.close()]
end

 wifi.sta.getap(storelist)
Тут возникает проблема стабильности фс и количества циклов записи.
 

Victor

Administrator
Команда форума
Тут возникает проблема стабильности фс и количества циклов записи.
да нет по стабильности это нормальная ситуация, тем более что в ближайшем релизе NodeMCU будут устранены некоторые ошибки, возникающие при работе с файловой системой
а по количеству циклов нужно посчитать и прикинуть насколько это критино
 

nikolz

Well-known member
для информации (NODEMCU):
Время получения инфы с ESP на ком:
1) TCP клиент на ESP - 50 ms
2) UDP клиент на ESP - 24 ms
 

pvvx

Активный участник сообщества
да нет по стабильности это нормальная ситуация, тем более что в ближайшем релизе NodeMCU будут устранены некоторые ошибки, возникающие при работе с файловой системой
Давно пора. А то реализация примотанного туда spiffs у них ужасна. Никакой согласованности с реальными аппаратными характеристиками модуля (flash и самого ESP8266) и их возможностями.
 

nikolz

Well-known member
Вообще-то все работает стабильно,
если не будет утечки памяти.
Утечка памяти возникает при ошибках связи.
Устранять утечку в hhtp(tcp) сервере полностью не удается.
Даже при очень хорошей связи утекает примерно 1 k за 4 часа
Нет утечки (пока не обнаружил) при UDP.
 

nikolz

Well-known member
Скорость работы spiffs определяется алгоритмом работы с каталогами и файлами при ограниченном объеме свободной памяти.
Т е используют минимальный размер буфера .
Полагаю, что бы быстрее работала надо использовать другой софт вместо spiffs,
либо ждать когда разработчики spiffs ускорят ее работу.
 

nikolz

Well-known member
Исходники NodeMCU даны. Там всё и видно, что spiffs портирована кое как, впрочем как и lua.
Ну это-то понятно. Сейчас все так делают.
Но вот информация к размышлению:
dofile пустышки исполняется 0.18 сек.(размер пустышки 64 байта)
Это значит, что основное время ушло на поиск этого файла в файловой системе.
Т е эффективность работы с файлами не зависит от скорости железа а определяется в основном алгоритмом spiffs.
 
Пробовал подобные сервера,из проблем с heap,отказался от LUA совсем,если только температуру считать,или светиком поморгать и не более
 
Сверху Снизу