在NodeMCU上通过板创建的访问点创建HTTP服务器

我正在编写一个机器人,使用NodeMCU(ESP8266),希望它能够远程控制。 我当前的解决方案是连接到附近的路由器,连接到互联网并创建TCP HTTP服务器。 数据通过HTTP请求从移动设备(远程)流到NodeMCU(机器人)。 远程加载到具有HTML/CSS/JavaScript的浏览器中的数据.

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

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

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

这是我的代码:

-- 连接到路由器
wifi.sta.config("ssid","password")
wifi.sta.connect()

-- 等待连接的代码

-- 创建服务器
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 s ~= nil then
            -- 使用查询执行操作
            break;
        -- 如果没有查询,请服务网页
        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地址? 基本上,我只需要它能够工作。谢谢!

点赞
用户131929
用户131929

我不确定我是否完全理解了,但我相信你很接近了解。请查阅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上的文档,了解如何正确地执行此操作的示例。

2016-09-17 08:30:10