• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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().
 
Последнее редактирование:
Сверху Снизу