1

ESP8266 が再起動し続けます。

これは私のinit.luaです:

cfg={}
cfg.ssid="Sensor"
cfg.auth=AUTH_OPEN
wifi.ap.config(cfg)
wifi.setmode(wifi.STATION)
wifi.sta.getap(function(t)
    available_aps = "" 
    if t then 
        for k,v in pairs(t) do 
            ap = string.format("%-10s",k) 
            ap = trim(ap)
            available_aps = available_aps .. "<option value='".. ap .."'>".. ap .."</option>"
        end 
        setup_server(available_aps)
    end
end)

function setup_server(aps)
    wifi.setmode(wifi.SOFTAP)
    srv=net.createServer(net.TCP)
    srv:listen(80,function(client) 
        client:on("receive",function(client,request)
            wifi.sta.getap(function(t)
                available_aps = "" 
                if t then 
                    for k,v in pairs(t) do 
                        ap = string.format("%-10s",k) 
                        ap = trim(ap)
                        available_aps = available_aps .. "<option value='".. ap .."'>".. ap .."</option>"
                    end 
                end
            end)
            local buf = "";
            local _, _, method, path, vars = string.find(request, "([A-Z]+) (.+)?(.+) HTTP");
            if(method == nil)then
                _, _, method, path = string.find(request, "([A-Z]+) (.+) HTTP");
            end
            local _GET = {}
            if (vars ~= nil)then
                for k, v in string.gmatch(vars, "(%w+)=(%w+)&*") do
                    _GET[k] = v
                end
            end
            buf = "<html><body>"
            buf = buf .. "<h3>Config</h3><br>"
            buf = buf .. "<form method='get' action='http://" .. wifi.ap.getip() .."'>"
            buf = buf .. "Select access point: <select name='ap'>" .. available_aps .. "</select><br>"
            buf = buf .. "Enter wifi password: <input type='password' name='psw'></input><br>"
            buf = buf .. "Server-IP: <input name='ipTCP' value='192.168.178.1'></input><br>"
            buf = buf .. "<br><button type='submit'>Save</button>"
            buf = buf .. "</form></body></html>"
            local _on,_off = "",""
            if(_GET.pin == "ON1")then
                  buf = buf.."NICE";
            elseif(_GET.pin == "OFF1")then
                  gpio.write(led1, gpio.LOW);
            elseif(_GET.pin == "ON2")then
                  gpio.write(led2, gpio.HIGH);
            elseif(_GET.pin == "OFF2")then
                  gpio.write(led2, gpio.LOW);
            end
            client:send(buf);
            client:close();
            collectgarbage();
        end) 
    end)
end

再起動後に毎回クラッシュするのはなぜですか?

これをトラブルシューティングするにはどうすればよいですか?

Lua 5.1.4 を搭載した NodeMCU 0.9.5 ビルド 20150318 があります。

別の lua スクリプトは正常に実行されています。

4

2 に答える 2

0
  1. wifi.sta.connect() の呼び出しが表示されませんでした
  2. 文字列は不変であるため、buf を再割り当てするたびに新しいものを作成します。はい、最初に実行しなければ、GC がクリーンアップします。
  3. client:send() と client:close() を連続して呼び出すことはできません...まあ、できますが、うまく機能しません。また、そのすべてを 1 回の呼び出しで送信することも心配します。
  4. それらはコールバックを受け入れませんが、wifi 構成と接続ルーチンは非同期で実行する必要があり、タイマーでそれらを呼び出し、続行する前にステータスを確認します。

最初の項目はショーストッパーであり、他の項目は完全な障害を引き起こすか、断続的になる可能性があります。

于 2016-04-29T00:29:35.613 に答える
0

client:on("receive",function(client,request) 内に同じ関数があります。ここにあるはずはありません。

于 2015-12-19T23:59:22.560 に答える