2016-04-18 5 views
0

私はAdafruit HUZZAH ESP8266でNodeMCU 0.9.6を使用しています。NodeMCU外部コールバック関数がエラーを生成します

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)) 

2番目の形式が機能せず、エラーが発生します。

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.9.x NodeMCUバイナリは使用しないでください。彼らは古いEspressif SDKに基づいており、もはや維持されておらず、バグがいっぱいです。

HTTPクライアントモジュールは、数ヶ月間しか使用されていません。現在のところ、NodeMCUのdevブランチ、つまり現在のmasterでしか利用できません。成功のためのレシピ:

あなたがネットモジュールに固執するのではなくHTTPを使用してすることを決定した場合、小さな例がドキュメントにあります:http://nodemcu.readthedocs.org/en/dev/en/modules/net/#netsocketsend

+0

迅速な対応に感謝します。私はあなたの提案を撃つでしょう! – Jonathan

関連する問題