我有一个项目正在进行,使用两个 NodeMCU 和 LUA。一个 NodeMCU(服务器)托管一个简单的 Web 服务器,该服务器对特定的 URL 参数使用react。例如,我去: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'
最佳答案
根据 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/而不是琐碎项目以外的任何事情。
关于http - NodeMCU,一个简单的 GET 请求是一个很大的挑战,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45365526/