【问题标题】:NodeMCU external callback function generates errorNodeMCU 外部回调函数产生错误
【发布时间】:2016-04-19 04:11:58
【问题描述】:

我正在使用带有 Adafruit HUZZAH ESP8266 的 NodeMCU 0.9.6。

以下代码在http.get 语句中定义了回调函数,它可以工作:

    http.get("http://192.168.2.38/ICmd.py?i=esp8266001", nil, function(code, data)
    if (code < 0) then
      print("***ICmd HTTP request failed")
    else
      print("***ICmd callback: ", code, data)
    end
  end)

以下代码将回调函数定义从http.get 语句中移动为独立函数:

function chkICmdResp(code, data)
    if (code < 0) then
      print("***ICmd HTTP request failed")
    else
      print("***ICmd callback: ", code, data)
    end
end

http.get("http://192.168.2.38/ICmd.py?i=esp8266001", nil, chkICmdResp(code, data) )

第二种格式不起作用,它会产生错误:

stdin:2: attempt to compare nil with number
stack traceback:
    stdin:2: in function 'chkICmdResponse'
    stdin:1: in main chunk

我做错了什么(NodeMCU noobie)?或者这是一个设计特性还是一个错误?

如果能够拥有一个可以从多个 http.get 调用中引用的回调函数,那就太好了。

注意:我也尝试使用 net.socket:on("receive",...) 模块进行此操作,并在尝试使用在调用语句之外定义的函数时得到相同的错误结果。

【问题讨论】:

    标签: esp8266 nodemcu


    【解决方案1】:

    您尝试执行的操作与您的固件提供的功能之间存在根本的不匹配。不要使用那些旧的 0.9.x NodeMCU 二进制文件。它们基于旧的 Espressif SDK,不再维护,并且充满了错误。

    HTTP 客户端模块才出现几个月。它目前仅在 NodeMCU dev 分支中可用,即甚至在当前的 master 中也不可用。成功秘诀:

    如果您决定坚持使用 net 模块而不是使用 HTTP,文档中有一个小示例:http://nodemcu.readthedocs.org/en/dev/en/modules/net/#netsocketsend

    【讨论】:

    • 感谢您的快速回复。我会试试你的建议!
    猜你喜欢
    • 1970-01-01
    • 2015-11-21
    • 1970-01-01
    • 2011-01-13
    • 1970-01-01
    • 2020-01-02
    • 1970-01-01
    • 2018-08-19
    • 2020-09-06
    相关资源
    最近更新 更多