NodeMCU,一个简单的 GET 请求相当具有挑战性

我正在使用两个 NodeMCUs 和 LUA 来进行一个项目。一个 NodeMCU(服务器)托管一个简单的 Web 服务器以响应特定的URL参数。例如,我在浏览器中输入:http://192.168.1.179/?pin=ON1,它的LED灯就会点亮等等。我想在按下按钮时使用另一个 NodeMCU(客户端)来重新创建这个操作。唯一困扰我的部分是这个 HTTP GET 请求。

首先,我想简单地使用 http 模块,但这个模块不在最新的固件中。我不知道为什么?我无法构建最新的-最新版本。存在2个版本的差异...我已经提交了一个自定义的构建请求。

require('http')

stdin:1: module 'http' not found:

no field package.preload['http']

no file 'http.lc'

no file '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'

点赞
用户131929
用户131929

根据 https://github.com/nodemcu/nodemcu-firmware#releases,最近的固件二进制文件已经不能下载了(已有超过 2 年)。最简单的方法是前往 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/ 解决除了微不足道的项目外的任何问题。

2017-07-28 08:01:29
用户8084397
用户8084397

使用Arduino ESP8266WiFi&ESP8266HTTPClient库系统正常工作。我打算将其标记为“已解决”,仅因为我不想再处理Lua http选项了。

使用Arduino ESP8266WiFi&ESP8266HTTPClient库系统正常工作。我打算将其标记为“已解决”,仅因为我不想再处理Lua http选项了。
2017-07-28 18:13:47