首页 文章

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

提问于
浏览
1

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

对于初学者,我提供了最新的固件版本 . 我不打算 Build 最新的 - 最新的 . 2版本的差异...我已经提交了自定义版本 .

require('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 回答

  • 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

    使用Arduino ESP8266WiFi和ESP8266HTTPClient库,系统运行正常 . 我打算将此标记解决,因为我拒绝再处理LUA http选项了 .

相关问题