通过董事会

时间:2016-09-17 06:41:48

标签: http lua arduino esp8266 nodemcu

我正在使用NodeMCU(ESP8266)对机器人进行编码,并希望对其进行远程控制。我目前的解决方案是连接到附近的路由器,互联网并创建TCP HTTP服务器。数据通过HTTP请求从移动设备(远程)流式传输到NodeMCU(机器人)。通过带有HTML / CSS / JavaScript的浏览器将遥控器加载到移动设备上。

我想要的是NodeMCU创建自己的热点,因为:

  • 不需要路由器
  • 连接更直接

我想要相同的TCP HTTP解决方案,但我不知道如何通过自定义热点提供网页。

这是我的代码:

-- Connect to router
wifi.sta.config("ssid","password")
wifi.sta.connect()

-- Code for waiting for connection

-- Create server
srv = net.createServer(net.TCP) 
srv:listen(80,function(conn)    
conn:on("receive",function(conn,payload) 
    for line in string.gmatch(payload,'[^\r\n]+') do
        s = string.find(line, "GET /&")
        -- If query is there, control robot
        if s ~= nil then
            -- Do stuff with query
            break;
        -- If no query, serve webpage
        else
            file.open("index.html", "r")
            while true do
                s = file.read(1460)
                if s == nil then
                    break
                end
                conn:send(s)
            end
            file.close()
        end
        break
    end
    conn:on("sent", function(conn) conn:close() end)
end)
end)

创建自定义热点:

wifi.setmode(wifi.STATIONAP)
cfg={}
cfg.ssid="custom_ssid"
cfg.pwd="custom_password"
wifi.ap.config(cfg)

那么如何制作它以便移动设备可以访问服务器?如何获取/设置服务器的IP?基本上,我只是需要它才能工作。谢谢!

1 个答案:

答案 0 :(得分:1)

不确定我是否完全明白,但我相信你真的很亲近。请查看http://nodemcu.readthedocs.io/en/latest/en/modules/wifi/#wifiap-module上的AP功能文档。

如您所述,

wifi.ap.config(cfg)设置了SSID和密码。然后,您的客户端通过加入网络连接到此AP。

如果您再打印wifi.ap.getip(),则默认情况下您会看到设备的IP地址为192.168.1.4。因此,对于加入此网络的客户端,除非您明确设置自定义IP,否则您的服务器可以在192.168.1.4:80访问。

然而,数据的发送似乎已经破裂。您有多个conn:send(s)(在循环中),但您还有conn:on("sent", function(conn) conn:close() end),这意味着连接将在第一个 conn:send之后关闭!请查看http://nodemcu.readthedocs.io/en/latest/en/modules/net/#netsocketsend上的文档,了解如何正确执行此操作。