Esp-8266 Nodemcu Lua 获取 Web 和 UDP 服务器

如果我从“获取部分”删除注释,则会收到以下错误: PANIC: 调用 Lua API(内存不足)时未受保护的错误 PANIC: 调用 Lua API(字符串值)时未受保护的错误

如果我单独运行 2 个脚本,则不会报错 “获取部分”是下载脚本选项,如果存在于 Web 服务器中,则会下载(以远程升级 Lua 脚本)

这是为了我的 Windows 盾牌。哪里错了?

-- 升级 Web 服务器
WEBSRV="192.168.1.101" -- 例如,Fenix Web 服务器是免费的,也很好

-- 下载新脚本
--conn1 = net.createConnection(net.TCP, 0)
--conn1:on("receive", function(conn1, payload)
--  print(payload)
--  payloadOffset = string.find(payload, "--CODE") -- 要上传的脚本必须以此开始,这将在下载时自动删除
--  if (payloadOffset) then -- 如果存在有效文件,则删除旧文件并写入新文件
--    file.remove("code.lua"); file.open("code.lua", "w+")
--    file.write(string.sub(payload, payloadOffset)) file.flush() payloadFound = true
--    conn1:close()
--  end
--end)
--conn1:on("connection", function(cn1, answer)
--  cn1:send("GET /code.lua HTTP/1.1\r\n"
--          .. "Host: " .. WEBSRV .. "\r\n"
--          .. "Connection: close\r\nAccept: */*\r\n\r\n")
--end)
--conn1:connect(80, WEBSRV)

-- 服务器 UDP
s = net.createServer(net.UDP)
s:on("receive", function(s, pl)
  print("命令接收")
  tmr.alarm(0, 20000, 1, function()
    print("UDP 计时器")
  end)

  if (pl == "SU") then
    print("UDPSU")
  elseif (pl == "GIU") then
    print("UDPGIU")
  end
end)
s:listen(5000)

-- 服务器 TCP
srv = net.createServer(net.TCP)
srv:listen(80, function(conn)
  conn:on("receive", function(client, request)
    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
      tmr.alarm(0, 20000, 1, function()
        print("计时器")
        tmr.stop(0)
      end)
    end

    buf = buf .. "HTTP/1.1 200 OK\r\n Content-Type: text/html\r\n\r\n <!DOCTYPE html><html><head><meta name='viewport' content='width=device-width, initial-scale=1' />"
    buf = buf .. "<title>Tapparella sala piccola</title>"
    buf = buf .. "</head><body>"
    buf = buf .. "<p align='center'><b>Tapparelle sala piccola</b><br>";
    buf = buf .. "<a href=\'?pin=SU\'><button>SU</button></a>&nbsp;<a href=\'?pin=GIU\'><button>GIU</button></a>&nbsp;<a href=\'?pin=STOP\'><button>STOP</button></a></p>";
    buf = buf .. "</body></HTML>\r\n";

    local _on, _off = "", ""

    if (_GET.pin == "SU") then
      print("SU")
    elseif (_GET.pin == "GIU") then
      print("GIU")
    elseif (_GET.pin == "STOP") then
      print("STOP")
    end
    client:send(buf);
    client:close();
    collectgarbage();
  end)
end)
点赞