Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

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

Тема в разделе "Общие вопросы по esp8266", создана пользователем kobb500, 7 июл 2019.

Метки:
  1. kobb500

    kobb500 Новичок

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

    kobb500 Новичок

    Сообщения:
    10
    Симпатии:
    0
    Привет ребята, не думал, что так быстро найдется решение, как оказалось, китайцы обновили свой проект и убрали оттуда что-то, я не стал разбираться, ошибка указывала все время на одну и ту-же строку в разных кодах.
    В общем тему можно закрывать, но если интересно, то можно продолжить и поделится опытом.
    Вот мои коды программы:
    init.lua (раскрыть)

    Код (Lua):
    1. function startup()
    2.     if file.open("init.lua") == nil then
    3.       print("init.lua deleted")
    4.     else
    5.       print("Running")
    6.       file.close("init.lua")
    7.       dofile("dns.lua")
    8.       dofile("web.lua")
    9.  
    10.     end
    11. end
    12.  
    13. --init.lua
    14. print("set up wifi mode")
    15.  
    16. wifi.setmode(wifi.SOFTAP)
    17. --wifi.setphymode(wifi.PHYMODE_B)
    18.  
    19. cfg={}
    20. cfg.ssid="NODEMCU"
    21. cfg.pwd="12345678"
    22. cfg.auth=wifi.WPA2_PSK
    23. cfg.save=false
    24. wifi.ap.config(cfg)
    25.  
    26. local mytimer = tmr.create()
    27. mytimer:register(1000, tmr.ALARM_SINGLE, function()
    28.     if wifi.ap.getip()== nil then
    29.         print("IP unavaiable, Waiting...")
    30.     else
    31.         mytimer:stop()
    32.         print("Config done, IP is "..wifi.ap.getip())
    33.         print("You have 5 seconds to abort Startup")
    34.         print("Waiting...")
    35.         local mytimer1 = tmr.create()
    36.         mytimer1:register(5000, tmr.ALARM_SINGLE,startup)
    37.         mytimer1:start()
    38.      
    39.     end
    40. end)
    41. mytimer:start()


    dns.lua (раскрыть)

    Код (Lua):
    1. print("start DNS");
    2. local dns_ip = "\192\168\4\1";
    3.  
    4. local s = net.createUDPSocket();
    5. s:on("receive", function(con, req, port, ip)
    6.     local ix = 13
    7.     while req:byte(ix) > 0  do
    8.         ix = ix + 1 + req:byte(ix)
    9.     end
    10.  
    11.     if "\0\1" == req:sub(ix + 1, ix + 2) then
    12.         local id, nr, query, check, class = struct.unpack("c2xxc2xxxxxxc"..(ix-12).."i2c2", req)
    13.         if id then
    14.             con:send(port, ip, id .. "\129\128" .. nr .. "\0\1\0\0\0\0" .. query .. "\0\1" ..
    15.                                 class .. "\192\12\0\1" .. class .. "\0\0\0\218\0\4" .. dns_ip)
    16.         end
    17.     end
    18. end)
    19.  
    20. s:on("sent", function(con)
    21.     con:close()
    22.     con:listen(53)
    23. end)
    24.  
    25. s:listen(53)
    26.  
    27. return s


    web.lua (раскрыть)

    Код (Lua):
    1. print("start web")
    2. srv=net.createServer(net.TCP)
    3. srv:listen(80,function(conn)
    4.   conn:on("receive",function(conn,payload)
    5.     print(payload)
    6.     conn:send("<h1> Hello, NodeMCU!!! </h1>")
    7.   end)
    8.   conn:on("sent",function(conn) conn:close() end)
    9. end)

    Как видно из кода, это всего лишь заготовка для какого-нибудь веб проекта на ESP8266
    Надеюсь кому-то это сэкономит время.
     

Поделиться этой страницей