2016-09-17 71 views
0

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

我想的却是为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

不知道我完全理解,但我相信你真的很接近。查看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的文档,了解如何正确执行此操作的示例。

+0

不确定你的意思,但我得到它的工作。采取upvote。 –