0

メッセージをリッスンするサーバーを作成する単純な Lua スクリプトがあります。メッセージが「led1」または「led2」の場合、スクリプトは 2 つの GPIO の出力を反転します。問題は、スクリプトが 2 ~ 3 回しか機能しないことです。実際のスクリプトで戻ってきます。

編集 1: サーバーのスクリプトは次のとおりです (スクリプトを簡素化するために GPIO 部分が削除されました)。

wifi.setmode(1)
wifi.sta.config("my_router","12345678")
tmr.delay(3000000)
print(wifi.sta.getip())

s=net.createServer(net.TCP)
s:listen(433,function(conn)
    conn:on("receive",function(conn,payload)
        print(payload)
    conn:send("received")
    end)
    conn:on("sent",function(conn) conn:close() end)
end)

結果は次のとおりです(「led1」をサーバーに3回以上送信した場合):

>192.168.0.117 255.255.255.0 192.168.0.1
>led1
>led1
>led1

この後、クライアントは「接続がタイムアウトしました」と言いますが、ESP8266 は引き続き動作します (少なくともシリアル回線)。

4

2 に答える 2

1

3 秒以内に Wi - tmr.delayFi スタックが台無しになります。a を使用してtmr.alarm、メインの処理を中断します。この例は私にとってはうまくいきました:

do
  local srv = net.createServer(net.TCP)
    srv:listen(8888, function(sk)
      sk:on("receive", function(sk, rec)
      print("Received ", rec)
      sk:send("echo "..rec, sk.close)
    end)
  end)
  function close() srv:close() end
end

send の最後の引数は、ソケットを閉じるための完了コールバックです。srvまた、Lua レジスター内のリスナー関数への参照を解放するために、 を閉じる必要があります。

devnodeMCU クラウド ビルダーからの最新のビルドを使用していることを確認してください

于 2016-04-14T16:16:59.230 に答える