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

Решено Nodemcu запуск сервера на точке доступа

draft3

New member
На Lua в режиме станции запускал сервер и подключался к нему.
Пробую переделать что бы на точке доступа запускался сервер но не получается...
Код:
Код:
-- вводим имя сети и пароль сюда
ssid,pass = "xxxx","12345678";   


 
wifi.setmode(wifi.STATIONAP) 

cfg={}
     cfg.ssid="BMW"
     cfg.pwd="123456789"
wifi.ap.config(cfg)


print('IP:',wifi.sta.getip());
--print('MAC:',wifi.sta.getmac());

led1 = 3
led2 = 4
gpio.mode(led1, gpio.OUTPUT)
gpio.mode(led2, gpio.OUTPUT)
restart=0;
gpio.write(led1, gpio.LOW);
gpio.write(led2, gpio.LOW);


t=0
tmr.alarm(0,1000, 1, function() t=t+1 if t>999 then t=0 end end)

if srv~=nil then
  srv:close()
end
srv=net.createServer(net.TCP, 1000)
srv:listen(80,function(conn)
    conn:on("receive",function(client,request)
    -- парсинг для отслеживания нажатий кнопок _GET
            local buf = "";
        local _, _, method, path, vars = string.find(request, "([A-Z]+) (.+)?(.+) HTTP");
        if(method == nil)then
            _, _, method, path = string.find(request, "([A-Z]+) (.+) HTTP");
        end
        local _GET = {}
        if (vars ~= nil)then
            for k, v in string.gmatch(vars, "(%w+)=(%w+)&*") do
                _GET[k] = v
            end
        end
    -- это начало веб сайта
       -- в начале ставим <html><body>, в конце каждой строки знак \
   -- в конце последней строки не ставим знак \, а </body></html>
    conn:send('HTTP/1.1 150 OK\r\nConnection: keep-alive\r\nCache-Control: private, no-store\r\n\r\n\
   <!DOCTYPE HTML>\
   <html><body bgcolor="#6699ff"><h1>&nbsp;</h1>\
<h1 style="text-align: center;">ESP8266 ESP-07</h1>\
<p align="center"> &nbsp; <a href=\"?pin=ON2\"><button style=\"background: #ff3300; color: White; border-radius: 50px; font-size: 15px;\"> Off</button></a>&nbsp;<a href=\"?pin=OFF2\">\
<button style=\"background: #B0CE3A; color: White; border-radius: 50px; font-size: 15px;\"> On</button></a></p>\
<hr>\
<address style="text-align: center;">Made by Taras</address></body></html>')
    -- это конец
    -- теперь опрос нажатых кнопок
    print('IP:',wifi.sta.getip());
        local _on,_off = "",""
        if(_GET.pin == "ON1")then
              gpio.write(led1, gpio.HIGH);
        elseif(_GET.pin == "OFF1")then
              gpio.write(led1, gpio.LOW);
        elseif(_GET.pin == "ON2")then
              gpio.write(led2, gpio.HIGH);
        elseif(_GET.pin == "OFF2")then
              gpio.write(led2, gpio.LOW);
        end
      
 
            
    conn:on("sent",function(conn) conn:close() end)
    collectgarbage();

  
    end)
  
end)
К точке доступа подключится могу. Но я так понимаю что сервер не запускается... По крайней мере print('IP:',wifi.sta.getip()); пишет nill
 
Последнее редактирование:

draft3

New member
Почему для начала не попробовать просто
wifi.setmode(wifi.STATION) ?
Так в режиме станции у меня все работало:
Код:
-- вводим имя сети и пароль сюда
ssid,pass = "xxxxxx","xxxxxxxx";   

if (file.open('wificonf') == true)then
   ssid = string.gsub(file.readline(), "\n", "");
   pass = string.gsub(file.readline(), "\n", "");
   file.close(); 
end
 
wifi.setmode(wifi.STATION) 
wifi.sta.config(ssid,pass)
wifi.sta.autoconnect(0);
print('IP:',wifi.sta.getip());
--print('MAC:',wifi.sta.getmac());

led1 = 3
led2 = 4
gpio.mode(led1, gpio.OUTPUT)
gpio.mode(led2, gpio.OUTPUT)
restart=0;
gpio.write(led1, gpio.LOW);
gpio.write(led2, gpio.LOW);


t=0
tmr.alarm(0,1000, 1, function() t=t+1 if t>999 then t=0 end end)

if srv~=nil then
  srv:close()
end
srv=net.createServer(net.TCP, 1000)
srv:listen(80,function(conn)
    conn:on("receive",function(client,request)
    -- парсинг для отслеживания нажатий кнопок _GET
            local buf = "";
        local _, _, method, path, vars = string.find(request, "([A-Z]+) (.+)?(.+) HTTP");
        if(method == nil)then
            _, _, method, path = string.find(request, "([A-Z]+) (.+) HTTP");
        end
        local _GET = {}
        if (vars ~= nil)then
            for k, v in string.gmatch(vars, "(%w+)=(%w+)&*") do
                _GET[k] = v
            end
        end
    -- это начало веб сайта
       -- в начале ставим <html><body>, в конце каждой строки знак \
   -- в конце последней строки не ставим знак \, а </body></html>
    conn:send('HTTP/1.1 150 OK\r\nConnection: keep-alive\r\nCache-Control: private, no-store\r\n\r\n\
   <!DOCTYPE HTML>\
   <html><body bgcolor="#6699ff"><h1>&nbsp;</h1>\
<h1 style="text-align: center;">ESP8266 ESP-07</h1>\
<p align="center"> &nbsp; <a href=\"?pin=ON2\"><button style=\"background: #ff3300; color: White; border-radius: 50px; font-size: 15px;\"> Off</button></a>&nbsp;<a href=\"?pin=OFF2\">\
<button style=\"background: #B0CE3A; color: White; border-radius: 50px; font-size: 15px;\"> On</button></a></p>\
<hr>\
<address style="text-align: center;">Made by Taras</address></body></html>')
    -- это конец
    -- теперь опрос нажатых кнопок
        local _on,_off = "",""
        if(_GET.pin == "ON1")then
              gpio.write(led1, gpio.HIGH);
        elseif(_GET.pin == "OFF1")then
              gpio.write(led1, gpio.LOW);
        elseif(_GET.pin == "ON2")then
              gpio.write(led2, gpio.HIGH);
        elseif(_GET.pin == "OFF2")then
              gpio.write(led2, gpio.LOW);
        end
      
 
            
    conn:on("sent",function(conn) conn:close() end)
    collectgarbage();

  
    end)
  
end)
 
Последнее редактирование:

draft3

New member
не у видел режима точки доступа.
В первом посте есть код:
Код:
wifi.setmode(wifi.STATIONAP)
cfg={}
cfg.ssid="BMW"
cfg.pwd="123456789"
wifi.ap.config(cfg)
...
srv=net.createServer(net.TCP, 1000)
srv:listen(80,function(conn)
Точка доступа запускается но сервер на ней не запускается вроде...
Я правильно понимаю что для запуска сервера нужно использовать режим станции и точки доступа одновременно и потом уже запускать сервер?
 
Последнее редактирование:

NeoroN

Member
так то надо wifi.SOFTAP

назначение и настрока режима wifi.STATIONAP вообще толком не описанна
 

fandy

Member
Все должно работать и в совмещенном режиме.
Сервер должен запускаться. Куда он денется?
wifi.sta.getip() показывает IP в режиме станции, но Вы в сеть ведь не входите? null и будет.
Если Вы под сервером имеете ввиду режим точки доступа, то Вам нужна wifi.ap.getip()
 

draft3

New member
@fandy Да, получается сервер запускался. Узнал ip с помощью wifi.ap.getip() и все заработало, страница отобразилась.
Спасибо всем большое!
В итоге получилось:
Код:
wifi.setmode(wifi.SOFTAP)  
cfg={}
     cfg.ssid="BMW"
     cfg.pwd="123456789"
wifi.ap.config(cfg)
print('IP:',wifi.ap.getip());--узнал адрес который набирать в браузере
...
srv=net.createServer(net.TCP, 1000)
srv:listen(80,function(conn)
...
С планшета подключаюсь к точке доступа BMW и захожу в браузере по адресу который показал wifi.ap.getip().
 
Последнее редактирование:
Сверху Снизу