2016-11-21 70 views
1

我有一个必须使用lua编程的具有nodemcu固件的ESP8266模块。 我写了一些代码来保存从文件中的html页面输入的用户名/密码凭证。在添加字符以写入文件时出现Lua错误

这是LUA功能和正常工作

function parse_wifi_credentials(vars) 
    if vars == nil or vars == "" then 
     return false 
    end 

    local _, _, wifi_ssid = string.find(vars, "wifi_ssid\=([^&]+)") 
    local _, _, wifi_password = string.find(vars, "wifi_password\=([^&]+)") 

    if wifi_ssid == nil or wifi_ssid == "" or wifi_password == nil then 
     return false 
    end 

    pwd_len = string.len(wifi_password) 
    if pwd_len ~= 0 and (pwd_len < 8 or pwd_len > 64) then 
     return false 
    end 

    file.open("credentials.txt", "a") 
    file.write(wifi_ssid) 
    file.write(wifi_password) 
    file.flush() 
    file.close() 

    return true 
end 

它所有的作品,但我的输出文件是一样的东西

usernamepasswordotherusernameotherpassword 

所以我插入的值,比如

file.write(wifi_ssid) 
file.write(":") 
file.write(wifi_password) 
分开场

和许多其他方式,但我的代码不能在我的ESP8266上工作,因为我得到not enough memory错误,但如果我不打印:我有类似10 kb免费的东西。

我也试过file.write(wifi_ssid, "\n")它工作,但输出不会改变。

Annyone知道我该怎么做才能插入字符beetwen字段?

+0

你使用的是什么版本的固件? –

回答

0

您需要使用

file.writeline(wifi_ssid) 

在文件中的行用行字符结束。

要确定文件是否因其垃圾内容而导致文件打开导致出现mem问题,可以先删除它并重新编写凭据。

此外它是很好有collectgarbage()方法后你的file.writeln或刷新操作。

+0

已经尝试过,它说没有足够的内存 – ScazzoMatto

+0

你可以试试它与一些垃圾收集?请在每个file.writeline后添加collectgarbage()并刷新? – cagdas

+0

另外我建议在写之前删除你的文件。可能的垃圾将在您的试用期间填充到它。 – cagdas