【问题标题】:NodeMCU, a simple GET request is quite the challengeNodeMCU,一个简单的 GET 请求是相当具有挑战性的
【发布时间】:2018-01-04 01:16:30
【问题描述】:


我有一个使用两个 NodeMCU 和 LUA 的项目正在进行。一个 NodeMCU(服务器)托管一个简单的 Web 服务器,它对特定的 URL 参数做出反应。例如,我在浏览器中访问:http://192.168.1.179/?pin=ON1,它的 LED 灯会亮起等。我想通过按下按钮重新创建另一个 NodeMCU(客户端)来执行此操作。唯一阻碍我的是这个 HTTP GET 请求。

对于初学者,我想简单地使用 http 模块 .. 但该模块不存在于可用的最新固件版本中。我不知道这是为什么?我不准备构建最新的 - 最新的。 2 版本差异...我已提交自定义版本。

要求('http')
标准输入: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'

【问题讨论】:

    标签: http lua get nodemcu


    【解决方案1】:

    根据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/ 代替琐碎项目之外的任何事情。

    【讨论】:

    • 许多这些方面都在原始帖子中得到了解决。只是背景故事。我只需要使用 URL PARAMETERS 发出 GET 请求。我已经收到了我使用 http 构建的版本。现在我得到:HTTP 客户端:httpbin.org 代码的 DNS 失败:-1 数据:nil HTTP 请求失败。我无法 ping 客户端 NodeMCU,就像我可以 ping 服务器 NodeMCU。
    • 感谢您更新您的答案。我很早就尝试过这种简单的方法,因为它很简单。仅针对问题信息,我收到请求的 LUA 选项的 -1 错误。该请求将失败,我当时对错误一无所知。在 Arduino 中,我也收到 -1 错误,但请求成功。也许这是一个糟糕的服务器实现,或者服务器在超时之前没有响应 http 状态代码。
    【解决方案2】:

    使用 Arduino ESP8266WiFi 和 ESP8266HTTPClient 库,系统运行良好。我将把它标记为已解决,因为我不再处理 LUA http 选项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-12
      • 1970-01-01
      • 2016-02-06
      • 2020-06-05
      相关资源
      最近更新 更多