NodeMCU,一个简单的GET请求是一个挑战

时间:2017-07-28 05:31:47

标签: http lua get nodemcu


我有一个项目正在使用两个NodeMCU和LUA。一个NodeMCU(服务器)托管一个简单的Web服务器,它响应特定的URL参数。例如,我在我的浏览器中转到:http://192.168.1.179/?pin=ON1,它的指示灯亮起等。我想通过按下按钮重新创建另一个NodeMCU(客户端)。阻止我的唯一部分是这个HTTP GET请求。

首先,我想简单地使用http模块..但模块不存在于最新的固件版本中。我不知道为什么会这样?我没有建立最新的 - 最新的。 2版本差异...我已提交自定义版本。

  

需要(' HTTP')
  stdin:1:模块' http'找不到:
  没有字段package.preload [' http']
  没有档案' http.lc'
  没有文件' http.lua'

显然还有其他更老的方法:

    conn=net.createConnection(net.TCP, false) 
    conn:on("receive", function(conn, pl) print(pl) end)
    conn:connect(80,"192.168.1.179")
    conn:send("GET /?pin=ON1 HTTP/1.1\r\nConnection: keep-alive\r\nAccept: */*\r\n\r\n")

我一直在努力让它发挥作用。 DNS以完整路径失败。原样,它只为输出部分输出0。请注意,这是一个本地服务器,它的地址是直接指定的。我从路由器获取DHCP,并且我尝试了静态IP。我不知所措,不知道还能做些什么。这也是完成这个项目的最后一步,所以它让我疯了!任何帮助,将不胜感激。我应该注意到我丢失了服务器的脚本,所以我无法引用它。虽然它有效。 X_X'

2 个答案:

答案 0 :(得分:1)

根据https://github.com/nodemcu/nodemcu-firmware#releases,您无法再下载最近的二进制文件(就像> 2y一样)。最简单的方法是转到https://nodemcu-build.com/并为您构建二进制文件。确保选择HTTP模块。

但请注意,HTTP模块是HTTP 客户端

至于使用此HTTP模块发出简单的GET请求,我建议您查看https://nodemcu.readthedocs.io/en/latest/en/modules/http/#httpget

http.get("http://httpbin.org/get?paul=muller", nil, function(code, data)
    if (code < 0) then
      print("HTTP request failed")
    else
      print(code, data)
    end
  end)

这产生了这样的结果:

200 {
  "args": {
    "paul": "muller"
  }, 
  "headers": {
    "Connection": "close", 
    "Host": "httpbin.org", 
    "User-Agent": "ESP8266"
  }, 
  "origin": "xxx.xxx.xxx.xxx", 
  "url": "http://httpbin.org/get?paul=muller"
}

要构建服务器,您需要net模块和net.createServer(net.TCP)。我们在https://nodemcu.readthedocs.io/en/latest/en/modules/net/#example_6处有一些示例。

我建议不要构建自己的服务器,而是使用https://github.com/marcoskirsch/nodemcu-httpserver/代替琐碎项目以外的任何内容。

答案 1 :(得分:-1)

使用Arduino ESP8266WiFi&amp; amp; ESP8266HTTPClient库。我打算将此标记解决,因为我拒绝再处理LUA http选项了。