我正在使用NodeMCU 0.9.6和Adafruit HUZZAH ESP8266。
以下代码定义了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",...)
模块,并在尝试使用在调用语句之外定义的函数时得到相同的错误结果。
答案 0 :(得分:0)
您尝试做的事与您的固件提供的内容之间存在根本的不匹配。不要使用那些旧的0.9.x NodeMCU二进制文件。它们基于旧的Espressif SDK,它们不再被维护,而且它们充满了错误。
HTTP客户端模块只存在了几个月。它目前仅在NodeMCU dev
分支中可用,即使在当前master
中也不可用。成功秘诀:
dev
分支构建固件(默认情况下已关闭):http://nodemcu.readthedocs.org/en/dev/en/build/ 如果你决定坚持使用网络模块而不是使用HTTP,那么在文档中就有一个小例子:http://nodemcu.readthedocs.org/en/dev/en/modules/net/#netsocketsend