我正在使用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?基本上,我只是需要它才能工作。谢谢!
答案 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上的文档,了解如何正确执行此操作。