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

Нужна помощь DNS server LUA

kobb500

New member
Здравствуйте, пытаюсь сделать WEB сервер на NODEMCU LUA, хочу чтобы при подключении к устройству в режиме точки доступа можно было попадать на WEB страницу с любого адреса.
Прошивку скомпилировал и взял отсюда: NodeMCU custom builds
Нашел тему, где обсуждается это с примерами: AP + captive portal? · Issue #59 · nodemcu/nodemcu-firmware
Ну в общем перепробовал оттуда все варианты, когда начинаю использовать в своём коде DNS сервер, то при подключении клиента к моему устройства сразу же возникает ошибка и перезагрузка.
Кто-нибудь использовал локальный DNS сервер?
Буду рад пообщаться, кто уже реализовал в своем проекте это.
У меня пока не получается.
 

kobb500

New member
Привет ребята, не думал, что так быстро найдется решение, как оказалось, китайцы обновили свой проект и убрали оттуда что-то, я не стал разбираться, ошибка указывала все время на одну и ту-же строку в разных кодах.
В общем тему можно закрывать, но если интересно, то можно продолжить и поделится опытом.
Вот мои коды программы:
Код:
function startup()
    if file.open("init.lua") == nil then
      print("init.lua deleted")
    else
      print("Running")
      file.close("init.lua")
      dofile("dns.lua")
      dofile("web.lua")

    end
end

--init.lua
print("set up wifi mode")

wifi.setmode(wifi.SOFTAP)
--wifi.setphymode(wifi.PHYMODE_B)

cfg={}
cfg.ssid="NODEMCU"
cfg.pwd="12345678"
cfg.auth=wifi.WPA2_PSK
cfg.save=false
wifi.ap.config(cfg)

local mytimer = tmr.create()
mytimer:register(1000, tmr.ALARM_SINGLE, function()
    if wifi.ap.getip()== nil then
        print("IP unavaiable, Waiting...")
    else
        mytimer:stop()
        print("Config done, IP is "..wifi.ap.getip())
        print("You have 5 seconds to abort Startup")
        print("Waiting...")
        local mytimer1 = tmr.create()
        mytimer1:register(5000, tmr.ALARM_SINGLE,startup)
        mytimer1:start()
      
    end
end)
mytimer:start()

Код:
print("start DNS");
local dns_ip = "\192\168\4\1";

local s = net.createUDPSocket();
s:on("receive", function(con, req, port, ip)
    local ix = 13
    while req:byte(ix) > 0  do
        ix = ix + 1 + req:byte(ix)
    end

    if "\0\1" == req:sub(ix + 1, ix + 2) then
        local id, nr, query, check, class = struct.unpack("c2xxc2xxxxxxc"..(ix-12).."i2c2", req)
        if id then
            con:send(port, ip, id .. "\129\128" .. nr .. "\0\1\0\0\0\0" .. query .. "\0\1" ..
                                class .. "\192\12\0\1" .. class .. "\0\0\0\218\0\4" .. dns_ip)
        end
    end
end)

s:on("sent", function(con)
    con:close()
    con:listen(53)
end)

s:listen(53)

return s

Код:
print("start web")
srv=net.createServer(net.TCP)
srv:listen(80,function(conn)
  conn:on("receive",function(conn,payload)
    print(payload)
    conn:send("<h1> Hello, NodeMCU!!! </h1>")
  end)
  conn:on("sent",function(conn) conn:close() end)
end)
Как видно из кода, это всего лишь заготовка для какого-нибудь веб проекта на ESP8266
Надеюсь кому-то это сэкономит время.
 
Сверху Снизу